JindoTable は、ネイティブエンジンを使用して、Spark、Hive、または Presto での ORC または Parquet ファイルに対するクエリを高速化します。このトピックでは、ネイティブクエリ高速化を有効にして Spark、Hive、Presto のパフォーマンスを向上させる方法について説明します。
前提条件
JindoFS または OSS に ORC または Parquet ファイルが保存されている E-MapReduce クラスターが必要です。詳細については、「クラスターの作成」をご参照ください。
制限事項
-
バイナリ型のファイルは高速化できません。
-
パーティションキー列の値がデータファイルに保存されている場合、パーティション分割テーブルはサポートされません。
-
EMR-5.X 以降のバージョンの E-MapReduce クラスターはサポートされていません。
-
spark.read.schema(userDefinedSchema)の使用はサポートされていません。 -
Date 型は、1400-01-01 から 9999-12-31 までの範囲でのみサポートされます。
-
大文字と小文字の違いしかない列名 (例:
NAMEとname) を含むテーブルはサポートされていません。ネイティブクエリ高速化中、列名は大文字と小文字を区別せずに扱われます。 -
Spark、Hive、Presto でサポートされているエンジンとストレージフォーマットは次のとおりです。
エンジン
ORC
Parquet
Spark2
サポートされています
サポートされています
Spark3
サポートされています
サポートされています
Presto
サポートされています
サポートされています
Hive2
サポートされていません
サポートされています
Hive3
サポートされていません
サポートされています
-
Spark、Hive、Presto でサポートされているエンジンとストレージファイルシステムは次のとおりです。
エンジン
OSS
JindoFS
HDFS
Spark2
サポートされています
サポートされています
サポートされています
Presto
サポートされています
サポートされています
サポートされています
Hive2
サポートされています
サポートされています
サポートされていません
Hive3
サポートされています
サポートされています
サポートされていません
Spark パフォーマンスの向上
-
JindoTable の ORC または Parquet 高速化を有効化します。
説明-
ネイティブクエリ高速化はオフヒープメモリを使用します。高速化のため追加リソースを割り当てるために、Spark ジョブに
--conf spark.executor.memoryOverhead=4g構成を追加することを推奨します。 -
Spark で ORC または Parquet ファイルを読み取るには、DataFrame API または Spark SQL を使用する必要があります。
-
グローバル設定
-
クラスターの詳細ページに移動します。
-
E-MapReduce コンソールにログインします。
-
上部のナビゲーションバーで、必要に応じてリージョンとリソースグループを選択します。
-
Clusters タブをクリックします。
-
Clusters ページで、対象のクラスターを見つけ、「操作」列の Details をクリックします。
-
-
構成を変更します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
Spark サービスページで、Configure タブをクリックします。
-
検索ボックスで spark.sql.extensions パラメーターを探し、その値を io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension に設定します。
-
-
構成を保存します。
-
Save をクリックします。
-
変更する ダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
-
ThriftServer を再起動します。
-
右上隅で、 を選択します。
-
[クラスターアクティビティ] ダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
Confirm ダイアログボックスで、OK をクリックします。
-
-
-
ジョブレベル設定
spark-shell または spark-sql を実行する際に、次の Spark 起動パラメーターを追加します:
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtensionジョブの詳細については、「Spark Shell ジョブの設定」または「Spark SQL ジョブの設定」をご参照ください。
-
-
高速化が有効になっていることを確認します。
-
Spark History Server UI にログインします。
-
Spark UI の SQL ページで、実行ジョブを表示します。
JindoDataSourceV2Scanが表示された場合、高速化は有効になっています。表示されない場合は、ステップ 1 の構成を確認してください。[Details for Query 10] ページでは、有向非巡回グラフ (DAG) が実行計画を示します。たとえば、JindoDataSourceV2Scan は 15.6 GB のデータ (約 140 億行) をスキャンし、それが 27 億行にフィルターされます。最終的な HashAggregate 操作は 4,722 行を出力し、クエリ全体にかかる時間は 2.3 分です。
-
Presto パフォーマンスの向上
Presto クエリは高い同時実行性を持ち、ネイティブクエリ高速化はオフヒープメモリを使用します。そのため、クエリ高速化のために 10 GB 以上のメモリを割り当てる必要があります。
Presto には、JindoTable ネイティブ高速化のための組み込みカタログ hive-acc があります。hive-acc カタログを使用して、ネイティブクエリ高速化を有効にできます。
例:
presto --server emr-header-1:9090 --catalog hive-acc --schema default
Presto のネイティブクエリ高速化は、現在 Map、Struct、Array などの複雑なデータ型の読み取りをサポートしていません。
Hive パフォーマンスの向上
ジョブの厳密な安定性が求められる場合は、ネイティブクエリ高速化を有効にしないことを推奨します。
次のいずれかの方法で Hive のパフォーマンスを向上させることができます:
-
コンソールを使用する
コンソールで、Hive サービスの Configure ページに移動します。カスタムパラメーター hive.jindotable.native.enabled を見つけ、その値を true に設定します。構成を保存し、サービスを再起動して変更を適用します。この方法は、Hive on MR と Hive on Tez の両方に適用されます。
-
CLI を使用する
CLI で、
hive.jindotable.native.enabledをtrueに設定して、ネイティブクエリ高速化を有効にします。E-MapReduce V3.35.0 以降には JindoTable Parquet 高速化プラグインが含まれているため、このパラメーターを直接設定できます。set hive.jindotable.native.enabled=true;
Hive のネイティブクエリ高速化は、現在 Map、Struct、Array などの複雑なデータ型の読み取りをサポートしていません。