JindoTable は、クエリを高速化するためのネイティブエンジンを提供します。この機能はデフォルトでは無効になっていますが、有効にすると、Spark、Hive、または Presto での ORC ファイルまたは Parquet ファイルのクエリ速度が向上します。
前提条件
E-MapReduce (EMR) V3.35.0 以降、または EMR V4.9.0 以降のクラスターが必要です。ご利用の ORC または Parquet ファイルは JindoFS または OSS に保存されている必要があります。クラスターの作成方法の詳細については、「クラスターの作成」をご参照ください。
背景情報
次の表に、Spark、Hive、および Presto でサポートされているエンジンとストレージフォーマットを示します。
|
エンジン |
ORC |
Parquet |
|
Spark 2 |
サポート済み |
サポート済み |
|
Presto |
サポート済み |
サポート対象外 |
|
Hive 2 |
サポート対象外 |
サポート済み |
制限事項
-
Binary データ型はサポートされていません。
-
パーティションキー列がファイルに保存されているパーティション分割テーブルはサポートされていません。
-
バージョン 5.X 以降の EMR クラスターはサポートされていません。
-
ユーザー定義スキーマがファイルスキーマと一致しない可能性があるため、
spark.read.schema(userDefinedSchema)メソッドはサポートされていません。 -
Date データ型でサポートされている日付の範囲は、1400-01-01 から 9999-12-31 までです。
-
大文字と小文字を区別しない重複した名前の列を含むテーブルでは、クエリの高速化はサポートされていません。
Spark パフォーマンスの向上
-
ORC または Parquet ファイルに対して JindoTable のクエリ高速化を有効にします。
説明-
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 UI を開きます。
-
Spark History Server UI の [SQL] タブで、実行中のジョブを表示します。
JindoDataSourceV2Scan が表示されていれば、機能は正常に有効化されています。表示されない場合は、「ステップ 1」の操作を確認してください。Spark SQL ページの [クエリ 10 の詳細] では、クエリに 2.3 分かかっています。DAG 実行計画では、JindoDataSourceV2Scan ノードが 4,722 個のパーティションから 15.6 GB のデータをスキャンし、約 140 億行 (読み取り出力行 14,076,201,649) を読み取り、フィルタリング後に約 27 億行 (フィルター済み出力行 2,718,064,652) が残ったことが示されています。データはその後、Project ノードから HashAggregate ノードに流れ、最終的に 4,722 行の集計行が出力されます。
-
Presto パフォーマンスの向上
Presto には、JindoTable ネイティブ高速化のための組み込み hive-acc カタログが含まれています。hive-acc カタログを使用して、クエリ高速化を直接有効にできます。
例:
presto --server emr-header-1:9090 --catalog hive-acc --schema default
Presto のクエリ高速化機能は、Map、Struct、Array などの複雑なデータ型をサポートしていません。
Hive パフォーマンスの向上
高い安定性が求められるジョブでは、ネイティブクエリ高速化を有効にしないでください。
EMR Hive 2.3.7 (EMR-3.35.0 に同梱) には、Parquet 高速化のための組み込み JindoTable プラグインが含まれています。hive.jindotable.native.enabled パラメーターを設定することで、クエリ高速化を有効にできます。または、コンソールの設定ページにある hive-site.xml タブに移動し、カスタムパラメーターとして hive.jindotable.native.enabled を追加して、その値を true に設定します。その後、Hive を再起動します。この方法は、Hive on MapReduce と Hive on Tez の両方で機能します。
例:
set hive.jindotable.native.enabled=true;
Hive のクエリ高速化機能は、Map、Struct、Array などの複雑なデータ型をサポートしていません。
Spark のグローバル設定
-
Spark サービスページに移動します。
-
Alibaba Cloud EMR コンソールにログインします。
-
上部のナビゲーションバーで、適切なリージョンとリソースグループを選択します。
-
Clusters タブをクリックします。
-
Clusters ページで、対象のクラスターを見つけ、[操作] 列の Details をクリックします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
-
Configure タブをクリックします。
-
spark.sql.extensions パラメーターを検索し、その値を io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension に設定します。
-
設定の保存
-
Save をクリックします。
-
変更する ダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
-
ThriftServer の再起動
-
右上隅で、 を選択します。
-
[クラスター操作の実行] ダイアログボックスで、Execution Reason を入力し、OK をクリックします。
-
Confirm ダイアログボックスで、OK をクリックします。
-