版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsshlsw/article/details/86628314
接上篇文章 AMD & Intel 机器 Spark 性能测试
硬件配置
共6台机器,每个对照组各三台。
intel 5118 内存为6通道,双路为12通道
amd 7401p 为8通道,如果用16*16G,则内存频率会下降到2133,带宽进一步降低,默认使用 Channel Interleave (单核最多同时使用2个内存通道),测试时改为 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,连续运行3次取平均值。
sql1
表大小:左表大小6g,右表大小1T
业务场景:左关联
sql: left join
sql2
表大小:450G
业务场景:取出一个分区的某些字段写入新表,该场景下计算节点本地带宽被打满
sql:filter
sql3
表大小:5G
业务场景:窗口函数,对某字段按时间维度排序取最早发生的一条数据
sql: over
sql4
表大小:左表4G,右表105G
业务场景:左表根据某字段group后,用该字段和右表join
sql:group,inner join
sql5
表大小:左表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% |