Hive コネクタでは、Hive データウェアハウスに保存されているデータをクエリおよび分析できます。
背景
- さまざまなフォーマットのデータファイルで、通常、Hadoop 分散ファイルシステム (HDFS) または Alibaba Cloud OSS などのオブジェクトストレージシステムに保存されます。
- データファイルをスキーマおよびテーブルにマッピングするメタデータで、MySQL などのデータベースに保存され、Hive メタストアサービス (HMS) を介してアクセスされます。
- HiveQL と呼ばれるクエリ言語で、MapReduce や Tez などの分散コンピューティングフレームワーク上で実行されます。
前提条件
DataLake クラスターまたは Hadoop クラスターを作成し、Presto サービスを選択している必要があります。手順については、「クラスターの作成」をご参照ください。
制限
- Hive コネクターを使用するには、Hive メタストアサービスが設定されている必要があります。
- Hive コネクターは、HDFS、Alibaba Cloud OSS、およびその他の OSS 互換システムなど、さまざまな分散ストレージシステムをサポートしています。コーディネーターノードとすべてのワーカーノードは、Hive メタストアと基盤となるストレージシステムの両方にネットワークアクセスできる必要があります。デフォルトでは、Hive メタストアはポート 9083 で Thrift プロトコルを介して通信します。
Hive コネクター設定の変更
Hive コネクター設定を変更するには、「コネクターの設定」をご参照ください。
デフォルトのコネクター設定
| パラメーター | 説明 |
| hive.recursive-directories | テーブルまたはパーティションの場所のサブディレクトリからデータを読み取れるようにします。これは、Hive の hive.mapred.supports.subdirectories プロパティに類似しています。 |
| hive.metastore.uri | Thrift プロトコルを使用して Hive メタストアに接続するための URI です。 デフォルト値は |
| hive.config.resources | HDFS 設定ファイルのカンマ区切りリストです。これらのファイルは、すべての Presto ホストに存在する必要があります。 重要 このパラメーターは、HDFS へのアクセスが必要な場合にのみ設定してください。 |
| hive.delta-table-enabled | Presto が Delta Lake テーブルを読み取れるかどうかを指定します。有効な値は次のとおりです。
|
| hive.delta-compatible-mode-enabled | Delta Lake テーブルの互換モードを有効にするかどうかを指定します。有効な値は次のとおりです。
|
| hive.hdfs.impersonation.enabled | ユーザー偽装を有効にするかどうかを指定します。有効な値は次のとおりです。
|
複数の Hive クラスターの設定
複数の Hive クラスターがある場合は、etc/catalog ディレクトリに複数のカタログファイルを追加できます。各ファイルには .properties 拡張子が必要です。
たとえば、プロパティファイルの名前が sales.properties の場合、Presto はそのファイル内のコネクター設定を使用して、sales という名前のカタログを作成します。
HDFS 設定
hive.config.resources プロパティを追加して、必要な HDFS 設定ファイルを参照します。- 非互換性を防ぐため、ファイルには必要最小限のプロパティのみを含めてください。
- 設定ファイルは、すべての Presto ホストに存在する必要があります。既存の Hadoop 設定ファイルを参照する場合は、Hadoop が実行されていない Presto ノードにもそれらをコピーしてください。
HDFS ユーザー名と権限
Presto で Hive テーブルに対して CREATE TABLE または CREATE TABLE AS ステートメントを実行する前に、Presto が HDFS へのアクセスに使用するユーザーに、Hive ウェアハウスディレクトリへの権限があることを確認してください。Hive ウェアハウスディレクトリは、hive-site.xml ファイルの hive.metastore.warehouse.dir プロパティで指定されます。デフォルト値は /user/hive/warehouse です。
対応ファイルタイプ
| ファイルタイプ | 備考 |
| ORC | なし |
| Parquet | なし |
| Avro | なし |
| RCText | ColumnarSerDe を使用する RCFile。 |
| RCBinary | LazyBinaryColumnarSerDe を使用する RCFile。 |
| SequenceFile | なし |
| JSON | org.apache.hive.hcatalog.data.JsonSerDe を使用します。 |
| CSV | org.apache.hadoop.hive.serde2.OpenCSVSerde を使用します。 |
| TextFile | なし |
サポートされているテーブルタイプ
| タイプ | 説明 |
| ACID テーブル | Hive メタストア バージョン 3.x に接続すると、Hive コネクターは挿入専用テーブルおよび ACID テーブルからの読み取りと書き込みができます。コネクターは、パーティションとバケットを完全にサポートしています。 ACID テーブルに対する行レベルの削除操作および更新操作をサポートしています。ただし、パーティションキー列とバケット列に対する更新操作はサポートしていません。コネクターは、Hive ストリーミングインジェストによって作成された ACID テーブルのクエリをサポートしていません。詳細については、Streaming Data Ingest をご参照ください。 |
| マテリアライズドビュー | Hive コネクターは、Hive のマテリアライズドビューからデータを読み取ることができます。Presto では、これらのビューは通常の読み取り専用テーブルとして表示されます。 |
Hive ビュー
Hive ビューは HiveQL で定義され、 Hive Metastore Service に格納されます。
| モード | 説明 |
| 無効 | ビューにエンコードされたビジネスロジックとデータには、 Presto からアクセスできません。 デフォルトでは、 Presto は Hive ビューを無視します。 |
| レガシー | Presto が Hive ビューからデータを読み取れるようにする、シンプルな実装です。 このモードを有効にするには、 特定のカタログに対してレガシーアクセスを一時的に有効にするには、カタログセッションプロパティ HiveQL は SQL と非常によく似ているため、レガシーモードではビューの HiveQL クエリを変換せずに標準 SQL として解釈します。 このアプローチはシンプルな Hive ビューでは機能しますが、複雑なクエリでは問題が発生する可能性があります。たとえば、 HiveQL 関数が SQL 関数と同じ関数シグネチャを持ちながら動作が異なる場合、結果が異なることがあります。より極端なケースでは、クエリの解析または実行が失敗する可能性があります。 |
| 試験的 | このモードでは、式やステートメントを含む Hive ビューを分析、処理、書き換えます。 このモードを有効にするには、 このモードは、次の機能をまだサポートしていません。
|
設定プロパティ
Hive 設定プロパティ
Hive コネクターは、JindoTable によるアクセラレーションをサポートしています。E-MapReduce (EMR) クラスターには、hive.properties と hive-acc.properties の 2 つの組み込み Hive コネクターが含まれています。hive-acc.properties ファイルには、ORC または Parquet フォーマットのファイルを最適化および高速化する JindoTable Native Engine が含まれています。お使いのバージョンの SmartData のドキュメントをご参照ください。詳細については、「ネイティブクエリアクセラレーションの有効化」をご参照ください。
| パラメーター | 説明 |
| hive.config.resources | HDFS 設定ファイルのカンマ区切りリストです。これらのファイルは、すべての Presto ホストに存在する必要があります。 説明 このプロパティは、HDFS へのアクセスが必要な場合にのみ設定してください。 |
| hive.recursive-directories | テーブルまたはパーティションの場所のサブディレクトリからのデータの読み取りを許可します。これは、Hive の hive.mapred.supports.subdirectories プロパティに類似しています。 |
| hive.ignore-absent-partitions | ファイルシステムの場所が存在しない場合にパーティションを無視し、クエリは失敗しません。これによりデータがスキップされる可能性があります。 デフォルト値は false です。 |
| hive.storage-format | 新しいテーブルのデフォルトのファイルフォーマットを指定します。 デフォルト値は ORC です。 |
| hive.compression-codec | ファイルを書き込む際に使用する圧縮コーデックを指定します。有効な値: NONE、SNAPPY、LZ4、ZSTD、または GZIP。 デフォルト値は GZIP です。 |
| hive.force-local-scheduling | スプリットを Hadoop DataNode と同じノードでスケジュールすることを強制します。この設定は、Presto が各 DataNode とコロケーションされているインストール環境で効率を向上させます。 デフォルト値は false です。 |
| hive.respect-table-format | 新しいパーティションが既存のテーブルフォーマットを使用するか、Presto フォーマットを使用するかを制御します。有効な値:
|
| hive.immutable-partitions | 既存のパーティションに新しいデータを挿入できるかどうかを制御します。 true に設定されている場合、 デフォルト値は false です。 |
| hive.insert-existing-partitions-behavior | 既存のパーティションにデータを挿入する際の動作を指定します。有効な値:
|
| hive.create-empty-bucket-files | 空のバケット用に空のファイルを作成するかどうかを制御します。有効な値:
|
| hive.max-partitions-per-writers | ライターあたりの最大パーティション数です。 デフォルト値は 100 です。 |
| hive.max-partitions-per-scan | 単一のテーブルスキャンあたりの最大パーティション数です。 デフォルト値は 100,000 です。 |
| hive.hdfs.authentication.type | HDFS 認証タイプを指定します。有効な値:
|
| hive.hdfs.impersonation.enabled | HDFS ユーザー偽装を有効にします。有効な値:
|
| hive.hdfs.trino.principal | Trino が HDFS に接続する際に使用する Kerberos プリンシパルです。 |
| hive.hdfs.trino.keytab | HDFS クライアントキータブファイルのパスです。 |
| hive.dfs.replication | HDFS レプリケーション係数です。 |
| hive.security | デフォルト値は legacy です。詳細については、「Hive コネクターのセキュリティ設定」をご参照ください。 |
| security.config-file | hive.security=file が設定されている場合に使用される設定ファイルへのパスを指定します。 |
| hive.non-managed-table-writes-enabled | 非管理 (外部) Hive テーブルへの書き込みを有効にします。 デフォルト値は false です。 |
| hive.non-managed-table-creates-enabled | 非管理 (外部) Hive テーブルの作成を有効にします。 デフォルト値は true です。 |
| hive.collect-column-statistics-on-write | 書き込み時の列レベル統計の自動収集を有効にします。詳細については、「テーブル統計」をご参照ください。 デフォルト値は true です。 |
| hive.file-status-cache-tables | ファイルステータスをキャッシュするテーブルのリストです。 たとえば、 |
| hive.file-status-cache-size | キャッシュされるファイルステータスエントリの最大合計数です。 デフォルト値は 1,000,000 です。 |
| hive.file-status-cache-expire-time | キャッシュされたファイルステータスの有効期間です。 デフォルト値は 1 m です。 |
| hive.rcfile.time-zone | バイナリエンコードされたタイムスタンプ値を指定されたタイムゾーンに調整します。 デフォルトは JVM のデフォルトタイムゾーンです。 説明 Hive 3.1 以降では、この値を UTC に設定する必要があります。 |
| hive.timestamp-precision | Hive のタイムスタンプ列の精度を指定します。有効な値:
デフォルト値は MILLISECONDS です。 説明 設定された精度より高い値は丸められます。 |
| hive.temporary-staging-directory-enabled | 書き込み操作に hive.temporary-staging-directory-path で設定された一時ステージングディレクトリを使用するかどうかを制御します。一時ステージングディレクトリは、OSS、暗号化された HDFS、または外部ロケーションにある、ソートされていないテーブルへの書き込み時には使用されません。ソートされたテーブルへの書き込み時には、このパスがソート操作中の一時ファイルのステージングに使用されます。無効にした場合、ソートされたテーブルへの書き込み時にターゲットストレージがステージングに使用されますが、これはオブジェクトストレージでは非効率的な場合があります。デフォルト値は true です。 |
| hive.temporary-staging-directory-path | 書き込み操作用の一時ステージングディレクトリの場所を指定します。 デフォルト値は
/tmp/presto-${USER} です。説明 ${USER} プレースホルダーを使用して、ユーザーごとに異なる場所を割り当てることができます。 |
| hive.translate-hive-views | Hive ビューの変換を有効にします。 デフォルト値は false です。 |
| hive.legacy-hive-view-translation | Hive ビューの変換にレガシーアルゴリズムを使用します。特定のカタログでは、legacy_hive_view_translation カタログセッションプロパティを使用できます。デフォルト値は false です。 |
| hive.parallel-partitioned-bucketed-writes | パーティション化およびバケット化されたテーブルの書き込み並列度を向上させます。 デフォルト値は true です。 説明 このプロパティが無効になっている場合、ライタースレッド数はバケット数に制限されます。 |
ORC フォーマット設定プロパティ
| パラメーター | 説明 |
| hive.orc.time-zone | タイムゾーンを宣言していないレガシー ORC ファイルのデフォルトタイムゾーンを設定します。 デフォルトは JVM のデフォルトタイムゾーンです。 |
| hive.orc.use-columns-names | ORC 列に名前でアクセスするかどうかを制御します。 デフォルトでは、ORC ファイルの列は Hive テーブル定義で定義された順序でアクセスされます。この動作は、 デフォルト値は false です。 |
Parquet フォーマット設定プロパティ
| パラメーター | 説明 |
| hive.parquet.time-zone | タイムスタンプ値を指定されたタイムゾーンに調整します。 デフォルトは JVM のデフォルトタイムゾーンです。 説明 Hive 3.1 以降では、この値を UTC に設定する必要があります。 |
| hive.parquet.use-columns-names | Parquet 列へのアクセス方法を制御します。有効な値:
parquet_use_column_names catalog session プロパティでも制御できます。 |
メタストア設定プロパティ
| パラメーター | 説明 |
| hive.metastore | 使用する Hive メタストアのタイプを指定します。Presto は、デフォルトの Hive Thrift メタストア (thrift) とその派生をサポートしています。 デフォルト値は thrift です。 |
| hive.metastore-cache-ttl | Hive メタストアキャッシュ内のメタストアデータの有効期間を指定します。 デフォルト値は 0 s です。 |
| hive.metastore-cache-maximum-size | キャッシュするメタストアデータオブジェクトの最大数です。 デフォルト値は 10000 です。 |
| hive.metastore-refresh-interval | アクセス後にキャッシュされたメタストアデータが非同期で更新される頻度を指定します。キャッシュされたデータが古いものの、有効期限が切れていない場合、その後のアクセスで更新されたデータを参照できます。 |
| hive.metastore-refresh-max-threads | メタストアキャッシュの更新に使用されるスレッドの最大数です。 デフォルト値は 10 です。 |
| hive.metastore-timeout | Hive メタストアリクエストのタイムアウトです。 デフォルト値は 10 s です。 |
Thrift メタストア設定プロパティ
| パラメーター | 説明 |
| hive.metastore.uri | Thrift プロトコルを使用して Hive メタストアに接続するための URI です。 複数の URI を指定した場合、最初の URI がデフォルトで使用され、それ以外はフォールバックメタストアとして使用されます。このプロパティは必須です。例: |
| hive.metastore.username | Presto が Hive メタストアへのアクセスに使用するユーザー名です。 |
| hive.metastore.authentication.type | Hive メタストア認証タイプを指定します。有効な値:
|
| hive.metastore.thrift.impersonation.enabled | Hive メタストアユーザー偽装を有効にします。 |
| hive.metastore.thrift.delegation-token.cache-ttl | メタストア委任トークンキャッシュの有効期間です。 デフォルト値は 1 h です。 |
| hive.metastore.thrift.delegation-token.cache-maximum-size | 委任トークンキャッシュの最大サイズです。 デフォルト値は 1000 です。 |
| hive.metastore.thrift.client.ssl.enabled | メタストアへの接続時に SSL を有効または無効にします。有効な値:
|
| hive.metastore.thrift.client.ssl.key | 秘密鍵とクライアント証明書 (キーストア) へのパスです。 |
| hive.metastore.thrift.client.ssl.key-password | 秘密鍵のパスワードです。 |
| hive.metastore.thrift.client.ssl.trust-certificate | サーバー証明書チェーン (トラストストア) へのパスです。 説明 このプロパティは、SSL が有効になっている場合に必須です。 |
| hive.metastore.thrift.client.ssl.trust-certificate-password | サーバー証明書チェーンのパスワードです。 |
| hive.metastore.service.principal | Hive メタストアサービスの Kerberos プリンシパルです。 |
| hive.metastore.client.principal | Presto が Hive メタストアサービスに接続する際に使用する Kerberos プリンシパルです。 |
| hive.metastore.client.keytab | Hive メタストアクライアントキータブファイルのパスです。 |
パフォーマンスチューニングプロパティ
| パラメーター | 説明 |
| hive.max-outstanding-splits | スケジューラが検出を一時停止するしきい値となる、クエリ内のテーブルスキャンあたりのバッファリングされたスプリットの目標数です。 デフォルト値は 1000 です。 |
| hive.max-splits-per-second | 各テーブルスキャンで 1 秒あたりに生成されるスプリットの最大数です。この設定により、ストレージシステムへの負荷を軽減できます。デフォルトでは制限はなく、Presto はデータアクセスの並列度を最大化します。 |
| hive.max-initial-splits | 各テーブルスキャンで、コーディネーターはこの制限まで初期スプリット数を割り当てます。初期スプリットは max-initial-split-size までのサイズになります。その後のスプリットは max-split-size までのサイズになります。 デフォルト値は 200 です。 |
| hive.max-initial-split-size | スプリット数が max-initial-splits に達するまで使用される、各初期スプリットのサイズです。小さいスプリットは並列度を高め、小規模なクエリを高速化できます。 デフォルト値は 32 MB です。 |
| hive.max-split-size | ワーカーに割り当てられる単一のスプリットの最大サイズです。小さいスプリットは並列度を高めてレイテンシを削減できますが、オーバーヘッドとシステム負荷も増加します。 デフォルト値は 64 MB です。 |
テーブル統計
Hive コネクターは、クエリパフォーマンスを向上させるためのテーブル統計の収集と管理をサポートしています。
| 列タイプ | 収集される統計 |
| TINYINT | NULL 数、個別値数、最小/最大値 |
| SMALLINT | NULL 数、個別値数、最小/最大値 |
| INTEGER | NULL 数、個別値数、最小/最大値 |
| BIGINT | NULL 数、個別値数、最小/最大値 |
| DOUBLE | NULL 数、個別値数、最小/最大値 |
| REAL | NULL 数、個別値数、最小/最大値 |
| DECIMAL | NULL 数、個別値数、最小/最大値 |
| DATE | NULL 数、個別値数、最小/最大値 |
| TIMESTAMP | NULL 数、個別値数、最小/最大値 |
| VARCHAR | NULL 数、個別値数 |
| CHAR | NULL 数、個別値数 |
| VARBINARY | NULL 数 |
| BOOLEAN | NULL 数、true/false 値数 |