使用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外掛程式的效能做對比。