JindoTable のネイティブエンジンは、JindoFS または Object Storage Service (OSS) に格納された ORC および Parquet ファイルに対する Spark、Hive、Presto クエリを高速化します。この機能はデフォルトで無効化されています。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
E-MapReduce (EMR) クラスターがバージョン V3.35.0 以降、または V4.9.0 以降で実行中であること
-
ORC または Parquet ファイルが JindoFS または OSS に格納されていること
EMR クラスターの作成手順については、「クラスターの作成」をご参照ください。
サポート対象のエンジンとファイル形式
ネイティブエンジンは、以下のエンジンとファイル形式の組み合わせをサポートしています。
| エンジン | ORC | Parquet |
|---|---|---|
| Spark2 | サポート対象 | サポート対象 |
| Presto | サポート対象 | 非サポート |
| Hive2 | 非サポート | サポート対象 |
制限事項
-
バイナリ型のデータはサポートされていません。
-
パーティションキー列の値がファイル内に格納されているパーティションテーブルはサポートされていません。
-
既存のファイルスキーマと競合する可能性があるため、
spark.read.schema(userDefinedSchema)によるスキーマ定義は許可されていません。 -
日付型のデータは
YYYY-MM-DD形式である必要があり、有効値の範囲は1400-01-01から9999-12-31までです。 -
同一テーブル内の大文字と小文字を区別するカラムに対するクエリは高速化できません。たとえば、
IDカラムとidカラムの両方が存在する場合、これらのカラムに対するクエリは高速化されません。
Spark でのクエリアクセラレーションの有効化
クエリアクセラレーションではオフヒープメモリが使用されます。ネイティブエンジンに十分なメモリを割り当てるために、Spark タスクに --conf spark.executor.memoryOverhead=4g を追加してください。
グローバルパラメーターの構成
クラスター内のすべての Spark ジョブにクエリアクセラレーションを適用するには、spark.sql.extensions パラメーターをグローバルに設定します。
-
Alibaba Cloud EMR コンソールにログインします。
-
上部のナビゲーションバーで、ご利用のクラスターが配置されているリージョンを選択し、リソースグループを指定します。
-
クラスターマネジメント タブをクリックします。
-
クラスター一覧から対象のクラスターを見つけ、[操作] 列の 詳細 をクリックします。
-
左側のナビゲーションウィンドウで、クラスターサービス > Spark を選択します。
-
構成 タブをクリックします。
-
spark.sql.extensionsパラメーターを見つけ、その値を以下のように設定します。io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension -
「サービス構成」セクションの右上隅にある 保存 をクリックします。
-
変更の確認 ダイアログボックスで、説明 を入力し、OK をクリックします。
-
右上隅の 操作 > ThriftServer の再起動 を選択します。
-
クラスター活動 ダイアログボックスで、説明 を入力し、OK をクリックします。
-
確認 メッセージで、OK をクリックします。
ジョブレベルのパラメーターの構成
単一の Spark Shell または Spark SQL ジョブに対してクエリアクセラレーションを有効化するには、ジョブの送信時に以下の起動パラメーターを追加します。
spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension
構成の詳細については、「Spark Shell ジョブの構成」および「Spark SQL ジョブの構成」をご参照ください。
アクセラレーションの有効化状態の確認
-
Spark History Server の Web UI を開きます。
-
SQL タブで、ご利用のジョブの実行タスクを開きます。JindoDataSourceV2Scan が実行計画に表示される場合、クエリアクセラレーションは有効化されています。表示されない場合は、上記の手順で構成を確認してください。

Presto でのクエリアクセラレーションの有効化
Presto には hive-acc という名前の組み込みカタログが含まれています。このカタログに接続することで、クエリアクセラレーションを有効化できます。
presto --server https://emr-header-1.cluster-xxx:7778/ --catalog hive-acc --schema default
emr-header-1.cluster-xxx は、ご利用の emr-header-1 ノードのホスト名に置き換えてください。
Presto で本機能を使用する場合、複雑なデータ型(MAP、STRUCT、ARRAY)はサポートされていません。
Hive でのクエリアクセラレーションの有効化
安定したジョブスケジューリングを最優先事項とする場合は、Hive で本機能を無効化したままにしてください。
EMR Hive V2.3.7(EMR V3.35.0)には、Parquet クエリを高速化する JindoTable プラグインが含まれています。hive.jindotable.native.enabled パラメーターを設定することで、本機能を有効化できます。
オプション 1:Hive ジョブ内でパラメーターを設定する
set hive.jindotable.native.enabled=true;
オプション 2:Hive 構成ページ(MapReduce 上の Hive、Tez 上の Hive)でパラメーターを設定する
-
Hive 構成ページで、hive-site.xml タブをクリックします。
-
カスタムパラメーター
hive.jindotable.native.enabledを追加し、その値をtrueに設定します。 -
構成を保存して Hive を再起動します。
Hive で本機能を使用する場合、複雑なデータ型(MAP、STRUCT、ARRAY)はサポートされていません。