Apache Hiveの使用
Apache Hiveは、Apache Hadoop上に構築されたデータ・ウェアハウス・システムであり、SQLを使用した分散ストレージに存在する大規模なデータセットの読取り、書込みおよび管理を容易にします。
Hive構成プロパティ
Big Data Service 3.1.1以降に含まれるHive構成プロパティ。
設定 | プロパティ | 説明 |
---|---|---|
hive-env |
hive_metastore_hadoop_opts |
HiveメタストアのHadoopオプション |
hive_metastore_remotejmx_hadoop_opts |
リモートJXMが有効になっている場合のHiveメタストアのHadoopオプション | |
hive_server_hadoop_opts |
Hiveサーバー用のHadoopオプション | |
hive_server_remotejmx_hadoop_opts |
リモートJXMが有効になっている場合のHiveサーバーのHadoopオプション | |
hive_secure_hadoop_opts |
セキュリティが有効な場合のHadoopオプション | |
hive_classpath_ext |
HiveのHadoopライブラリを含むパス | |
hive-interactive-env |
hive_interactive_hadoop_opts |
Hive InteractiveのHadoopオプション |
hive_interactive_secure_hadoop_opts |
セキュリティが有効になっている場合のHive InteractiveのHadoopオプション |
パフォーマンス・チューニング
これは、小さいデータセットに対してクエリーを実行する場合の一般的なガイドラインです。FetchTask機能には、前述のシナリオ/ユースケースで次の利点があります。
小さいデータセットを操作する場合、特定のシナリオまたは問合せの実行時のユース・ケースでFetchTask機能を利用できます。この機能は、デフォルトでmore
に設定されたhive.fetch.task.conversion
パラメータを使用して制御できます。FetchTaskは、着信問合せのMapReduceジョブを開始せずに、ファイルを直接アクセスして結果を提供する効率的なタスクです。この機能は、単一のデータ・ソース(1つの表またはパーティション)、副問合せなし、集計または個別、ビューまたは結合に適用しないなどの追加の要件に従って、制限のある特定の列を選択するときに適用されます。したがって、"select col1 as alias1, col2 from table where partitionkey='somePartitionValue'", "select id from t limit 1;", or "select col1 as alias1, col2 from table where partitionkey='somePartitionValue'"
、FetchTaskなどの問合せの実行が利用されます。ただし、「hive.fetch.task.conversion
」をminimalに設定すると、select *
を制限付きで実行するときにFetchTaskが適用されます。
より大きなデータセットを処理し、FetchTaskを有効にする場合は、BIツール、Beeline、Hueなどの選択問合せを起動するときに、データセット・サイズに基づいてサーバーおよびクライアントのヒープ・サイズをチューニングします。または、HiveServerからメモリー・ボトルネックを排除するには、「hive.fetch.task.conversion
」を「なし」に設定してFetchTask機能を無効にし、MapReduceジョブを実行します。
Hive表の削除問合せの失敗
Hive表の削除問合せは、エラーDELETE from table1
で失敗します。
DELETE from table1;
FAILED: SemanticException [Error 10294]: Attempt to do update or delete using transaction manager that does not support these operations.
削除サポートは、Hiveの非トランザクション表または非acid表では使用できません。表を削除するには、トランザクション表を作成する必要があります。
例:
CREATE TABLE emp12(id int,age int)TBLPROPERTIES ('transactional'='true');