当前位置:网站首页>2019阿里集群数据集使用总结
2019阿里集群数据集使用总结
2022-07-06 10:05:00 【5-StarrySky】
2019阿里集群数据集使用总结
数据集中的一些细节
在离线负载的实例表格(batch_instance)中,实例的开始时间和结束时间有问题,如果你仔细去查,就会发现实例的开始时间居然会比实例的结束时间要大,所以减出来是负数,我一开始的时候调BUG怎么都没发现,知道有一天注意到我的任务量是负数,我才发现怎么回事,这里也给出我的任务量的定义:
cloudlet_total = self.cpu_avg * (self.finished_time_data_set - self.start_time_data_set) cloudmem_total = self.mem_avg * (self.finished_time_data_set - self.start_time_data_set)
第二个坑,就是上面的CPU的数量,对于离线负载来说,instance里面的CPU数量都是乘以了100的数量,所以你需要做到标准化,因为机器节点中CPU的数量是不要除以100的,就是96,同理container_mate的CPU数量也需要注意,如果是400之类的,就需要再除以100
创建出一个JOB和APP
# 拼接出APP 一个APP包括多个容器
def create_app(self):
container_dao = ContainerDao(self.a)
container_data_list = container_dao.get_container_list()
container_data_groupby_list = container_dao.get_container_data_groupby()
for app_du,count in container_data_groupby_list:
self.app_num += 1
num = 0
app = Apps(app_du)
index_temp = -1
for container_data in container_data_list:
if container_data.app_du == app_du:
index_temp += 1
container = Container(app_du)
container.set_container(container_data)
container.index = index_temp
app.add_container(container)
num += 1
if num == count:
# print(app.app_du + "")
# print(num)
app.set_container_num(num)
self.App_list.append(app)
break
# 创建出JOB
def create_job(self):
instance_dao = InstanceDao(self.b)
task_dao = TaskDao(self.b)
task_data_list = task_dao.get_task_list()
job_group_by = task_dao.get_job_group_by()
instance_data_list = instance_dao.get_instance_list()
# instance_data_list = instance_dao.get_instance_list()
for job_name,count in job_group_by:
self.job_num += 1
job = Job(job_name)
for task_data in task_data_list:
if task_data.job_name == job_name:
task = Task(job_name)
task.set_task(task_data)
for instance_data in instance_data_list:
if instance_data.job_name == job_name and instance_data.task_name == task_data.task_name:
instance = Instance(task_data.task_name,job_name)
instance.set_instance(instance_data)
task.add_instance(instance)
pass
pass
task.prepared()
job.add_task(task)
pass
# 以下语句可以去掉,去掉就表示去掉了DAG关系
job.DAG()
self.job_list.append(job)
# 创建DAG关系
def DAG(self):
for task in self.task_list:
str_list = task.get_task_name().replace(task.get_task_name()[0],"")
num_list = str_list.split('_')
# 当前任务的序列号 M1
start = num_list[0]
del num_list[0]
# 后面指向前面 M2_1 1指向2 1是2的前驱 2是1的后继
for task_1 in self.task_list:
str_list_1 = task_1.get_task_name().replace(task_1.get_task_name()[0], "")
num_list_1 = str_list_1.split('_')
del num_list_1[0]
# 当前任务
for num in num_list_1:
if num == start:
# 保存后继
task.add_subsequent(task_1.get_task_name())
# 保存前驱
task_1.add_precursor(task.get_task_name())
# task_1.add_subsequent(task.get_task_name())
pass
pass
pass
pass
pass
怎么读取数据并创建对应实例
import pandas as pd
from data.containerData import ContainerData
""" 数据集中读取容器数据 属性: a:选择哪一个数据集, = 1 :表示数据集1 容器124个 有20组 = 2 :表示数据集2 容器500个 有66组 = 3 :表示数据集3 容器1002个 有122组 """
# 这里仅以contaienr为例
class ContainerDao:
def __init__(self, a):
# 行数
self.a = a
# 从数据集中把容器数据读取出来,并存入contaianer_list
def get_container_list(self):
# 从数据集中提取数据: 0容器ID 1机器ID 2时间戳 3部署域 4状态 5需要的cpu数量 6cpu限制数量 7内存大小
columns = ['container_id','time_stamp','app_du','status','cpu_request','cpu_limit','mem_size','container_type','finished_time']
filepath_or_buffer = "G:\\experiment\\data_set\\container_meta\\app_"+str(self.a)+".csv"
container_dao = pd.read_csv(filepath_or_buffer, names=columns)
temp_list = container_dao.values.tolist()
# print(temp_list)
container_data_list = list()
for data in temp_list:
# print(data)
temp_container = ContainerData()
temp_container.set_container_data(data)
container_data_list.append(temp_container)
# print(temp_container)
return container_data_list
def get_container_data_groupby(self):
""" columns = ['container_id', 'machine_id ', 'time_stamp', 'app_du', 'status', 'cpu_request', 'cpu_limit', 'mem_size'] filepath_or_buffer = "D:\\experiment\\data_set\\container_meta\\app_" + str(self.a) + ".csv" container_dao = pd.read_csv(filepath_or_buffer, names=columns) temp_container_dao = container_dao temp_container_dao['count'] = 0 temp_container_dao.groupby(['app_du']).count()['count'] :return: """
temp_filepath = "G:\\experiment\\data_set\\container_meta\\app_" + str(self.a) + "_groupby.csv"
container_dao_groupby = pd.read_csv(temp_filepath)
container_data_groupby_list = container_dao_groupby.values.tolist()
return container_data_groupby_list
对应的container_data类:
class ContainerData:
def __init__(self):
pass
# 数据集中的容器ID
def set_container_id(self, container_id):
self.container_id = container_id
# 数据集中的机器ID
def set_machine_id(self, machine_id):
self.machine_id = machine_id
# 数据集中的部署容器组(用于构建集群)
def set_deploy_unit(self, app_du):
self.app_du = app_du
# 数据集中的时间戳
def set_time_stamp(self, time_stamp):
self.time_stamp = time_stamp
# 数据集中的cpu限制请求
def set_cpu_limit(self, cpu_limit):
self.cpu_limit = cpu_limit
# 数据集中的cpu请求
def set_cpu_request(self, cpu_request):
self.cpu_request = cpu_request
# 数据集中请求的内存大小
def set_mem_size(self, mem_size):
self.mem_request = mem_size
# 数据集中的容器状态
def set_state(self, state):
self.state = state
pass
def set_container_type(self,container_type):
self.container_type = container_type
pass
def set_finished_time(self,finished_time):
self.finished_time = finished_time
# 用数据集初始化对象
def set_container_data(self, data):
# 容器ID
self.set_container_id(data[0])
# self.set_machine_id(data[1])
# 容器时间戳(到达时间)
self.set_time_stamp(data[1])
# 容器组
self.set_deploy_unit(data[2])
# 状态
self.set_state(data[3])
# cpu需求
self.set_cpu_request(data[4])
# cpu限制
self.set_cpu_limit(data[5])
# 内存大小
self.set_mem_size(data[6])
# 容器类型
self.set_container_type(data[7])
# 完成时间
self.set_finished_time(data[8])
最后
边栏推荐
- Solid principle
- 面试突击63:MySQL 中如何去重?
- How to submit data through post
- How to output special symbols in shell
- ASEMI整流桥DB207的导通时间与参数选择
- Appium automated test scroll and drag_ and_ Drop slides according to element position
- Pourquoi Li shufu a - t - il construit son téléphone portable?
- 二分(整数二分、实数二分)
- 面试突击62:group by 有哪些注意事项?
- Jerry's updated equipment resource document [chapter]
猜你喜欢
带你穿越古罗马,元宇宙巴士来啦 #Invisible Cities
After entering Alibaba for the interview and returning with a salary of 35K, I summarized an interview question of Alibaba test engineer
Today in history: the mother of Google was born; Two Turing Award pioneers born on the same day
Jerry's updated equipment resource document [chapter]
Selected technical experts from China Mobile, ant, SF, and Xingsheng will show you the guarantee of architecture stability
IP, subnet mask, gateway, default gateway
SAP UI5 框架的 manifest.json
Interview assault 63: how to remove duplication in MySQL?
Compilation principle - top-down analysis and recursive descent analysis construction (notes)
趣-关于undefined的问题
随机推荐
《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
The art of Engineering (2): the transformation from general type to specific type needs to be tested for legitimacy
2022年大厂Android面试题汇总(二)(含答案)
中移动、蚂蚁、顺丰、兴盛优选技术专家,带你了解架构稳定性保障
Basic configuration and use of spark
Compile and build, from the bottom to the top
Pytorch extract middle layer features?
Jerry's access to additional information on the dial [article]
Debug and run the first xv6 program
Interview assault 63: how to remove duplication in MySQL?
VR全景婚礼,帮助新人记录浪漫且美好的场景
The art of Engineering (1): try to package things that do not need to be exposed
Nodejs developer roadmap 2022 zero foundation Learning Guide
Olivetin can safely run shell commands on Web pages (Part 1)
趣-关于undefined的问题
Wechat applet obtains mobile number
SAP UI5 框架的 manifest.json
Jerry's watch deletes the existing dial file [chapter]
Is it meaningful for 8-bit MCU to run RTOS?
Summary of Android interview questions of Dachang in 2022 (I) (including answers)