Spark on RDMA测试套件HiBench使用实践

举报
笨熊爱喝cola 发表于 2020/11/22 21:06:49 2020/11/22
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。