Elastic Remote Direct Memory Access (eRDMA) を使用すると、超低レイテンシでリクエストを処理できます。 このトピックでは、ノードとしてeRDMA拡張Elastic Compute Service (ECS) インスタンスを含むSparkクラスターを作成し、ベンチマークを使用してSparkクラスターの負荷処理パフォーマンスをテストする方法について説明します。
背景情報
ベンチマークは、負荷実行時間、伝送速度、スループット、およびリソース使用率を含む負荷処理パフォーマンスをテストするために使用されるパフォーマンスベンチマークツールです。
ステップ1: 準備をする
Sparkクラスターの負荷処理パフォーマンスをテストする前に、テストに必要な環境を設定する準備をしてください。 準備には、HadoopマシンとSparkマシンの準備、Hadoopのインストール、eRDMAのインストールと設定が含まれます。
Hadoop環境を準備します。 Hadoopクラスターがすでに存在する場合は、この手順をスキップします。
ハードウェアおよびソフトウェア環境に関する要件
次のHadoopバージョン、Sparkバージョン、およびECSインスタンスを準備します。
Hadoopバージョン: Hadoop 3.2.1。
Sparkバージョン: Spark 3.2.1。
ECSインスタンス:
ECSインスタンスタイプ: 「概要」をご参照ください。
ECSインスタンスあたりのvCPU数: 16。
ECSインスタンスの数: 4 1つのECSインスタンスがマスターノードとして機能し、他の3つのECSインスタンスがHadoopクラスターのワーカーノードとして機能します。
インストール手順
Hadoopクラスターのインストール方法については、「FastMRを使用してビッグデータクラスターをスピンアップし、クラスターでTPCDSタスクを実行する」をご参照ください。
マスターノードとして機能するECSインスタンスにログインします。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
eRDMAを設定します。
必要なドライバをインストールします。
詳細については、「エンタープライズレベルのインスタンスでのeRDMAの設定」をご参照ください。
ネットワーク設定を構成します。
次のコマンドを実行して、
hosts
ファイルを開きます。vim /etc/hosts
Iキーを押してInsertモードに入り、ファイル内の次の内容を変更します。
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インターフェイス (ERIs) のIPアドレスに置き換えます。
Escキーを押して挿入モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して終了します。
さらに別のリソースネゴシエーション (YARN) 設定を設定します。
説明ECSインスタンスのデフォルトのネットワークインターフェイスコントローラー (NIC) がeRDMAをサポートしている場合、YARN設定を設定する必要はありません。
次のコマンドを順番に実行して、yarn-env.shファイルを開きます。
cd /opt/hadoop-3.2.1/etc/hadoop vim yarn-env.sh
Iキーを押してInsertモードに入り、次のコンテンツをファイルに追加します。
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を実際のERI名に置き換えます。
Escキーを押して挿入モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して終了します。
Sparkを設定します。
説明ECSインスタンスのデフォルトNICがeRDMAをサポートしている場合、Sparkを設定する必要はありません。
次のコマンドを順番に実行して、spark-env.shファイルを開きます。
cd /opt/spark-3.2.1-bin-hadoop3.2/conf vim spark-env.sh
Iキーを押してInsertモードに入り、次のコンテンツをファイルに追加します。
export SPARK_LOCAL_IP='/sbin/ip addr show eth1 | grep "inet\b" | awk'{print $2}'| cut -d/ -f1'
説明eth1を実際のERI名に置き換えます。
Escキーを押して挿入モードを終了します。
:wq
と入力し、Enterキーを押してファイルを保存して終了します。
次のコマンドを実行して、Hadoop分散ファイルシステム (HDFS) とYARNを起動します。
$HADOOP_HOME/sbin/start-all.sh
ステップ2: 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プラグインを実行するために必要なネイティブライブラリ。 このライブラリは、libdisni.soファイルに対応しています。
plugin-sparkrdma: spark-eRDMA-1.0-for-spark-3.2.1.jarファイルとdisni-2.1-jar-with-dependencies.jarファイルに対応する、Spark RDMAをサポートするプラグインと依存関係ライブラリ。
ステップ3: ベンチマークテストを実行する
このセクションでは、ベンチマークを使用してSparkクラスターの負荷処理パフォーマンスをテストする方法について説明します。
次のコマンドを実行して、IPルートを変更します。
説明ECSインスタンスのデフォルトNICが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アドレスを実際のERIのゲートウェイIPアドレスに置き換えます。
Sparkを設定します。
次のコマンドを実行して、spark-jverbs-erdma.conf設定ファイルを開きます。
vim /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf
Iキーを押してInsertモードに入り、ファイル内の次のコンテンツを変更します。
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.comプレス
のパラメーターをfalse
に設定して、より良い加速比を実現します。上記のサンプルコードでは、32 vCPUと128 GBのメモリを持つECSインスタンスの
spark.exe cutor.instances
、spark.exe cutor.memory
、spark.exe cutor.core
、Spark. sql.shuffle.partitions
パラメーターなどのsparkリソース設定が使用されています。 実際のクラスタースケールまたはインスタンスの仕様に基づいて、Sparkリソース設定を変更します。
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 -- 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 です。 クラスタースケールに基づいて値を変更します。次のコマンドを実行して、ベンチマークテストを実行します。
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すべてのhdfs:// master1:9000/tmp/tpcds_400 tpcds_400 /tmp/tpcds_400_result
次のコマンド出力は、テストが完了したことを示します。 テスト結果でSparkクラスターのロード実行時間を表示できます。
説明spark confディレクトリ内のファイルからSpark-erdmaプラグイン設定を削除するか、eRDMAをサポートしていない別のSparkクラスターにログインし、上記の方法を使用して別のベンチマークテストを実行できます。 次に、2つのテスト結果を比較して、eRDMAをサポートするSparkクラスターとeRDMAをサポートしないSparkクラスターのパフォーマンスの違いを確認できます。