简介
Alibaba Cluster Data V2018 包含 6 个文件,压缩后大小近 50GB(压缩前 270+GB),里面包含了 4000 台服务器、相应的在线应用容器和离线计算任务长达 8 天的运行情况。
以下是表的简要介绍:
- machine_meta.csv:机器的元信息和事件信息。
- machine_usage.csv:每台机器的资源使用情况。
- container_meta.csv:容器的元信息和事件信息。
- container_usage.csv:每个容器的资源使用情况。
- batch_instance.csv:有关批处理工作负载中实例的信息。
- batch_task.csv:有关批处理工作负载中实例的信息。请注意,task_name字段中描述了每个作业任务的DAG信息。
通过这份数据,你可以:
- 了解当代先进数据中心的服务器以及任务运行特点;
- 试验你的调度、运筹等各种任务管理和集群优化方面的各种算法并撰写论文;
- 利用这份数据学习如何进行数据分析,揭示更多我们自己都未曾发现的规律。
1.下载
数据下载地址:https://github.com/alibaba/clusterdata/tree/v2018/cluster-trace-v2018
在上面的github网站中我们可以得到一下文件:
Windows系统下载具体的某一个文件使用一下链接:
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/machine_meta.tar.gz
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/machine_usage.tar.gz
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/container_meta.tar.gz
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/container_usage.tar.gz
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/batch_task.tar.gz
http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces/batch_instance.tar.gz
表名 | 文件大小 |
machine_usage.tar.gz | 1.7G |
machine_meta.tar.gz | 92K |
container_usage.tar.gz | 28G |
container_meta.tar.gz | 2.4M |
batch_task.tar.gz | 125M |
batch_instance.tar.gz | 20G |
linux系统和macos系统可以直接运行cluster-trace-v2018文件夹里的这个fetchData.sh文件下载相应文件:
fetchData.sh:
#!/bin/bash
url='http://aliopentrace.oss-cn-beijing.aliyuncs.com/v2018Traces'
mkdir data
cd data
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/machine_meta.tar.gz
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/machine_usage.tar.gz
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/container_meta.tar.gz
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/container_usage.tar.gz
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/batch_task.tar.gz
wget -c --retry-connrefused --tries=0 --timeout=50 ${url}/batch_instance.tar.gz
2.表的解释
cluster-trace-v2018文件夹里的schema.txt文件有详细的解释每个表的字段
machine_meta.csv
列名 | 类型 | 解释 | 说明 |
---|---|---|---|
machine_id | string | 机器的唯一ID(uid) | |
time_stamp | bigint | 时间指数 | 0表示时间戳在8天时间跨度之前或之后 |
failure_domain_1 | string | 第一级故障域 | 我们有多个级别的故障域,其中两个在此版本的跟踪中提供。对于任何需要容错的应用程序,它们的实例应分布在许多故障域中 |
failure_domain_2 | string | 第二级故障域 | 与failure_domain_1类似,这只是另一个级别的故障域 |
cpu_num | bigint | 一台机器的cpu数 | 单位是“核心”,例如4表示机器上有4个核心 |
mem_size | bigint | 机器的内存大小 | 规范化为所有机器的最大内存大小 |
status | string | 给定time_stamp的机器状态 | 机器的状态 |
machine_usage.csv
列名 | 类型 | 解释 | 说明 |
---|---|---|---|
machine_id | string | 机器的唯一ID(uid) | |
time_stamp | double | 时间戳 | 0表示时间戳在8天时间跨度之前或之后 |
cpu_util_percent | bigint | cpu利用率 | 用户和系统都包括在[0,100]之间。有一些无效值,它们设置为-1或101 |
mem_util_percent | bigint | 内存利用率 | [0,100]。有一些无效值,它们设置为-1或101 |
mem_gps | double | 内存带宽使用率 | 使用所有机器标准化为最大内存带宽 |
mpki | bigint | 每千条指令缓存未命中 | |
net_in | double | 传入网络包的数量 | 标准化为此列的最大值 |
net_out | double | 传出网络包的数量 | 标准化为此列的最大值 |
disk_usage_percent | double | 磁盘空间利用率 | [0,100]。有一些无效值,它们设置为-1或101 |
disk_io_percent | double | 磁盘io利用率百分比 | [0,100]。有一些无效值,它们设置为-1或101 |
container_meta.csv
列名 | 类型 | 解释 | 说明 |
---|---|---|---|
container_id | string | 容器的唯一ID(uid) | |
machine_id | string | 容器主机的机器uid | |
deploy_unit | string | 部署容器组 | 属于同一部署单元的容器提供一种服务,通常,它们应分布在故障域中 |
time_stamp | bigint | 时间戳 | 0表示时间戳在8天时间跨度之前或之后 |
cpu_request | bigint | 计划的cpushare请求 | 100表示1核心 |
cpu_limit | bigint | 计划的cpushare请求 | 100表示1核心 |
mem_size | bigint | 计划的内存大小 | 规范化为所有机器的最大内存大小 |
status | string | 给定time_stamp下容器的状态 | 给定时间戳的容器状态,有关详细信息,请参阅状态机 |
container_usage.csv
列名 | 类型 | 解释 | 说明 |
---|---|---|---|
container_id | string | 容器的唯一ID(uid) | |
machine_id | string | 容器运行的机器uid | |
time_stamp | bigint | 时间戳 | 0表示时间戳在8天时间跨度之前或之后 |
cpu_util_percent | bigint | cpu利用率 | [0,100]。有一些无效值,它们设置为-1或101 |
mpki | bigint | 每千条指令缓存未命中 | |
CPI | double | 给定time_stamp处的容器的cpi | |
mem_util_percent | bigint | 内存利用率 | [0,100]。有一些无效值,它们设置为-1或101 |
mem_gps | double | 内存带宽使用率 | 使用所有机器标准化为最大内存带宽 |
disk_usage_percent | double | 磁盘空间利用率 | [0,100]。有一些无效值,它们设置为-1或101 |
disk_io_percent | double | 磁盘io利用率百分比 | [0,100]。有一些无效值,它们设置为-1或101 |
net_in | double | 传入网络包的数量 | 规范化为所有机器的最大net_in |
net_out | double | 传出网络包的数量 | 规范化为所有机器的最大net_out |
batch_instance.csv
列名 | 类型 | 说明 | 评论 |
---|---|---|---|
instance_name | string | 批处理实例的唯一ID(uid) | 实例名称在(作业,任务)对中是唯一的 |
task_name | string | 实例所属的任务名称 | 任务名称在工作中是唯一的; note任务名称表示DAG信息,请参阅批处理工作负载的说明 |
task_type | string | 任务的类型 | 共有12种类型,其中只有一些具有DAG信息 |
job_name | string | 实例所属任务的job_name | 工作由许多任务组成。请参阅job-task-instance的说明 |
status | string | 实例的状态 | 实例的状态 |
start_time | bigint | 实例的开始时间 | 0表示时间戳在8天时间跨度之前或之后 |
end_time | bigint | 实例的结束时间 | 0表示时间戳在8天时间跨度之前或之后 |
machine_id | string | 实例运行的计算机ID | |
seq_no | bigint | seq没有实例 | |
total_seq_no | bigint | 一个实例的总seq否 | |
cpu_avg | double | 实例的cpu的平均cpu利用率 | 100表示1核心 |
cpu_max | double | 一个实例的cpu的最大cpu利用率 | 100表示1核心 |
mem_avg | double | 实例的cpu的平均内存利用率 | 规范化为所有机器的最大内存大小 |
mem_max | double | 实例的cpu的最大内存利用率 | 规范化为所有机器的最大内存大小 |
batch_task.csv
列名 | 类型 | 说明 | 评论 |
---|---|---|---|
task_name | string | 实例所属的任务名称 | 注意任务名称表示DAG信息, |
instance_num | bigint | 任务具有的实例数 | |
job_name | string | 任务的job_name | |
task_type | string | 任务的类型 | |
status | string | 实例的状态 | 任务的状态 |
start_time | bigint | 实例的开始时间 | 0表示时间戳在8天时间跨度之前或之后 |
end_time | bigint | 实例的结束时间 | 0表示时间戳在8天时间跨度之前或之后 |
plan_cpu | double | cpu为每个任务实例请求 | 100表示1核心 |
plan_mem | double | 为每个任务实例请求的规范化内存 | 规范化为所有机器的最大内存大小 |
3.关于batch_task.csvbatch_instance.csv和中的DAG数据
在此版本的群集数据中,我们包含许多类型的批量wokrload。他们中的大多数是DAG,依赖任务,而其中一些不是。对于那些不是DAG的任务,我们使用随机字符命名它们,例如task_Nzg3ODAwNDgzMTAwNTc2NTQ2Mw==
或task_Nzg3ODAwNDgzMTAwODc2NTQ3MQ==
。这些任务可以视为独立任务。
可以使用“作业 - 任务 - 实例”模型来描述完整的批处理计算作业。我们将描述每个术语的含义以及如何在跟踪中表达DAG信息。
作业通常由若干任务组成,其依赖性由DAG(有向无环图)表示。每个任务都有许多实例,并且只有当任务的所有实例都完成后才能将任务视为“已完成”,即如果任务2依赖于任务1,则任务2的任何实例都无法启动在任务1的所有实例完成之前。作业中的任务DAG可以从task_name
该作业的所有任务的字段中推断出来,并通过以下示例进行说明。
Job-A的DAG如下图所示。
Job-A由5个具有一些依赖性的任务组成。5个任务的DAG用它们表示task_name
。对于每项任务:
task1
的task_name
是M1
:意味着task1
是一个独立的任务,可以在不等待任何其他任务开始。M2_1
:意味着task2
取决于完成task1
M3_1
:意味着task3
取决于完成task1
R4_2
:意味着task4
取决于完成task2
M5_3_4
:意味着task5
依赖于两个task3
和task4
,也就是说,task5
既可以的所有实例之前不会启动task3
和task4
完成。
请注意,对于DAG信息,只有task_name中的数字值很重要,而第一个字符(例如M
,R
在示例中)与依赖关系无关。
每个任务的实例数用另一个字段表示instance_num
。