JindoTable のネイティブエンジンは、JindoFS または Object Storage Service (OSS) に保存されている ORC および Parquet ファイルに対するクエリを高速化します。既存の SQL や DataFrame のコードを変更する必要はありません。このトピックでは、E-MapReduce (EMR) で Spark、Hive、Presto のクエリ高速化を有効にする方法について説明します。
前提条件
開始する前に、以下の準備が整っていることを確認してください:
-
EMR クラスターが作成されていること
-
JindoFS または OSS に ORC または Parquet ファイルが保存されていること
クラスターの作成については、「クラスターの作成」をご参照ください。
制限事項
すべてのエンジンに以下の制限事項が適用されます:
-
バイナリファイルはサポートされていません。
-
パーティションキー列の値がファイルに保存されているパーティション分割テーブルはサポートされていません。
-
V5.X.X 以降のバージョンの EMR クラスターはサポートされていません。
-
spark.read.schema(userDefinedSchema) はサポートされていません。 -
DATE 型の値は
YYYY-MM-DD形式を使用し、1400-01-01 から 9999-12-31 までの範囲内である必要があります。 -
テーブルに同じ名前で大文字と小文字が異なる 2 つの列 (例:
NAMEとname) がある場合、それらの列に対するクエリは高速化できません。
エンジンとファイル形式のサポート:
| エンジン | ORC | Parquet |
|---|---|---|
| Spark2 | サポート | サポート |
| Spark3 | サポート | サポート |
| Presto | サポート | サポート |
| Hive2 | 非サポート | サポート |
| Hive3 | 非サポート | サポート |
エンジンとファイルシステムのサポート:
| エンジン | OSS | JindoFS | HDFS (Hadoop 分散ファイルシステム) |
|---|---|---|---|
| Spark2 | サポート | サポート | サポート |
| Presto | サポート | サポート | サポート |
| Hive2 | サポート | サポート | 非サポート |
| Hive3 | サポート | サポート | 非サポート |
Spark のクエリ高速化の有効化
クエリ高速化はオフヒープメモリを使用します。Spark ジョブに --conf spark.executor.memoryOverhead=4g を追加して、高速化のため追加のメモリを割り当ててください。
ネイティブエンジンでデータを読み取るには、DataFrame API または Spark SQL を使用します。他の API はサポートされていません。
クエリ高速化は、すべての Spark ジョブに対してグローバルに有効にするか、個々のジョブレベルで有効にすることができます。
オプション 1:グローバル設定 (コンソール)
-
Alibaba Cloud EMR コンソールにログインします。
-
上部のナビゲーションバーで、ご利用のクラスターのリージョンを選択します。
-
[クラスター管理] タブをクリックします。
-
クラスターを見つけ、[詳細] を [操作] 列でクリックします。
-
左側のナビゲーションウィンドウで、[クラスターサービス] > [Spark] を選択します。
-
[設定] タブをクリックします。
-
spark.sql.extensionsパラメーターを検索し、その値を次のように設定します:io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension -
右上の [保存] をクリックします。[変更の確認] ダイアログボックスで、説明を入力して [OK] をクリックします。
-
右上の [アクション] > [ThriftServer の再起動] を選択します。[クラスターアクティビティ] ダイアログボックスで、説明を入力して [OK] をクリックします。その後、確認メッセージで [OK] をクリックします。
オプション 2:ジョブレベルの設定
Spark Shell または Spark SQL ジョブを送信する際に、次のフラグを追加します:
--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension
詳細については、「Spark Shell ジョブの設定」または「Spark SQL ジョブの設定」をご参照ください。
高速化が有効になっていることの確認
-
Spark History Server の Web UI を開きます。
-
[SQL] タブをクリックし、ご利用のクエリを見つけます。
クエリプランに JindoDataSourceV2Scan が表示されていれば、高速化はアクティブです。表示されない場合は、上記の手順で spark.sql.extensions の設定を確認してください。
Presto のクエリ高速化の有効化
Presto はクエリ高速化にオフヒープメモリを使用し、高いクエリ同時実行数をサポートします。この機能を有効にする前に、クラスターに 10 GB 以上の使用可能なメモリがあることを確認してください。
Presto でクエリ高速化を使用する場合、複雑なデータ型 (MAP、STRUCT、ARRAY) はサポートされていません。
Presto サービスには、ネイティブエンジンを使用する hive-acc という名前の組み込みカタログが含まれています。高速化を有効にするには、このカタログを使用して Presto に接続します:
presto --server emr-header-1:9090 --catalog hive-acc --schema default
他の設定は必要ありません。
Hive のクエリ高速化の有効化
ジョブに高い安定性要件がある場合は、Hive のクエリ高速化を有効にしないでください。
Hive でクエリ高速化を使用する場合、複雑なデータ型 (MAP、STRUCT、ARRAY) はサポートされていません。
EMR コンソールまたは Hive CLI を使用してクエリ高速化を有効にできます。
オプション 1:EMR コンソール
-
Hive サービスページで、[設定] タブをクリックします。
-
hive.jindotable.native.enabledパラメーターを検索し、その値をtrueに設定します。 -
設定を保存し、Hive サービスを再起動します。
この方法は、Hive on MapReduce と Hive on Tez の両方のジョブに適用されます。
オプション 2:Hive CLI
CLI で次のコマンドを実行します:
set hive.jindotable.native.enabled=true;
Parquet ファイル用のクエリ高速化プラグインは、EMR V3.35.0 以降にデフォルトで含まれています。追加のインストールは必要ありません。