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-log4j2
とspark-executor-log4j2
の分類は、リリース 6.8.0 以降でのみ使用できます。
アプリケーションの上書きと Hive パラメータで同じ設定を渡すと、Hive パラメータが優先されます。次のリストは、設定を優先順位の高いものから低いものへとランク付けしたものです。
-
--hiveconf
で Hive パラメータの一部として提供する設定。property=value
-
アプリケーションの一部として提供する設定は、ジョブの開始時に上書きされます。
-
アプリケーションの作成時に
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.autogather を TRUE に設定します。クエリのより高度なコレクションについては、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.[ |
Hive ドライバー、Tez AM、Tez タスクなど、すべての Hive 固有のプロセスで 環境変数を設定するオプション。 |
|
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 |
次のいずれかの値が予想されます。BI 、ETL 、HYBRID 。これはユーザーレベルの設定ではありません。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 |
次のいずれかの値が予想されます。NONE 、MINIMAL 、MORE 。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 |
厳密なタイプの安全チェックを有効にし、string と double の両方と 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.[ |
Tez AM プロセスで 環境変数を設定するオプション。Tez AM の場合、この値は hive.emr-serverless.launch.env.[ 値を上書きします。 |
|
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-fraction と max-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.[ |
Tez タスクプロセスで 環境変数を設定するオプション。Tez タスクの場合、この値は hive.emr-serverless.launch.env.[ 値を上書きします。 |
|
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-arnjob-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