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 クラスターが必要です。
-
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 ツールのダウンロード
-
バージョン 5.15.1 以降を実行する EMR クラスターを作成します。

EMR クラスターを作成する際は、以下の設定にご注意ください。その他のパラメーターについては、「クラスターの作成」をご参照ください。
カテゴリ
パラメーター
説明
ソフトウェア設定
ビジネスシナリオ
New Data Lake を選択します。
メタデータ
DLF Unified Metadata を選択します。
クラスターのルートストレージディレクトリ
OSS-HDFS が有効になっているバケットを選択します。
ハードウェア設定
ノードグループ
マスターノードで パブリックネットワーク IP の割り当て を有効にします。
最適なパフォーマンスを得るには、コアノードにビッグデータまたはローカル SSD インスタンスタイプを選択してください。小規模データセットで迅速にプロセスを完了したい場合は、コアノードに 4 vCPU および 16 GiB メモリを備えた汎用インスタンスタイプを選択することもできます。
重要実行するデータセットに基づいてクラスターのサイズを決定してください。コアノードの合計データディスク容量がデータセットサイズの 3 倍以上であることを確認してください。データセットの詳細については、「ステップ 3:データの生成とロード」をご参照ください。
-
SSH を使用して EMR クラスターのマスターノードに接続します。詳細については、「クラスターへの接続」をご参照ください。
-
Git および Maven をインストールします。
-
次のコマンドを実行して Git をインストールします。
sudo yum install -y git -
Apache Maven Project ページから apache-maven-3.9.6-bin.tar.gz などの最新のバイナリ tar.gz アーカイブをダウンロードします。
-
ダウンロードしたファイルを EMR クラスターのマスターノードにアップロードし、解凍します。
tar zxf apache-maven-3.9.6-bin.tar.gz -
環境変数を設定します。
-
apache-maven-3.9.6 ディレクトリに移動します。
cd apache-maven-3.9.6 -
環境変数を設定します。
export MAVEN_HOME=`pwd` export PATH=`pwd`/bin:$PATH
-
-
-
TPC-DS ベンチマークツールをダウンロードします。
-
ツールをダウンロードします。
-
GitHub からのダウンロード
中国本土から GitHub へのアクセスは遅くなる場合があります。ダウンロードに失敗した場合は、ローカルでツールをダウンロードしてください。
git clone https://github.com/hortonworks/hive-testbench.git -
hive-testbench-hdp3.zip ファイルをローカルでダウンロードします。
-
-
ZIP ファイルを EMR クラスターのマスターノードにアップロードします。
-
EMR クラスターのマスターノードで、次のコマンドを実行して ZIP ファイルを解凍します。
unzip hive-testbench-hdp3.zip
-
ステップ 2:データジェネレータのコンパイルとパッケージング
-
(任意)Alibaba Cloud ミラーを設定します。
中国本土におられる場合は、Maven コンパイルを高速化するために Alibaba Cloud ミラーを使用できます。これにより、データジェネレータのコンパイルおよびパッケージング時間が 2~3 分に短縮されます。
-
次のコマンドを実行してディレクトリを作成します。
mkdir -p ~/.m2/ -
次のコマンドを実行して Maven 設定ファイルを新しいディレクトリにコピーします。
cp $MAVEN_HOME/conf/settings.xml ~/.m2/ -
~/.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>
-
-
hive-testbench-hdp3 ディレクトリに移動します。
cd hive-testbench-hdp3 -
tpcds-extern.patch ファイルをダウンロードし、現在のディレクトリにアップロードした後、次のコマンドを実行して
tpcds-gen/patches/all/ディレクトリにコピーします。cp tpcds-extern.patch ./tpcds-gen/patches/all/ -
TPC-DS ツールセットを使用してデータジェネレータをコンパイルおよびパッケージングします。
./tpcds-build.sh
ステップ 3:データの生成とロード
-
スケールファクター (SF) を設定します。
スケールファクター (SF) はデータセットサイズを定義します。SF=1 は 1 GB に相当します。たとえば、SF=1 は 1 GB、SF=100 は 100 GB、SF=1000 は 1 TB を意味します。本チュートリアルでは、推奨される SF=3 の小規模データセットを使用します。次のコマンドを実行します。
SF=3重要合計データディスク容量がデータセットサイズの少なくとも 3 倍あることを確認してください。そうでない場合、後続のステップでエラーが発生する可能性があります。
-
Hive データベースを確認およびクリーンアップします。
-
Hive データベースが存在するかどうかを確認します。
hive -e "desc database tpcds_bin_partitioned_orc_$SF" -
(任意)既存の Hive データベースをクリーンアップします。
重要tpcds_bin_partitioned_orc_$SFHive データベースがすでに存在する場合は、次のコマンドを実行して削除する必要があります。削除しないと、後続のステップが失敗します。データベースが存在しない場合は、このステップをスキップしてください。hive -e "drop database tpcds_bin_partitioned_orc_$SF cascade"
-
-
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/。 -
オープンソースツールの設定問題を修正します。
Hive 2 や Hive 3 などのオープンソースバージョンでは、一部のパラメーターがサポートされていません。この変更を行わずに TPC-DS ツールを使用すると、ジョブが失敗する可能性があります。次のコマンドを実行してパラメーターを置き換えます。
sed -i 's/hive.optimize.sort.dynamic.partition.threshold=0/hive.optimize.sort.dynamic.partition=true/' settings/*.sql -
データを生成およびロードします。
SF が 3 の場合、このステップには約 40~50 分かかります。プロセスが正常に実行されると、TPC-DS データテーブルが
tpcds_bin_partitioned_orc_$SFデータベースにロードされます。生成されたデータは、EMR クラスター作成時に指定したルートストレージディレクトリ(OSS-HDFS が有効になっているバケットのルートディレクトリ)に自動的に保存されます。次のコマンドを実行してデータをロードします。./tpcds-setup.sh $SF -
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 クエリの実行
-
次のコマンドを使用して単一の SQL クエリを実行します。
99 個すべての TPC-DS SQL ファイルは sample-queries-tpcds 作業ディレクトリに保存されており、query10.sql や query11.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; -
提供されているスクリプトを使用して 99 個すべての SQL クエリを順次実行するには、次のコマンドを実行します。
cd ~/hive-testbench-hdp3 # Hive 設定ファイルを生成し、実行エンジンとして Tez を指定します。 echo 'set hive.execution.engine=tez;' > sample-queries-tpcds/testbench.settings ./runSuite.pl tpcds $SF

Spark を使用した TPC-DS クエリの実行
このセクションでは、ステップ 3 で生成されたデータセットに対して、Spark Thrift サーバーに接続した Spark Beeline を使用して TPC-DS SQL クエリを実行する方法を説明します。
E-MapReduce Spark は、HDFS や OSS などさまざまなメディアに保存されたデータテーブルをサポートしており、Data Lake Formation (DLF) からのメタデータもサポートしています。
-
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 -
サンプル Spark SQL クエリが格納されているディレクトリに切り替えます。
cd spark-queries-tpcds/ -
次のコマンドを使用して単一の SQL クエリを実行します。
spark-beeline -u jdbc:hive2://master-1-1:10001/tpcds_bin_partitioned_orc_$SF -f q1.sql -
スクリプトを使用して 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_sk が c_last_review_date と誤って記述されています。そのため、この SQL スクリプトは失敗することが予想されます。