すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:eRDMA拡張インスタンスへのSparkクラスターのデプロイ

最終更新日:Aug 27, 2024

Elastic Remote Direct Memory Access (eRDMA) を使用すると、超低レイテンシでリクエストを処理できます。 このトピックでは、ノードとしてeRDMA拡張Elastic Compute Service (ECS) インスタンスを含むSparkクラスターを作成し、ベンチマークを使用してSparkクラスターの負荷処理パフォーマンスをテストする方法について説明します。

背景情報

ベンチマークは、負荷実行時間、伝送速度、スループット、およびリソース使用率を含む負荷処理パフォーマンスをテストするために使用されるパフォーマンスベンチマークツールです。

ステップ1: 準備をする

Sparkクラスターの負荷処理パフォーマンスをテストする前に、テストに必要な環境を設定する準備をしてください。 準備には、HadoopマシンとSparkマシンの準備、Hadoopのインストール、eRDMAのインストールと設定が含まれます。

  1. 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タスクを実行する」をご参照ください。

  2. マスターノードとして機能するECSインスタンスにログインします。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  3. eRDMAを設定します。

    • 必要なドライバをインストールします。

      詳細については、「エンタープライズレベルのインスタンスでのeRDMAの設定」をご参照ください。

    • ネットワーク設定を構成します。

      1. 次のコマンドを実行して、hostsファイルを開きます。

        vim /etc/hosts
      2. 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アドレスに置き換えます。

      3. Escキーを押して挿入モードを終了します。 :wqと入力し、Enterキーを押してファイルを保存して終了します。

    • さらに別のリソースネゴシエーション (YARN) 設定を設定します。

      説明

      ECSインスタンスのデフォルトのネットワークインターフェイスコントローラー (NIC) がeRDMAをサポートしている場合、YARN設定を設定する必要はありません。

      1. 次のコマンドを順番に実行して、yarn-env.shファイルを開きます。

        cd /opt/hadoop-3.2.1/etc/hadoop
        vim yarn-env.sh 
      2. 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名に置き換えます。

      3. Escキーを押して挿入モードを終了します。 :wqと入力し、Enterキーを押してファイルを保存して終了します。

    • Sparkを設定します。

      説明

      ECSインスタンスのデフォルトNICがeRDMAをサポートしている場合、Sparkを設定する必要はありません。

      1. 次のコマンドを順番に実行して、spark-env.shファイルを開きます。

        cd /opt/spark-3.2.1-bin-hadoop3.2/conf
        vim spark-env.sh 
      2. Iキーを押してInsertモードに入り、次のコンテンツをファイルに追加します。

        export SPARK_LOCAL_IP='/sbin/ip addr show eth1 | grep "inet\b" | awk'{print $2}'| cut -d/ -f1'
        説明

        eth1を実際のERI名に置き換えます。

      3. Escキーを押して挿入モードを終了します。 :wqと入力し、Enterキーを押してファイルを保存して終了します。

  4. 次のコマンドを実行して、Hadoop分散ファイルシステム (HDFS) とYARNを起動します。

    $HADOOP_HOME/sbin/start-all.sh

ステップ2: Benchmarkインストールパッケージをダウンロードする

このセクションでは、Benchmarkインストールパッケージをダウンロードする方法について説明します。

  1. 次のコマンドを実行して、Benchmarkインストールパッケージをダウンロードします。

    wget https://mracc-release.oss-cn-beijing.aliyuncs.com/erdma-spark/spark-erdma-jverbs.tar.gz
  2. 次のコマンドを実行して、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クラスターの負荷処理パフォーマンスをテストする方法について説明します。

  1. 次のコマンドを実行して、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アドレスに置き換えます。

  2. Sparkを設定します。

    1. 次のコマンドを実行して、spark-jverbs-erdma.conf設定ファイルを開きます。

      vim /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-jverbs-erdma.conf
    2. 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.instancesspark.exe cutor.memoryspark.exe cutor.coreSpark. sql.shuffle.partitionsパラメーターなどのsparkリソース設定が使用されています。 実際のクラスタースケールまたはインスタンスの仕様に基づいて、Sparkリソース設定を変更します。

    3. Escキーを押して挿入モードを終了します。 :wqと入力し、Enterキーを押してファイルを保存して終了します。

  3. 次のコマンドを順番に実行してデータを生成します。

    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 です。 クラスタースケールに基づいて値を変更します。

  4. 次のコマンドを実行して、ベンチマークテストを実行します。

    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クラスターのパフォーマンスの違いを確認できます。