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