Spark on RDMA测试套件HiBench使用实践
【摘要】 Spark on RDMA指在Spark计算的shuffle过程中采用RDMA的技术来加快shuffle数据的传输以加快数据处理的计算性能。而目前常用的RDMA设备由IB及Mellanox,本文中采用的为Mellanox的网卡及SparkRDMA套件。1.SparkRDMA及Hibench套件的下载SparkRDMA的下载地址为 https://github.com/Mellanox/Spa...
Spark on RDMA指在Spark计算的shuffle过程中采用RDMA的技术来加快shuffle数据的传输以加快数据处理的计算性能。而目前常用的RDMA设备由IB及Mellanox,本文中采用的为Mellanox的网卡及SparkRDMA套件。
1.SparkRDMA及Hibench套件的下载
SparkRDMA的下载地址为 https://github.com/Mellanox/SparkRDMA
Hibench的下载地址为 https://github.com/Intel-bigdata/HiBench
首先通过git命令将这两个组件下载到要使用的服务器上,并且在服务器上搭建好Yarn集群待进行spark及其他任务的使用。
由于SparRDMA为Spark的一个插件项目,因此在下载到本地之后需要对SparkRDMA进行编译打包。
使用命令
mvn -DskipTests clean package -Pspark-2.4.0 #后面为要使用的spark版本
随后会在output目录下生产相应的二进制jar包
SparkRDMA是基于DiSNI库来调用底层RDMA的函数及操作,因此我们需要下载支持DISNI的二进制包
git clone https://github.com/zrlio/disni.git
cd disni
git checkout tags/v1.7 -b v1.7 #当前版本支持1.7,因此需要1.7的文件
2.配置运行时参数
打开我们的Hibench目录,可以发现里面包含多个不同的测试benchmark,我们使用Sparkbenchmark,进入conf目录对Hibench及Spark进行参数的设置
通过benchmark.lst可以查看Hibench支持的测试种类。
首先我们对Hibench中的参数进行设置:
打开hibench.conf,对参数进行设置
# 在测试中的mapper的个数
hibench.default.map.parallelism 54
# 在测试中的reducer的个数
hibench.default.shuffle.parallelism 54
#======================================================
# Report files
#======================================================
# 输出测试报告的格式
hibench.report.formats "%-12s %-10s %-8s %-20s %-20s %-20s %-20s\n"
# 输出测试报告的所在目录
hibench.report.dir ${hibench.home}/report
# 输出测试报告的文件名字
hibench.report.name hibench.spark.report
# 输入输出的格式,可选为: Text, Sequence, Null.
sparkbench.inputformat Sequence
sparkbench.outputformat Sequence
复制spark.conf.tmplate为spark.conf,对参数进行修改
# Spark home
hibench.spark.home /usr/local/spark
# Spark master的运行模式
# standalone mode: spark://xxx:7077
# YARN mode: yarn-client
hibench.spark.master yarn-client
# 在yarn模式下分配多少个executor及executor的cpu核数量
hibench.yarn.executor.num 6
hibench.yarn.executor.cores 3
# 分配spark的executor及driver的内存大小
spark.executor.memory 14g
spark.driver.memory 14g
# 通过前面的hibench参数对map数量进行控制
spark.default.parallelism ${hibench.default.map.parallelism}
# 通过前面的hibench参数对reducer数量进行控制
spark.sql.shuffle.partitions ${hibench.default.shuffle.parallelism}
......
# 设置sparkRDMA的jar包位置
spark.driver.extraClassPath /usr/local/SparkRDMA/target/spark-rdma-3.1-for-spark-2.4.0-jar-with-dependencies.jar
spark.executor.extraClassPath /usr/local/SparkRDMA/target/spark-rdma-3.1-for-spark-2.4.0-jar-with-dependencies.jar
# 设置shuffle的manager类型
spark.shuffle.manager org.apache.spark.shuffle.rdma.RdmaShuffleManager
# 关闭compress参数以加快性能
spark.shuffle.compress false
spark.shuffle.spill.compress false
spark.broadcast.compress false
spark.broadcast.checksum false
spark.locality.wait 0
# 由于使用rdma需要调用底层的disni库,因此需指定disni的路径
spark.executor.extraJavaOptions -Djava.library.path=/usr/local/lib/disni/disni-1.7
spark.driver.extraJavaOptions -Djava.library.path=/usr/local/lib/disni/disni-1.7
3.执行测试并且收集结果
执行测试前需要先生成测试所用的数据,以wordcount为例
进入HiBench/bin/workloads/micro/wordcount目录,进入prepare目录执行prepare.sh脚本执行生成数据操作
生成好数据之后执行spark目录下的run.sh执行spark-wordcount程序,并且在report目录下查看测试结果
Type Date Time Input_data_size Duration(s) Throughput(bytes/s) Throughput/node
ScalaSparkWordcount 2020------ --:--:-- 603384181 36.142 16694819 5564939
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)