使用eRDMA可以获得超低的延迟,更快地处理请求。本文介绍如何创建以eRDMA增强型实例作为节点的Spark集群,并部署Benchmark测试Spark集群处理负载的性能。
背景信息
Benchmark是一种基准性能测试工具,主要用于测试负载的执行时间、传输速度、吞吐量和资源占用率等。
步骤一:准备环境
在测试集群性能前,需要先准备测试需要的集群环境,例如Hadoop和Spark机器、安装Hadoop、安装并配置eRDMA等。
准备Hadoop环境。如果已有大数据集群,请忽略该步骤。
软硬件环境要求
部署该集群需要准备Hadoop、Spark机器,请参考如下版本进行配置。
Hadoop版本:Hadoop 3.2.1
Spark版本:Spark 3.2.1
ECS实例:
实例规格:请参见基本规格
vCPU个数:16
集群节点个数:1个主节点、3个worker节点
安装步骤
安装Hadoop大数据集群的具体操作,请参见通过FastMR自动拉起大数据集群。
登录集群主节点上的ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
配置eRDMA。
驱动安装
具体操作,请参见在企业级实例上配置eRDMA。
网络配置
执行以下命令,打开
hosts
文件。vim /etc/hosts
按i键进入编辑模式,在配置文件中修改以下内容。
192.168.201.83 poc-t5m0 master1 192.168.201.84 poc-t5w0 192.168.201.86 poc-t5w1 192.168.201.85 poc-t5w2
说明请根据实际情况,将IP地址替换为实际eRDMA网卡对应的IP地址。
按Esc键退出编辑模式,输入
:wq
并按下Enter键,保存并退出文件。
yarn配置
说明如果实例的默认网卡支持eRDMA,无需进行Yarn配置。
依次执行以下命令,打开yarn-env.sh文件。
cd /opt/hadoop-3.2.1/etc/hadoop vim yarn-env.sh
按i键进入编辑模式,在配置文件中增加以下内容:
RDMA_IP=`ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1` export YARN_NODEMANAGER_OPTS="-Dyarn.nodemanager.hostname=$RDMA_IP"
说明请根据实际情况,将eth1替换为实际eRDMA的网卡名称。
按Esc键退出编辑模式,输入
:wq
并按下Enter键,保存并退出文件。
Spark配置
说明如果实例的默认网卡支持eRDMA,无需进行Spark配置。
依次执行以下命令,打开spark-env.sh文件。
cd /opt/spark-3.2.1-bin-hadoop3.2/conf vim spark-env.sh
按i键进入编辑模式,在配置文件中增加以下内容。
export SPARK_LOCAL_IP=`/sbin/ip addr show eth1 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1`
说明请根据实际情况,将eth1替换为实际eRDMA的网卡名称。
按Esc键退出编辑模式,输入
:wq
并按下Enter键,保存并退出文件。
执行以下命令,启动HDFS及Yarn。
$HADOOP_HOME/sbin/start-all.sh
步骤二:下载Benchmark安装包
本步骤为您介绍如何下载用于测试的Benchmark安装包。
执行以下命令,下载Benchmark安装包。
wget https://mracc-release.oss-cn-beijing.aliyuncs.com/erdma-spark/spark-erdma-jverbs.tar.gz
执行以下命令,解压
spark-erdma-jverbs.tar.gz
安装包。tar -zxvf spark-erdma-jverbs.tar.gz
安装包文件介绍:
erdmalib:运行spark-erdma需要的native库,对应文件包括libdisni.so。
plugin-sparkrdma:支持Spark RDMA的插件及依赖库,对应文件为spark-eRDMA-1.0-for-spark-3.2.1.jar和disni-2.1-jar-with-dependencies.jar。
步骤三:执行Benchmark测试
本步骤为您介绍如何使用Benchmark测试Spark集群处理负载的性能。
执行以下命令,修改ip route。
说明如果实例的默认网卡支持eRDMA,可以跳过该步骤。
route del -net 192.168.201.0 netmask 255.255.255.0 metric 0 dev eth0 && \ route add -net 192.168.201.0 netmask 255.255.255.0 metric 1000 dev eth0
说明请根据实际情况,将IP地址替换为实际eRDMA网卡对应的网关IP地址。
Spark配置。
执行以下命令,打开配置文件spark-jverbs-erdma.conf。
vim /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf
按i键进入编辑模式,将配置文件修改为以下内容。
spark.master yarn spark.deploy-mode client #driver spark.driver.cores 4 spark.driver.memory 19g #executor spark.executor.instances 12 spark.executor.memory 10g spark.executor.cores 4 spark.executor.heartbeatInterval 60s #shuffle spark.task.maxFailures 4 spark.default.parallelism 36 spark.sql.shuffle.partitions 192 spark.shuffle.compress true spark.shuffle.spill.compress true #other spark.network.timeout 3600 spark.sql.broadcastTimeout 3600 spark.eventLog.enabled false spark.eventLog.dir hdfs://master1:9000/sparklogs spark.eventLog.compress true spark.yarn.historyServer.address master1:18080 spark.serializer org.apache.spark.serializer.KryoSerializer #eRDMA spark.driver.extraLibraryPath /path/erdmalib spark.executor.extraLibraryPath /path/erdmalib spark.driver.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.executor.extraClassPath /path/spark-eRDMA-1.0-for-spark-3.2.1.jar:/path/disni-2.1-jar-with-dependencies.jar spark.shuffle.manager org.apache.spark.shuffle.sort.RdmaShuffleManager spark.shuffle.sort.io.plugin.class org.apache.spark.shuffle.rdma.RdmaLocalDiskShuffleDataIO spark.shuffle.rdma.recvQueueDepth 128
说明将
spark.shuffle.compress
设置为false
会得到更好的加速比。本配置中的
spark.executor.instances
、spark.executor.memory
、spark.executor.cores
、spark.sql.shuffle.partitions
等Spark资源配置以32 vCPU、128 GB规格的实例为例,请您根据实际实例或者集群规模进行调整。
按Esc键退出编辑模式,输入
:wq
并按下Enter键,保存并退出文件。
依次执行以下命令,生成数据。
cd /opt/spark-3.2.1-bin-hadoop3.2/conf spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-normal.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_DataGen spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar hdfs://master1:9000/tmp/tpcds_400 tpcds_400 400 parquet
说明数值
400
代表生成的数据量大小,单位为GB,请您根据实际集群规模调整。执行以下命令,执行Benchmark测试。
spark-submit --properties-file /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf --class com.databricks.spark.sql.perf.tpcds.TPCDS_Bench_RunAllQuery spark-sql-perf_2.12-0.5.1-SNAPSHOT.jar all hdfs://master1:9000/tmp/tpcds_400 tpcds_400 /tmp/tpcds_400_result
当出现如下类似结果时,表示测试完成,您可以从测试结果中查看Spark集群处理负载的执行时间。
说明您可以按照以上方法,去掉Spark conf中eRDMA插件相关配置或者登录其他不支持eRDMA的集群,对Spark eRDMA插件的性能做对比。