JindoTable は、ファイルのクエリを高速化するために使用できるネイティブエンジンを提供します。 この機能は、Spark、Hive、または Presto が ORC ファイルまたは Parquet ファイルをクエリする速度を向上させます。 デフォルトでは無効になっています。
前提条件
V3.35.0 以降の V3.X.X、または V4.9.0 以降の V4.X.X の E-MapReduce(EMR)クラスタが作成されています。 ORC ファイルまたは Parquet ファイルは、JindoFS またはオブジェクトストレージサービス(OSS)に保存されています。 EMR クラスタの作成方法の詳細については、「クラスタの作成」をご参照ください。
背景情報
次の表に、サポートされている Spark、Hive、および Presto エンジンと、各エンジンでサポートされているファイル形式を示します。
エンジン | ORC | Parquet |
Spark2 | サポート対象 | サポート対象 |
Presto | サポート対象 | サポート対象外 |
Hive2 | サポート対象外 | サポート対象 |
制限事項
バイナリ型のデータはサポートされていません。
パーティションキー列の値がファイルに格納されているパーティションテーブルはサポートされていません。
スキーマが既存のファイルスキーマと矛盾する可能性があるため、spark.read.schema(userDefinedSchema)を使用してスキーマを定義することはできません。
日付型のデータは YYYY-MM-DD 形式で、1400-01-01 から 9999-12-31 までの範囲である必要があります。
同じテーブル内で大文字と小文字が区別される列のクエリは高速化できません。 たとえば、同じテーブルの ID 列と id 列のクエリは高速化できません。
Spark のデータ読み取りパフォーマンスの向上
JindoTable で ORC ファイルまたは Parquet ファイルのクエリ高速化を有効にします。
説明クエリ高速化はオフヒープメモリを消費します。 クエリ高速化に追加のリソースを適用するために、Spark タスクに
--conf spark.executor.memoryOverhead=4gを追加することをお勧めします。Spark が ORC ファイルまたは Parquet ファイルからデータを読み取るときに、ネイティブエンジンを使用できます。
グローバルパラメータを設定します。
詳細については、「Spark のグローバルパラメータの設定」をご参照ください。
ジョブレベルのパラメータを設定します。
Spark Shell ジョブまたは Spark SQL ジョブを実行するときに、Spark 起動パラメータを追加できます。
spark.sql.extensions==io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtensionジョブの設定の詳細については、「Spark Shell ジョブの設定」または「Spark SQL ジョブの設定」をご参照ください。
クエリ高速化が有効になっているかどうかを確認します。
Spark History Server の Web UI にアクセスします。
Spark の [SQL] タブで、実行タスクを表示します。
JindoDataSourceV2Scan が表示されている場合は、クエリ高速化が有効になっています。 表示されていない場合は、手順 1 の設定を確認してください。

Presto のデータ読み取りパフォーマンスの向上
Presto には catalog: hive-acc が組み込まれています。 catalog: hive-acc を使用してクエリ高速化を有効にできます。
例:
presto --server https://emr-header-1.cluster-xxx:7778/ --catalog hive-acc --schema defaultemr-header-1.cluster-xxx は、emr-header-1 ノードのホスト名を示します。
Presto でこの機能を使用する場合、MAP、STRUCT、ARRAY などの複合データ型はサポートされていません。
Hive のデータ読み取りパフォーマンスの向上
より安定した環境でジョブをスケジュールする場合は、Hive でこの機能を無効にすることをお勧めします。
EMR Hive V2.3.7(EMR V3.35.0)には、JindoTable によって提供されるプラグインが統合されています。 このプラグインは、Parquet ファイルのクエリを高速化します。 Hive ジョブで hive.jindotable.native.enabled を設定してクエリ高速化を有効にすることができます。 あるいは、Hive 設定ページの hive-site.xml タブで、[hive.jindotable.native.enabled] カスタムパラメータを追加して [true] に設定し、Hive を再起動してクエリ高速化を有効にすることもできます。 後者は、MapReduce 上の Hive と Tez 上の Hive に適しています。
例:
set hive.jindotable.native.enabled=true;Hive でこの機能を使用する場合、MAP、STRUCT、ARRAY などの複合データ型はサポートされていません。
Spark のグローバルパラメータの設定
Spark サービスページに移動します。
Alibaba Cloud EMR コンソール にログインします。
上部のナビゲーションバーで、クラスタが存在するリージョンを選択し、ビジネス要件に基づいてリソースグループを選択します。
[クラスタ管理] タブをクリックします。
[クラスタ管理] ページで、クラスタを見つけて、[アクション] 列の [詳細] をクリックします。
左側のナビゲーションペインで、 を選択します。
Spark サービスページで、[設定] タブをクリックします。
spark.sql.extensions パラメータを見つけて、その値を io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension に変更します。
設定を保存します。
[サービス設定] セクションの右上隅にある [保存] をクリックします。
[変更の確認] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。
ThriftServer を再起動します。
右上隅にある を選択します。
[クラスタアクティビティ] ダイアログボックスで、[説明] を指定し、[OK] をクリックします。
[確認] メッセージで、[OK] をクリックします。