数据集提取
本数据集采用的是cluster-trace-v2018
详情可参考该文献:https://blog.csdn.net/weixin_41988248/article/details/92431588
CSV数据集提取操作见:https://blog.csdn.net/lucky_shi/article/details/105321149
关于read_csv包的用法见:https://blog.csdn.net/dc19971118/article/details/107721340
从阿里数据集来看,我们可以把它的数据大概分为两种信息,一种是机器 容器 任务和实例的元信息,以另一种是利用率的信息,如果是做分析,分析阿里集群的,后者是重要的,但对于做仿真实验的人来说,前一个信息的重要性显然更高,而本人采用阿里数据集是做仿真实验,所以接下来对于数据集的知识会偏向前者。语言采用python
首先是怎么把数据从数据集中把数据提取出来,本人采用了python的数据分析包(pandas):
temp_list = pd.read_csv(filepath_or_buffer=file_name, nrows=self.instance_num, usecols=task_cols)instance_data = temp_list.tolist()
然后你可以像我一样把它封装成一个对象列表,也可以直接把数据列表传上去,这个主要看个人爱好
container_list = list()for data in container_data:temp_container = ContainerData()temp_container.__set_container_data__(data)container_list.append(data)return container_list
然后是四个表的信息,
**注:参考文献中的数据种类是对的,但是其某列的数据类型并不对应表某行数据类型,以下为整理好的对应数据:
machine_meta文件:
# 选中的列分别是:0机器ID 1时间索引 2第一级故障域 3第二集故障域 4机器的CPU数 5机器的内存大小 6状态cols = [0, 1, 2, 3, 4, 5, 6]
container_meta文件:
# 从数据集中提取数据: 0容器ID 1机器ID 2时间戳 3部署域 4状态 5需要的cpu数量 6cpu限制数量 7内存大小cols = [0, 1, 2, 3, 4, 5, 6, 7]
batch_task文件:
# 提取出来的数据包括: 0任务名字 1实例数 2机器名字 3任务类型 4 状态 5开始时间 6结束时间 7 cpu核心数 8 内存量task_col = [0, 1, 2, 3, 4, 5, 6, 7, 8]
batch_instance文件:
# 0实例名 1任务名 2工作名 3任务类型 4状态 5开始时间 6结束时间 7机器ID 8Seq_no实例 9total_seq_no实例 10实例中cpu的平均利用率 11实例中cpu中最大利用率 12实例的平均内存利用率 13实例的最大内存利用率 注意后面四项可能没有数据task_cols = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
任务依赖上,可以从数据集中看出,阿里的批处理工作负载由“job-task-instance”模型进行描述。 与谷歌不一样的是:google的数据的最小处理单位是task,而阿里的则是instance。
可以根据task_name来分析出这个Job的DAG图的。作业通常由若干任务组成,其依赖性由DAG(有向无环图)表示。每个任务都有许多实例,并且只有当任务的所有实例都完成后才能将任务视为“已完成”,即如果任务-2依赖于任务-1,则任务2的任何实例都无法启动在任务-1的所有实例完成之前。
故障域:用于提高容错能力,分别提供两个故障域,当一个故障域发生故障时,另一个故障域能够继续提供服务
展望:从参考文献中,可以看到任务之间是存在依赖关系的,接下来会重点考虑实例的设计和任务之间的依赖性问题