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

Object Storage Service:OSS-HDFS を使用した EMR での TPC-DS ベンチマークの実行

最終更新日:May 08, 2026

TPC-DS ベンチマークは、大規模データ処理システムのパフォーマンスと効率を測定するための広く認められた業界標準です。Alibaba Cloud E-MapReduce (EMR) は、100 TB の TPC-DS ベンチマークを実行可能な認定を受けた初のビッグデータシステムです。本ガイドでは、EMR クラスター上で OSS-HDFS を使用して 99 個の TPC-DS SQL クエリを実行する方法と、パフォーマンス向上のための最適化戦略の適用方法について説明します。

ユースケース

  • ビッグデータパフォーマンス評価

    TPC-DS は、OSS-HDFS をデータストレージとして使用するビッグデータワークロードのパフォーマンスを評価するための標準的な意思決定支援ベンチマークです。特に、大規模データ分析およびクエリ最適化ワークロードに有用です。

  • データレイクアーキテクチャの検証

    Alibaba Cloud Object Storage Service (OSS) 上に構築されたデータレイクアーキテクチャにおいて、EMR クラスターで TPC-DS ベンチマークを実行することで、複雑なクエリ処理、ETL ジョブ、データウェアハウスパフォーマンスにおけるアーキテクチャの効率性を客観的かつ標準化された結果で検証できます。

  • パフォーマンストレンドの把握

    クラスターのスケールアウト、ハードウェアのスペックアップ、またはストレージ戦略の調整を行う際に、TPC-DS ベンチマークを使用すると、データ量やコンピューティングリソースの変化に伴うシステム全体のパフォーマンス変化を把握できます。

  • 費用対効果分析

    OSS は従来の HDFS と比べてコスト面で優位性があります。TPC-DS ベンチマークを使用して OSS-HDFS のパフォーマンスを測定することで、特定のビジネスシナリオにおける費用対効果を分析し、より経済的な意思決定が可能になります。

背景情報

TPC-DS は TPC によって設計・管理されているデータ管理システムのグローバル標準です。ただし、その公式ツールセットは主に単一マシン上でデータ生成および SQL クエリを実行することを目的としており、大規模分散環境でのパフォーマンス評価には適していません。ビッグデータ分析シナリオでこのベンチマークを実行するには、以下のツールおよび EMR クラスターが必要です。

  • Hive TPC-DS ベンチマークツール

    Hortonworks が開発したこのツールは、Hadoop エコシステム内の Hive や Spark などのコンポーネント向けにカスタマイズされています。ビッグデータクエリの課題を効果的にシミュレートし、TPC-DS および TPC-H 標準に基づく複雑な SQL クエリの生成および実行をサポートします。

  • バージョン 5.15.1 以降を実行する EMR クラスター

    バージョン 5.15.1 以降を実行する EMR クラスターを使用する必要があります。これらのバージョンは Hortonworks Data Platform (HDP) 3 シリーズと互換性があり、Hive 3.1 に対応しています。

ステップ 1:EMR クラスターの作成と TPC-DS ツールのダウンロード

  1. バージョン 5.15.1 以降を実行する EMR クラスターを作成します。

    Dingtalk_20240125172541.jpg

    EMR クラスターを作成する際は、以下の設定にご注意ください。その他のパラメーターについては、「クラスターの作成」をご参照ください。

    カテゴリ

    パラメーター

    説明

    ソフトウェア設定

    ビジネスシナリオ

    New Data Lake を選択します。

    メタデータ

    DLF Unified Metadata を選択します。

    クラスターのルートストレージディレクトリ

    OSS-HDFS が有効になっているバケットを選択します。

    ハードウェア設定

    ノードグループ

    マスターノードで パブリックネットワーク IP の割り当て を有効にします。

    最適なパフォーマンスを得るには、コアノードにビッグデータまたはローカル SSD インスタンスタイプを選択してください。小規模データセットで迅速にプロセスを完了したい場合は、コアノードに 4 vCPU および 16 GiB メモリを備えた汎用インスタンスタイプを選択することもできます。

    重要

    実行するデータセットに基づいてクラスターのサイズを決定してください。コアノードの合計データディスク容量がデータセットサイズの 3 倍以上であることを確認してください。データセットの詳細については、「ステップ 3:データの生成とロード」をご参照ください。

  2. SSH を使用して EMR クラスターのマスターノードに接続します。詳細については、「クラスターへの接続」をご参照ください。

  3. Git および Maven をインストールします。

    1. 次のコマンドを実行して Git をインストールします。

      sudo yum install -y git
    2. Apache Maven Project ページから apache-maven-3.9.6-bin.tar.gz などの最新のバイナリ tar.gz アーカイブをダウンロードします。

    3. ダウンロードしたファイルを EMR クラスターのマスターノードにアップロードし、解凍します。

      tar zxf apache-maven-3.9.6-bin.tar.gz
    4. 環境変数を設定します。

      1. apache-maven-3.9.6 ディレクトリに移動します。

        cd apache-maven-3.9.6
      2. 環境変数を設定します。

        export MAVEN_HOME=`pwd`
        export PATH=`pwd`/bin:$PATH
  4. TPC-DS ベンチマークツールをダウンロードします。

    1. ツールをダウンロードします。

      • GitHub からのダウンロード

        中国本土から GitHub へのアクセスは遅くなる場合があります。ダウンロードに失敗した場合は、ローカルでツールをダウンロードしてください。

        git clone https://github.com/hortonworks/hive-testbench.git
      • hive-testbench-hdp3.zip ファイルをローカルでダウンロードします。

    2. ZIP ファイルを EMR クラスターのマスターノードにアップロードします。

    3. EMR クラスターのマスターノードで、次のコマンドを実行して ZIP ファイルを解凍します。

      unzip hive-testbench-hdp3.zip

