EMR Serverless ジョブ実行時の Hive 設定の使用 - Amazon EMR

EMR Serverless ジョブ実行時の Hive 設定の使用

type パラメータを HIVE に設定して、アプリケーションで Hive ジョブを実行できます。ジョブは、Amazon EMR のリリースバージョンと互換性のある Hive バージョンと互換性がある必要があります。例えば、Amazon EMR リリース 6.6.0 のアプリケーションでジョブを実行する場合、ジョブは Apache Hive 3.1.2 と互換性がある必要があります。各リリースのアプリケーションバージョンの詳細については、「Amazon EMR Serverless のリリースバージョン」を参照してください。

Hive ジョブのパラメータ

StartJobRun API を使用して Hive ジョブを実行する場合は、次のパラメータを指定する必要があります。

Hive ジョブのランタイムロール

executionRoleArn を使用して、アプリケーションが Hive ジョブの実行に使用する IAM ロールの ARN を指定します。このロールには、以下のアクセス許可が含まれている必要があります。

  • データが存在する S3 バケットまたはその他のデータソースからの読み取り

  • Hive クエリファイルと init クエリファイルが存在する S3 バケットまたはプレフィックスからの読み取り

  • Hive Scratch ディレクトリと Hive メタストアウェアハウスディレクトリが存在する S3 バケットへの読み取りと書き込み

  • 最終出力を書き込む予定の S3 バケットへの書き込み

  • S3MonitoringConfiguration が指定した S3 バケットまたはプレフィックスへのログの書き込み

  • KMS キーを使用して S3 バケット内のデータを暗号化する場合の KMS キーへのアクセス

  • AWS Glue データカタログへのアクセス

Hive ジョブが他のデータソースとの間でデータを読み書きする場合は、この IAM ロールに適切なアクセス許可を指定します。これらのアクセス許可を IAM ロールに指定しなければ、ジョブが失敗する可能性があります。詳細については、「Amazon EMR Serverless のジョブランタイムロール」を参照してください。

Hive ジョブのドライバーパラメータ

jobDriver を使用してジョブに入力します。ジョブのドライバーパラメータは、実行するジョブタイプに対して 1 つの値のみを受け入れます。hive をジョブタイプとして指定すると、EMR Serverless は Hive クエリを jobDriver パラメータに渡します。Hive ジョブには、以下のパラメータがあります。

  • query – これは、実行する Hive クエリファイルへの Amazon S3 での参照です。

  • parameters – 上書きする追加の Hive 設定プロパティです。プロパティを上書きするには、プロパティを --hiveconf property=value としてこのパラメータに渡します。変数を上書きするには、変数を --hivevar key=value としてこのパラメータに渡します。

  • initQueryFile – これは init Hive クエリファイルです。Hive はクエリの前にこのファイルを実行し、このファイルでテーブルを初期化できます。

Hive 設定オーバーライドパラメータ

configurationOverrides を使用して、モニタリングレベルおよびアプリケーションレベルの設定プロパティを上書きします。このパラメータは、次の 2 つのフィールドを持つ JSON オブジェクトを受け入れます。

  • monitoringConfiguration – このフィールドを使用して、EMR Serverless ジョブに Hive ジョブのログを保存する Amazon S3 URL (s3MonitoringConfiguration) を指定します。このバケットは、アプリケーションをホストするのと同じ AWS アカウントで作成し、ジョブが実行されているのと同じ AWS リージョンで作成してください。

  • applicationConfiguration – このフィールドに設定オブジェクトを指定すると、アプリケーションのデフォルト設定を上書きできます。短縮構文を使用して、設定を指定したり、JSON ファイルの設定オブジェクトを参照したりできます。設定オブジェクトは、分類、プロパティ、オプションの入れ子になっている設定で構成されます。プロパティは、そのファイル内で上書きする設定で構成されます。単一の JSON オブジェクトで、複数のアプリケーションに複数の分類を指定できます。

    注記

    特定の EMR Serverless リリースによって使用可能な設定分類は異なります。例えば、カスタム Log4j spark-driver-log4j2spark-executor-log4j2 の分類は、リリース 6.8.0 以降でのみ使用できます。

アプリケーションの上書きと Hive パラメータで同じ設定を渡すと、Hive パラメータが優先されます。次のリストは、設定を優先順位の高いものから低いものへとランク付けしたものです。

  • --hiveconf property=value で Hive パラメータの一部として提供する設定。

  • アプリケーションの一部として提供する設定は、ジョブの開始時に上書きされます。

  • アプリケーションの作成時に runtimeConfiguration の一部として提供する設定。

  • リリース用に Amazon EMR が割り当てた最適化された設定。

  • アプリケーションのデフォルトのオープンソース設定。

