接上篇文章 AMD & Intel 机器 Spark 性能测试
文章目录
- 硬件配置
- 测试
-
- 角色分配
- 线上sql任务模拟
- 使用 sysbench 测试内存读写
- 结果
硬件配置
每个对照组有6台机器和3台。
intel 5118 内存为6通道,双通道为12通道 amd 7401p 为8通道,如果使用16通道*16G,内存频率降至2133,带宽进一步降低,默认使用 Channel Interleave (单核最多同时使用两个内存通道) Die Interleave(8通道可用于每个核)
AMD
- AMD 7401P
- 8 * 32G
- disk: 11 * HDD(8T) 1 * SSD(1T)
- nic: 2 * 10Gbps
Intel
- Intel 5118 * 2
- 16 * 16G
- disk: 11 * HDD(8T) 1 * SSD(1T)
- nic: 2 * 10Gbps
测试
角色分配
- Namenode
- DataNode
- ResourceManager
- NodeManager
- container 使用 cgroup strict mode
- Namenode 和 ResourceManager 所在节点 nodeManager vcore 分配 42c,memory 168G
- 计算节点 nodeManager vcore 分配 45c,memory 180G
- spark Executor 设置: <10g 2g, 3c> * 60
- HDFS 数据盘设置 Data01 ~ Data11
- Yarn tmp dir 设置 Data01 ~ Data11 ,Data12 设置3个目录
线上sql任务模拟
连接生产集群的数据源HDFS,同时执行相同的任务,结果是parquet格式写入HDFS,连续运行取平均值。
表尺寸:左表尺寸6g,右表大小1T
业务场景:左关联
sql: left join
表大小:450G
业务场景:在新表中取出一些字段,计算节点本地带宽
sql:filter
表大小:5G
业务场景:窗口函数,根据时间维度对某个字段的最早数据进行排序
sql: over
表面尺寸:左表4G,右表105G
业务场景:左表按字段group之后,用这个字段和右表join
sql:group,inner join
表面大小:左表100k,右表10g
业务场景:日志审计
sql: group , order * 2 , left join
使用 sysbench 对内存读写进行测试
例如:100g,每个block 为8k,随机写
sysbench --test=memory --memory-block-size=8k --memory-total-size=100G --memory-oper=write --memory-access-mode=rnd run
结果
… | sql1 | sql2 | sql3 | sql4 | sql5 | tpcds avg |
---|---|---|---|---|---|---|
intel | 169s | 308s | 178s | 34s | 83s | 44.1s |
amd | 175s | 346s | 180s | 38s | 85s | 49.5s |
对比 | 97% | 89% | 99% | 89% | 98% | 89% |
内存速度 | 8k顺序写 | 8k顺序度读 | 8k随机写 | 8k随机读 |
---|---|---|---|---|
amd | 9.7 GB/s | 15.3 GB/s | 1.4 GB/s | 1.4 GB/S |
intel | 11.3 GB/s | 24 GB/s | 2.3 GB/s | 2.3 GB/S |
… | Max 功率(W) | 10A机柜(W) | 服务器单柜最大承载能力(台) | 16A机柜(W) | 服务器单柜最大承载量 |
---|---|---|---|---|---|
INTEL | 389 | 2200 | 5.7 | 3520 | 9 |
AMD | 282 | 2200 | 7.8 | 3520 | 12.5 |
… | 实际业务性能 | 整机峰值功耗 | 8k顺序读/写 | 8k随机读/写 |
---|---|---|---|---|
amd | 90% | 73% | 64%/86% | 61%/61% |
intel | 100% | 100% | 100%/100% | 100%/100% |