ステップ 2:データジェネレータのコンパイルとパッケージング

  1. (任意)Alibaba Cloud ミラーを設定します。

    中国本土におられる場合は、Maven コンパイルを高速化するために Alibaba Cloud ミラーを使用できます。これにより、データジェネレータのコンパイルおよびパッケージング時間が 2~3 分に短縮されます。

    1. 次のコマンドを実行してディレクトリを作成します。

      mkdir -p ~/.m2/
    2. 次のコマンドを実行して Maven 設定ファイルを新しいディレクトリにコピーします。

      cp $MAVEN_HOME/conf/settings.xml ~/.m2/
    3. ~/.m2/settings.xml ファイルに、以下のようにミラー情報を追加します。

      <mirror>
          <id>aliyun</id>
          <mirrorOf>central</mirrorOf>
          <name>Nexus aliyun</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      </mirror>
  2. hive-testbench-hdp3 ディレクトリに移動します。

    cd hive-testbench-hdp3
  3. tpcds-extern.patch ファイルをダウンロードし、現在のディレクトリにアップロードした後、次のコマンドを実行して tpcds-gen/patches/all/ ディレクトリにコピーします。

    cp tpcds-extern.patch ./tpcds-gen/patches/all/
  4. TPC-DS ツールセットを使用してデータジェネレータをコンパイルおよびパッケージングします。

    ./tpcds-build.sh

