Amazon EMR 4.x での Hive の使用に関する考慮事項 - Amazon EMR

Amazon EMR 4.x での Hive の使用に関する考慮事項

このセクションでは、Amazon EMR 4.x リリースバージョンで Hive バージョン 1.0.0 を使用する場合と Amazon EMR 5.x リリースバージョンで Hive 2.x を使用する場合に考慮すべき違いについて説明します。

ACID トランザクションはサポート外

Amazon EMR 4.x リリースバージョンでの Hive は、4.x リリースバージョンの使用時に Amazon S3 に保存された Hive データとの ACID トランザクションをサポートしていません。Amazon S3 でトランザクションテーブルを作成しようとすると、例外が発生します。

Amazon S3 でのテーブルへの読み取りと書き込み

Amazon EMR 4.x リリースバージョンでの Hive は、一時ファイルを使用せずに直接 Amazon S3 に書き込むことができます。これにより、パフォーマンスは向上しますが、結果として Amazon S3 の同じテーブルに同じ Hive ステートメントで読み取りと書き込みを行うことができません。回避策は、HDFS に一時テーブルを作成して使用することです。

次の例は、複数の Hive ステートメントを使用して Amazon S3 内のテーブルを更新する方法を示しています。ステートメントは、Amazon S3 にある my_s3_table という名前のテーブルに基づいて、HDFS に tmp という名前の一時テーブルを作成します。これにより、Amazon S3 のテーブルは一時テーブルの内容で更新されます。

CREATE TEMPORARY TABLE tmp LIKE my_s3_table; INSERT OVERWRITE TABLE tmp SELECT ....; INSERT OVERWRITE TABLE my_s3_table SELECT * FROM tmp;

Log4j vs. Log4j 2

Amazon EMR 4.x リリースバージョンでの Hive は Log4j を使用します。バージョン 5.0.0 以降では、Log4j 2 がデフォルトです。これらのバージョンでは、異なるログ設定が必要になる場合があります。詳細については、Apache Log4j 2 を参照してください。

MapReduce がデフォルトの実行エンジン

Amazon EMR 4.x リリースバージョンでの Hive では、デフォルトの実行エンジンとして MapReduce を使用します。Amazon EMR バージョン 5.0.0 以降では、Tez がデフォルトです。これにより、ほとんどのワークフローでパフォーマンスが向上します。

Hive 認可

Amazon EMR 4.x リリースバージョンでの Hive では、HDFS の Hive 認可をサポートしますが、EMRFS および Amazon S3 はサポートしません。Amazon EMR クラスターは、デフォルトで認可が無効な状態で実行されます。

Amazon S3 での Hive ファイルマージ動作

Amazon EMR 4.x リリースバージョンでの Hive は、hive.merge.mapfilestrue の場合、マップのみのジョブの最後で小さいファイルをマージします。マージは、ジョブの平均出力サイズが hive.merge.smallfiles.avgsize の設定未満の場合にのみトリガーされます。最終出力パスが HDFS 内にある場合は、Amazon EMR Hive でも動作はまったく同じです。ただし、出力パスが Amazon S3 にある場合、hive.merge.smallfiles.avgsize パラメータは無視されます。その場合、hive.merge.mapfilestrue に設定されているとマージタスクが常にトリガされます。