アプリケーションレベルでの設定の宣言と、ジョブ実行時の設定の上書きの詳細については、「EMR Serverless のデフォルトのアプリケーション設定」を参照してください。

Hive ジョブプロパティ

次の表に、Hive ジョブの送信時に設定する必要がある必須プロパティを示します。

設定 説明
hive.exec.scratchdir Hive ジョブの実行中に EMR Serverless が一時ファイルを作成する Amazon S3 の場所。
hive.metastore.warehouse.dir Hive のマネージドテーブル用データベースの Amazon S3 の場所。

次の表に、オプションの Hive プロパティと、Hive ジョブを送信するときに上書きできるデフォルト値を示します。

設定 説明 デフォルト値
fs.s3.customAWSCredentialsProvider 使用する AWS 認証情報プロバイダー。 com.amazonaws.auth.DefaultAWSCredentialsProviderChain
fs.s3a.aws.credentials.provider S3A ファイルシステムで使用する AWS 認証情報プロバイダー。 com.amazonaws.auth.DefaultAWSCredentialsProviderChain
hive.auto.convert.join 入力ファイルサイズに基づいた共通結合のマップ結合への自動変換を有効にするオプション。 TRUE
hive.auto.convert.join.noconditionaltask Hive が入力ファイルサイズに基づいて共通結合をマップ結合に変換するときに最適化を有効にするオプション。 TRUE
hive.auto.convert.join.noconditionaltask.size このサイズ以下では、結合はマップ結合に直接変換されます。 最適な値は Tez タスクメモリに基づいて計算されます
hive.cbo.enable Calcite フレームワークでコストベースの最適化を有効にするオプション。 TRUE
hive.cli.tez.session.async Hive クエリのコンパイル中にバックグラウンド Tez セッションを開始するオプション。false に設定すると、Hive クエリのコンパイル後に Tez AM が起動されます。 TRUE
hive.compute.query.using.stats Hive をアクティブ化して、メタストアに保存された統計を使用して特定のクエリに回答するオプション。基本的な統計については、hive.stats.autogatherTRUE に設定します。クエリのより高度なコレクションについては、analyze table queries を実行します。 TRUE
hive.default.fileformat CREATE TABLE ステートメントのデフォルトのファイル形式。CREATE TABLE コマンドで STORED AS [FORMAT] を指定した場合、これを明示的に上書きできます。 TEXTFILE
hive.driver.cores Hive ドライバープロセスに使用するコアの数。 2
hive.driver.disk Hive ドライバーのディスクサイズ。 20G
hive.driver.disk.type Hive ドライバーのディスクタイプ。 標準
hive.tez.disk.type tez ワーカーのディスクサイズ。 標準
hive.driver.memory Hive ドライバープロセスごとに使用するメモリ量。Hive CLI と Tez Application Master は、このメモリを 20% のヘッドルームを取って均等に共有します。 6G
hive.emr-serverless.launch.env.[KEY] Hive ドライバー、Tez AM、Tez タスクなど、すべての Hive 固有のプロセスで KEY 環境変数を設定するオプション。
hive.exec.dynamic.partition DML/DDL で動的パーティションを有効にするオプション。 TRUE
hive.exec.dynamic.partition.mode 厳格モードを使用するか、非厳格モードを使用するかを指定するオプション。厳格モードでは、すべてのパーティションを誤って上書きする場合に備えて、少なくとも 1 つの静的パーティションを指定する必要があります。非厳格モードでは、すべてのパーティションを動的にすることができます。 strict
hive.exec.max.dynamic.partitions Hive が全体で作成する動的パーティションの最大数。 1000
hive.exec.max.dynamic.partitions.pernode Hive がマッパーノードとリデューサーノードのそれぞれに作成する動的パーティションの最大数。 100
hive.exec.orc.split.strategy 次のいずれかの値が予想されます。BIETLHYBRID。これはユーザーレベルの設定ではありません。BI は、クエリの実行よりも分割生成に費やす時間を減らすように指定します。ETL は分割生成により多くの時間を費やすように指定します。HYBRID は、ヒューリスティックに基づいて上記の戦略の選択を指定します。 HYBRID
hive.exec.reducers.bytes.per.reducer リデューサーあたりのサイズ。デフォルトは 256 MB です。入力サイズが 1G の場合、ジョブは 4 つのリデューサーを使用します。 256000000
hive.exec.reducers.max リデューサーの最大数。 256
hive.exec.stagingdir Hive がテーブルの場所内および hive.exec.scratchdir プロパティで指定されたスクラッチディレクトリの場所内に作成する一時ファイルを保存するディレクトリの名前。 .hive-staging
hive.fetch.task.conversion 次のいずれかの値が予想されます。NONEMINIMALMORE。Hive は、選択クエリを 1 つの FETCH タスクに変換できます。これにより、レイテンシーが最小限に抑えられます。 MORE
hive.groupby.position.alias Hive が GROUP BY ステートメントで列位置エイリアスを使用するようにするオプション。 FALSE
hive.input.format デフォルトの入力形式。CombineHiveInputFormat で問題が発生した場合は、HiveInputFormat に設定します。 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
hive.log.explain.output Hive ログ内のクエリの拡張出力の説明を有効にするオプション。 FALSE
hive.log.level Hive ロギングレベル。 INFO
hive.mapred.reduce.tasks.speculative.execution リデューサーの投機的起動を有効にするオプション。Amazon EMR 6.10.x 以前でのみサポートされています。 TRUE
hive.max-task-containers 同時コンテナの最大数。設定されたマッパーメモリにこの値を乗じて、分割計算とタスクプリエンプションが使用する利用可能なメモリを決定します。 1000
hive.merge.mapfiles マップのみのジョブの最後に小さなファイルがマージされるオプション。 TRUE
hive.merge.size.per.task ジョブの最後にマージされたファイルのサイズ。 256000000
hive.merge.tezfiles Tez DAG の最後に小さなファイルのマージを有効にするオプション。 FALSE
hive.metastore.client.factory.class IMetaStoreClient インターフェイスを実装するオブジェクトを生成するファクトリークラスの名前。 com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
hive.metastore.glue.catalogid AWS Glue Data Catalog がメタストアとして機能し、ジョブとは異なる AWS アカウントで実行される場合、ジョブが実行されている AWS アカウントの ID。 NULL
hive.metastore.uris メタストアクライアントがリモートメタストアへの接続に使用する thrift URI。 NULL
hive.optimize.ppd 述語プッシュダウンを有効にするオプション。 TRUE
hive.optimize.ppd.storage ストレージハンドラーへの述語プッシュダウンを有効にするオプション。 TRUE
hive.orderby.position.alias Hive が ORDER BY ステートメントで列位置エイリアスを使用するようにするオプション。 TRUE
hive.prewarm.enabled Tez のコンテナプレウォームをオンにするオプション。 FALSE
hive.prewarm.numcontainers Tez でプレウォームするコンテナの数。 10
hive.stats.autogather INSERT OVERWRITE コマンド中に Hive が基本統計を自動的に収集できるようにするオプション。 TRUE
hive.stats.fetch.column.stats メタストアからの列統計の取得を無効にするオプション。列の数が多い場合、列統計の取得は高価になる可能性があります。 FALSE
hive.stats.gather.num.threads partialscan および noscan ANALYZE コマンドがパーティションテーブルに使用するスレッドの数。これは、StatsProvidingRecordReader を実装するファイル形式 (ORC など) にのみ適用されます。 10
hive.strict.checks.cartesian.product 厳密なデカルト結合チェックを有効にするオプション。これらのチェックでは、直積集合 (クロス結合) は許可されません。 FALSE
hive.strict.checks.type.safety 厳密なタイプの安全チェックを有効にし、stringdouble の両方と bigint の比較を無効にするオプション。 TRUE
hive.support.quoted.identifiers NONE または COLUMN の値が必要です。NONE は、英数字とアンダースコア文字のみが識別子として有効であることを示します。COLUMN は、列名に任意の文字を含めることができることを示します。 COLUMN
hive.tez.auto.reducer.parallelism Tez 自動リデューサー並列処理機能を有効にするオプション。Hive は引き続きデータサイズを推定し、並列処理の推定値を設定します。Tez はソース頂点の出力サイズをサンプリングし、必要に応じて実行時に推定値を調整します。 TRUE
hive.tez.container.size Tez タスクプロセスごとに使用するメモリ量。 6144
hive.tez.cpu.vcores Tez タスクごとに使用するコアの数。 2
hive.tez.disk.size 各タスクコンテナのディスクサイズ。 20G
hive.tez.input.format Tez AM での分割生成の入力形式。 org.apache.hadoop.hive.ql.io.HiveInputFormat
hive.tez.min.partition.factor 自動リデューサー並列処理を有効にするときに Tez が指定するリデューサーの下限。 0.25
hive.vectorized.execution.enabled ベクトル化されたクエリ実行モードを有効にするオプション。 TRUE
hive.vectorized.execution.reduce.enabled クエリ実行のリデュース側のベクトル化モードを有効にするオプション。 TRUE
javax.jdo.option.ConnectionDriverName JDBC メタストアのドライバークラス名。 org.apache.derby.jdbc.EmbeddedDriver
javax.jdo.option.ConnectionPassword メタストアデータベースに関連付けられたパスワード。 NULL
javax.jdo.option.ConnectionURL JDBC メタストアの JDBC 接続文字列。 jdbc:derby:;databaseName=metastore_db;create=true
javax.jdo.option.ConnectionUserName メタストアデータベースに関連付けられたユーザー名。 NULL
mapreduce.input.fileinputformat.split.maxsize 入力形式が org.apache.hadoop.hive.ql.io.CombineHiveInputFormat の場合、分割計算時の分割の最大サイズ。値 0 (ゼロ) は、制限がないことを示します。 0
tez.am.dag.cleanup.on.completion DAG の完了時にシャッフルデータのクリーンアップを有効にするオプション。 TRUE
tez.am.emr-serverless.launch.env.[KEY] Tez AM プロセスで KEY 環境変数を設定するオプション。Tez AM の場合、この値は hive.emr-serverless.launch.env.[KEY] 値を上書きします。
tez.am.log.level EMR Serverless が Tez App Master に渡すルートログインレベル。 INFO
tez.am.sleep.time.before.exit.millis EMR Serverless は、AM シャットダウンリクエストからこの期間の後に ATS イベントをプッシュする必要があります。 0
tez.am.speculation.enabled 遅いタスクを投機的に起動するオプション。これにより、マシンの不良や遅延のために一部のタスクの実行が遅くなっている場合、ジョブのレイテンシーを減らすことができます。Amazon EMR 6.10.x 以前でのみサポートされています。 FALSE
tez.am.task.max.failed.attempts 特定のタスクが失敗するまでの最大試行回数。この数は、手動で終了した試行数をカウントしません。 3
tez.am.vertex.cleanup.height すべての依存頂点が完了すると、Tez AM が頂点シャッフルデータを削除する距離。この機能は、値が 0 の場合に無効になります。Amazon EMR バージョン 6.8.0 以降でこの機能がサポートされています。 0
tez.client.asynchronous-stop EMR Serverless が Hive ドライバーを終了する前に ATS イベントをプッシュするオプション。 FALSE
tez.grouping.max-size グループ化された分割のサイズの上限 (バイト単位)。この制限により、過度に大きな分割が防止されます。 1073741824
tez.grouping.min-size グループ化された分割のサイズの下限 (バイト単位)。この制限により、小さい分割が多発するのが防止されます。 16777216
tez.runtime.io.sort.mb Tez が出力をソートするときのソフトバッファのサイズ。 最適な値は Tez タスクメモリに基づいて計算されます
tez.runtime.unordered.output.buffer.size-mb Tez がディスクに直接書き込まない場合に使用するバッファのサイズ。 最適な値は Tez タスクメモリに基づいて計算されます
tez.shuffle-vertex-manager.max-src-fraction EMR Serverless が現在の頂点のすべてのタスクをスケジュールする前に完了する必要があるソースタスクの割合 (ScatterGather 接続の場合)。現在の頂点でスケジューリングできるタスクの数は、min-fractionmax-fraction の間で直線的にスケールされます。これはデフォルト値または tez.shuffle-vertex-manager.min-src-fraction のいずれか大きい方がデフォルトになります。 0.75
tez.shuffle-vertex-manager.min-src-fraction EMR Serverless が現在の頂点のタスクをスケジュールする前に完了する必要があるソースタスクの割合 (ScatterGather 接続の場合)。 0.25
tez.task.emr-serverless.launch.env.[KEY] Tez タスクプロセスで KEY 環境変数を設定するオプション。Tez タスクの場合、この値は hive.emr-serverless.launch.env.[KEY] 値を上書きします。
tez.task.log.level EMR Serverless が Tez タスクに渡すルートログインレベル。 INFO
tez.yarn.ats.event.flush.timeout.millis シャットダウンする前にイベントがフラッシュされるまでの AM の最大待機時間。 300000

Hive ジョブの例

次のコード例は、StartJobRun API を使用して Hive クエリを実行する方法を示しています。

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-role-arn \ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket/emr-serverless-hive/query/hive-query.ql", "parameters": "--hiveconf hive.log.explain.output=false" } }' \ --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.exec.scratchdir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/scratch", "hive.metastore.warehouse.dir": "s3://amzn-s3-demo-bucket/emr-serverless-hive/hive/warehouse", "hive.driver.cores": "2", "hive.driver.memory": "4g", "hive.tez.container.size": "4096", "hive.tez.cpu.vcores": "1" } }] }'

Hive ジョブを実行する方法のその他の例は、EMR Serverless Samples GitHub リポジトリにあります。