ステップ 3:データの生成とロード

  1. スケールファクター (SF) を設定します。

    スケールファクター (SF) はデータセットサイズを定義します。SF=1 は 1 GB に相当します。たとえば、SF=1 は 1 GB、SF=100 は 100 GB、SF=1000 は 1 TB を意味します。本チュートリアルでは、推奨される SF=3 の小規模データセットを使用します。次のコマンドを実行します。

    SF=3
    重要

    合計データディスク容量がデータセットサイズの少なくとも 3 倍あることを確認してください。そうでない場合、後続のステップでエラーが発生する可能性があります。

  2. Hive データベースを確認およびクリーンアップします。

    1. Hive データベースが存在するかどうかを確認します。

      hive -e "desc database tpcds_bin_partitioned_orc_$SF"
    2. (任意)既存の Hive データベースをクリーンアップします。

      重要

      tpcds_bin_partitioned_orc_$SF Hive データベースがすでに存在する場合は、次のコマンドを実行して削除する必要があります。削除しないと、後続のステップが失敗します。データベースが存在しない場合は、このステップをスキップしてください。

      hive -e "drop database tpcds_bin_partitioned_orc_$SF cascade"
  3. Hive サービス URL を設定します。

    tpcds-setup.sh スクリプト内のデフォルトの Hive サービス URL は、EMR クラスター環境と一致しません。そのため、スクリプト内の Hive サービス URL をご利用の EMR クラスターのものに置き換える必要があります。具体的なコマンドは以下のとおりです。

    sed -i 's/localhost:2181\/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=default/master-1-1:10000\//' tpcds-setup.sh

    スクリプトに設定されているデフォルトの Hive サービス URL は次のとおりです。jdbc:hive2://localhost:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=default。上記のコマンドを使用して置き換えた後の Hive サービス URL は次のとおりです。jdbc:hive2://master-1-1:10000/

  4. オープンソースツールの設定問題を修正します。

    Hive 2 や Hive 3 などのオープンソースバージョンでは、一部のパラメーターがサポートされていません。この変更を行わずに TPC-DS ツールを使用すると、ジョブが失敗する可能性があります。次のコマンドを実行してパラメーターを置き換えます。

    sed -i 's/hive.optimize.sort.dynamic.partition.threshold=0/hive.optimize.sort.dynamic.partition=true/' settings/*.sql
  5. データを生成およびロードします。

    SF が 3 の場合、このステップには約 40~50 分かかります。プロセスが正常に実行されると、TPC-DS データテーブルが tpcds_bin_partitioned_orc_$SF データベースにロードされます。生成されたデータは、EMR クラスター作成時に指定したルートストレージディレクトリ(OSS-HDFS が有効になっているバケットのルートディレクトリ)に自動的に保存されます。次のコマンドを実行してデータをロードします。

    ./tpcds-setup.sh $SF
  6. Hive テーブル統計情報を取得します。

    Hive SQL ANALYZE コマンドを実行して Hive テーブル統計情報を収集すると、後続のクエリが高速化されます。SF=3 の場合、このステップには約 20~30 分かかります。

    hive -f ./ddl-tpcds/bin_partitioned/analyze.sql \
        --hiveconf hive.execution.engine=tez \
        --database tpcds_bin_partitioned_orc_$SF

ステップ 4:TPC-DS SQL クエリの実行

このステップでは、Hive および Spark を使用して TPC-DS SQL クエリを実行する方法について説明します。

Hive を使用した TPC-DS クエリの実行

  1. 次のコマンドを使用して単一の SQL クエリを実行します。

    99 個すべての TPC-DS SQL ファイルは sample-queries-tpcds 作業ディレクトリに保存されており、query10.sqlquery11.sql などのファイルが含まれます。スケールファクター (SF) が 3 の場合、すべての SQL クエリは 5 分以内に結果を返します。

    重要

    TPC-DS クエリおよびデータはランダムに生成されるため、一部の SQL クエリがゼロ件の結果を返すのは正常です。

    cd sample-queries-tpcds
    hive --database tpcds_bin_partitioned_orc_$SF
    set hive.execution.engine=tez;
    source query10.sql;
  2. 提供されているスクリプトを使用して 99 個すべての SQL クエリを順次実行するには、次のコマンドを実行します。

    cd ~/hive-testbench-hdp3
    # Hive 設定ファイルを生成し、実行エンジンとして Tez を指定します。
    echo 'set hive.execution.engine=tez;' > sample-queries-tpcds/testbench.settings
    ./runSuite.pl tpcds $SF

批量执行SQL

Spark を使用した TPC-DS クエリの実行

このセクションでは、ステップ 3 で生成されたデータセットに対して、Spark Thrift サーバーに接続した Spark Beeline を使用して TPC-DS SQL クエリを実行する方法を説明します。

説明

E-MapReduce Spark は、HDFS や OSS などさまざまなメディアに保存されたデータテーブルをサポートしており、Data Lake Formation (DLF) からのメタデータもサポートしています。

  1. Spark Beeline ANALYZE コマンドを実行して Hive テーブル統計情報を収集します。これにより、後続の SQL クエリが高速化されます。

    cd ~/hive-testbench-hdp3
    spark-beeline -u jdbc:hive2://master-1-1:10001/tpcds_bin_partitioned_orc_$SF \
      -f ./ddl-tpcds/bin_partitioned/analyze.sql
  2. サンプル Spark SQL クエリが格納されているディレクトリに切り替えます。

    cd spark-queries-tpcds/
  3. 次のコマンドを使用して単一の SQL クエリを実行します。

    spark-beeline -u jdbc:hive2://master-1-1:10001/tpcds_bin_partitioned_orc_$SF -f q1.sql
  4. スクリプトを使用して 99 個すべての SQL クエリを順次実行します。

    TPC-DS ツールセットには、Spark SQL クエリをバッチで実行するためのスクリプトが含まれていません。以下のサンプルスクリプトを使用できます。

    for q in `ls *.sql`; do
      spark-beeline -u jdbc:hive2://master-1-1:10001/tpcds_bin_partitioned_orc_$SF -f $q > $q.out
    done
    重要

    q30.sql ファイルでは、カラム名 c_last_review_date_skc_last_review_date と誤って記述されています。そのため、この SQL スクリプトは失敗することが予想されます。

よくある質問

Spark SQL のメモリ不足 (OOM) エラー

Spark Thrift サーバーのデフォルトメモリは、大規模データセットのテストには適していません。Spark SQL ジョブの送信に失敗した場合、Spark Thrift サーバーでメモリ不足 (OOM) エラーが発生している可能性があります。これを解決するには、Spark サービスの spark_thrift_daemon_memory パラメーターの値を増やしてから、Spark Thrift サーバーを再起動してください。

  1. Spark サービスページに移動します。

    1. E-MapReduce コンソール にログインします。

    2. 上部のナビゲーションバーでご利用のリージョンおよびリソースグループを選択します。

    3. 対象クラスターの行で、操作列の Services をクリックします。

    4. Services タブで、Spark3 サービスセクションの Configure をクリックします。

  2. spark_thrift_daemon_memory パラメーターの値を調整します。

    1. spark_thrift_daemon_memory パラメーターを検索します。

    2. データセットのサイズに基づいて値を調整します。

      デフォルト値を増やすことができます。

    3. Save をクリックします。

    4. 表示されるダイアログボックスで、実行理由を入力し、Save をクリックします。

  3. Spark を再起動します。

    1. Spark サービスページの右上隅で、More > 再起動 を選択します。

    2. 表示されるダイアログボックスで、Execution Reason を入力し、OK をクリックします。

    3. Confirm ダイアログボックスで、OK をクリックします。