eRDMA で強化された Elastic Compute Service (ECS) インスタンスで Spark クラスターを構築し、ベンチマークを実行して超低レイテンシーでの負荷処理性能を測定します。
背景
ベンチマークは、負荷実行時間、スループット、リソース使用率を測定するパフォーマンスベンチマークツールです。
手順 1: 環境の準備
ベンチマークテストを実行する前に、Hadoop クラスターをセットアップし、必要なドライバーをインストールし、eRDMA を設定します。
-
Hadoop 環境を準備します。Hadoop クラスターが既に存在する場合は、この手順をスキップしてください。
-
ハードウェアとソフトウェアの要件
次の Hadoop バージョン、Spark バージョン、および ECS インスタンスを準備します:
-
Hadoop バージョン:Hadoop 3.2.1。
-
Spark バージョン:Spark 3.2.1。
-
ECS インスタンス
-
インスタンスタイプ:「概要」をご参照ください。
-
インスタンスあたりの vCPU:16。
-
インスタンス数:4 台。1 台のマスターノードと 3 台のワーカーノード。
-
-
-
インストール
-
-
マスターノードにログインします。「Workbench を使用した 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 インターフェース (ERI) の IP アドレスに置き換えてください。
-
Esc キーを押し、
:wqと入力して Enter キーを押し、保存して終了します。
-
-
YARN の設定を構成します。
説明ECS インスタンスのデフォルト NIC が eRDMA をサポートしている場合は、この手順をスキップしてください。
-
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を実際の ERI 名に置き換えてください。 -
Esc キーを押し、
:wqと入力して Enter キーを押し、保存して終了します。
-
-
Spark を設定します。
説明ECS インスタンスのデフォルト NIC が eRDMA をサポートしている場合は、この手順をスキップしてください。
-
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を実際の ERI 名に置き換えてください。 -
Esc キーを押し、
:wqと入力して Enter キーを押し、保存して終了します。
-
-
-
HDFS と YARN を起動します:
$HADOOP_HOME/sbin/start-all.sh
手順 2: ベンチマークインストールパッケージのダウンロード
ベンチマークインストールパッケージをダウンロードして解凍し、Spark eRDMA プラグインと依存関係ライブラリを取得します。
-
ベンチマークインストールパッケージをダウンロードします:
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: libdisni.so に対応する、spark-erdma プラグインに必要なネイティブライブラリです。
-
plugin-sparkrdma: Spark RDMA プラグインと依存ライブラリであり、spark-eRDMA-1.0-for-spark-3.2.1.jar と disni-2.1-jar-with-dependencies.jar に対応します。
-
手順 3: ベンチマークテストの実行
IP ルートと 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 のネットワークアドレスに置き換えてください。
-
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 # ドライバー spark.driver.cores 4 spark.driver.memory 19g # エグゼキューター spark.executor.instances 12 spark.executor.memory 10g spark.executor.cores 4 spark.executor.heartbeatInterval 60s # シャッフル spark.task.maxFailures 4 spark.default.parallelism 36 spark.sql.shuffle.partitions 192 spark.shuffle.compress true spark.shuffle.spill.compress true # その他 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に設定します。 -
サンプルコードでは、16 vCPU と 128 GB のメモリを搭載した ECS インスタンス用の Spark リソース設定を使用しています。クラスターの規模やインスタンスの仕様に応じて、
spark.executor.instances、spark.executor.memory、spark.executor.cores、およびspark.sql.shuffle.partitionsを調整してください。
-
-
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 単位で指定します。クラスターの規模に応じて調整してください。 -
ベンチマークテストを実行します:
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 クラスターの負荷実行時間が表示されます。
説明eRDMA のパフォーマンスを比較するには、Spark の
confディレクトリからspark-erdmaプラグインの設定を削除するか、eRDMA を使用しない Spark クラスターで同じベンチマークテストを実行し、結果を比較してください。