すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:ネイティブクエリ高速化の有効化

最終更新日:Jun 22, 2026

JindoTable は、ネイティブエンジンを使用して、Spark、Hive、または Presto での ORC または Parquet ファイルに対するクエリを高速化します。このトピックでは、ネイティブクエリ高速化を有効にして Spark、Hive、Presto のパフォーマンスを向上させる方法について説明します。

前提条件

JindoFS または OSS に ORC または Parquet ファイルが保存されている E-MapReduce クラスターが必要です。詳細については、「クラスターの作成」をご参照ください。

制限事項

  • バイナリ型のファイルは高速化できません。

  • パーティションキー列の値がデータファイルに保存されている場合、パーティション分割テーブルはサポートされません。

  • EMR-5.X 以降のバージョンの E-MapReduce クラスターはサポートされていません。

  • spark.read.schema(userDefinedSchema) の使用はサポートされていません。

  • Date 型は、1400-01-01 から 9999-12-31 までの範囲でのみサポートされます。

  • 大文字と小文字の違いしかない列名 (例:NAMEname) を含むテーブルはサポートされていません。ネイティブクエリ高速化中、列名は大文字と小文字を区別せずに扱われます。

  • Spark、Hive、Presto でサポートされているエンジンとストレージフォーマットは次のとおりです。

    エンジン

    ORC

    Parquet

    Spark2

    サポートされています

    サポートされています

    Spark3

    サポートされています

    サポートされています

    Presto

    サポートされています

    サポートされています

    Hive2

    サポートされていません

    サポートされています

    Hive3

    サポートされていません

    サポートされています

  • Spark、Hive、Presto でサポートされているエンジンとストレージファイルシステムは次のとおりです。

    エンジン

    OSS

    JindoFS

    HDFS

    Spark2

    サポートされています

    サポートされています

    サポートされています

    Presto

    サポートされています

    サポートされています

    サポートされています

    Hive2

    サポートされています

    サポートされています

    サポートされていません

    Hive3

    サポートされています

    サポートされています

    サポートされていません

Spark パフォーマンスの向上

  1. JindoTable の ORC または Parquet 高速化を有効化します。

    説明
    • ネイティブクエリ高速化はオフヒープメモリを使用します。高速化のため追加リソースを割り当てるために、Spark ジョブに --conf spark.executor.memoryOverhead=4g 構成を追加することを推奨します。

    • Spark で ORC または Parquet ファイルを読み取るには、DataFrame API または Spark SQL を使用する必要があります。

    • グローバル設定

      1. クラスターの詳細ページに移動します。

        1. E-MapReduce コンソールにログインします。

        2. 上部のナビゲーションバーで、必要に応じてリージョンとリソースグループを選択します。

        3. Clusters タブをクリックします。

        4. Clusters ページで、対象のクラスターを見つけ、「操作」列の Details をクリックします。

      2. 構成を変更します。

        1. 左側のナビゲーションウィンドウで、Services > [Spark] を選択します。

        2. Spark サービスページで、Configure タブをクリックします。

        3. 検索ボックスで spark.sql.extensions パラメーターを探し、その値を io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension に設定します。

      3. 構成を保存します。

        1. Save をクリックします。

        2. 変更する ダイアログボックスで、Execution Reason を入力し、OK をクリックします。

      4. ThriftServer を再起動します。

        1. 右上隅で、操作 > [ThriftServer の再起動] を選択します。

        2. [クラスターアクティビティ] ダイアログボックスで、Execution Reason を入力し、OK をクリックします。

        3. Confirm ダイアログボックスで、OK をクリックします。

    • ジョブレベル設定

      spark-shell または spark-sql を実行する際に、次の Spark 起動パラメーターを追加します:

      --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.aliyun.emr.sql.JindoTableExtension

      ジョブの詳細については、「Spark Shell ジョブの設定」または「Spark SQL ジョブの設定」をご参照ください。

  2. 高速化が有効になっていることを確認します。

    1. Spark History Server UI にログインします。

    2. Spark UI の SQL ページで、実行ジョブを表示します。

      JindoDataSourceV2Scan が表示された場合、高速化は有効になっています。表示されない場合は、ステップ 1 の構成を確認してください。[Details for Query 10] ページでは、有向非巡回グラフ (DAG) が実行計画を示します。たとえば、JindoDataSourceV2Scan は 15.6 GB のデータ (約 140 億行) をスキャンし、それが 27 億行にフィルターされます。最終的な HashAggregate 操作は 4,722 行を出力し、クエリ全体にかかる時間は 2.3 分です。

Presto パフォーマンスの向上

重要

Presto クエリは高い同時実行性を持ち、ネイティブクエリ高速化はオフヒープメモリを使用します。そのため、クエリ高速化のために 10 GB 以上のメモリを割り当てる必要があります。

Presto には、JindoTable ネイティブ高速化のための組み込みカタログ hive-acc があります。hive-acc カタログを使用して、ネイティブクエリ高速化を有効にできます。

例:

presto --server emr-header-1:9090 --catalog hive-acc --schema default
説明

Presto のネイティブクエリ高速化は、現在 Map、Struct、Array などの複雑なデータ型の読み取りをサポートしていません。

Hive パフォーマンスの向上

重要

ジョブの厳密な安定性が求められる場合は、ネイティブクエリ高速化を有効にしないことを推奨します。

次のいずれかの方法で Hive のパフォーマンスを向上させることができます:

  • コンソールを使用する

    コンソールで、Hive サービスの Configure ページに移動します。カスタムパラメーター hive.jindotable.native.enabled を見つけ、その値を true に設定します。構成を保存し、サービスを再起動して変更を適用します。この方法は、Hive on MR と Hive on Tez の両方に適用されます。

  • CLI を使用する

    CLI で、hive.jindotable.native.enabledtrue に設定して、ネイティブクエリ高速化を有効にします。E-MapReduce V3.35.0 以降には JindoTable Parquet 高速化プラグインが含まれているため、このパラメーターを直接設定できます。

    set hive.jindotable.native.enabled=true;
説明

Hive のネイティブクエリ高速化は、現在 Map、Struct、Array などの複雑なデータ型の読み取りをサポートしていません。