Spark on RDMA测试套件HiBench使用实践
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
- 点赞
- 收藏
- 关注作者
评论(0)