Hiveコネクタを使用して、Hiveデータウェアハウス内のデータをクエリおよび分析できます。
背景情報
Hiveデータウェアハウスシステムは、以下の部分で構成されています。
さまざまな形式のデータファイル。ほとんどの場合、データファイルはHadoop Distributed File System(HDFS)またはAlibaba Cloud Object Storage Service(OSS)などのオブジェクトストレージシステムに保存されます。
データファイルがスキーマとテーブルにどのようにマッピングされるかについてのメタデータ。メタデータは、MySQLデータベースなどのデータベースに保存されます。 Hive metastoreを使用してメタデータにアクセスできます。
HiveQLと呼ばれるクエリ言語。このクエリ言語は、MapReduceやTezなどの分散コンピューティングフレームワークで実行されます。
このトピックでは、Hiveコネクタに関する以下の情報について説明します。
前提条件
DataLakeクラスターまたはHadoopクラスターが作成され、Prestoサービスが選択されています。詳細については、「クラスターを作成する」をご参照ください。
制限
Hiveコネクタを構成するには、最初にHive metastoreを構成する必要があります。
Hiveコネクタは、HDFS、Alibaba Cloud OSS、OSS互換システムなど、さまざまな分散ストレージシステムをサポートしています。 Hiveコネクタを使用して、分散ストレージシステムからデータをクエリできます。 Prestoのコーディネーターノードとすべてのワーカーノードが、構成したHive metastoreと、クエリするデータが格納されている分散ストレージシステムにアクセスできることを確認してください。デフォルトでは、ポート 9083 経由で Thrift プロトコルを使用して Hive metastore にアクセスできます。
Hiveコネクタの構成を変更する
このセクションでは、Hiveコネクタの構成を変更する方法について説明します。詳細については、「コネクタの設定」をご参照ください。
Hiveコネクタのデフォルト構成
EMRコンソールのPrestoサービスページに移動し、[構成] タブをクリックし、[hive.properties] タブをクリックします。次の表で説明されているパラメーターが表示されます。ビジネス要件に基づいてこれらのパラメーターを変更します。
パラメーター | 説明 |
hive.recursive-directories | テーブルまたはパーティションのサブディレクトリからデータを読み取ることができるかどうかを指定します。このパラメーターは、Hiveの |
hive.metastore.uri | Thriftプロトコルに基づいてHive metastoreにアクセスするために使用されるUniform Resource Identifier(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 クラスターの構成
etc/catalog ディレクトリに複数の構成ファイルを作成することで、複数の Hive クラスターを扱うことができます。ファイル名の拡張子は .properties である必要があります。
たとえば、sales.properties という名前の構成ファイルを作成した場合、Presto はそのファイルで構成されたコネクタを使用して sales という名前のカタログを作成します。
HDFS構成
ほとんどの場合、HDFSクライアントはPresto用に自動的に構成されるため、構成ファイルを指定する必要はありません。ただし、特別なシナリオでは、HDFSクラスターにアクセスする場合にHDFSクライアントを指定する必要があります。たとえば、HDFSフェデレーションを有効にするか、NameNodeを高可用性モードでデプロイする場合は、必要なHDFS構成ファイルを参照するために hive.config.resources プロパティを追加する必要があります。
構成ファイルは必要な場合にのみ指定することをお勧めします。こうすることで、構成ファイルの数と含まれるプロパティの数が最小限に抑えられ、プロパティの非互換性の可能性が低くなります。
構成ファイルがPrestoを実行しているすべてのホストに存在することを確認してください。既存のHadoop構成ファイルを参照する場合は、Hadoopが実行されていないすべてのPrestoノードに構成ファイルがコピーされていることを確認してください。
HDFSユーザー名と権限
Prestoで CREATE TABLE ステートメントまたは CREATE TABLE AS ステートメントを実行してHiveテーブルを作成する前に、PrestoからHDFSにアクセスするために使用するアカウントに、Hiveのウェアハウスディレクトリにアクセスするための権限があるかどうかを確認してください。 Hiveウェアハウスディレクトリは、hive.metastore.warehouse.dirhive-site.xml ファイルの構成変数 /user/hive/warehouse で指定されます。デフォルト値は です。
サポートされているファイルの種類
Hiveコネクタは、次の表で説明されているファイルの種類をサポートしています。
ファイルの種類 | 備考 |
ORC | 該当なし |
Parquet | 該当なし |
Avro | 該当なし |
RCText |
|
RCBinary |
|
SequenceFile | 該当なし |
JSON |
|
CSV |
|
TextFile | 該当なし |
サポートされているテーブルの種類
Hiveコネクタは、次の表で説明されているテーブルの種類をサポートしています。
テーブルの種類 | 説明 |
Atomicity, Consistency, Isolation, Durability(ACID)テーブル | バージョン 3.X の Hive metastore を使用している場合、Hive コネクタを使用して、挿入専用テーブルおよび ACID テーブルからデータを読み取ったり、データに書き込んだりできます。この場合、パーティショニングとバケット化は完全にサポートされています。 ACID テーブルに対して行レベルの DELETE 操作と UPDATE 操作を実行できます。パーティションキー列またはバケット列で UPDATE 操作を実行したり、Hive Streaming Ingest を使用して ACID テーブルを作成したりすることはできません。詳細については、「Streaming Data Ingest」を参照してください。 |
マテリアライズドビュー | Hiveコネクタを使用して、Hiveのマテリアライズドビューからデータを読み取ることができます。 Prestoでは、マテリアライズドビューは通常の読み取り専用テーブルとして表示されます。 |
Hiveビュー
HiveビューはHiveQLで定義され、Hive metastoreに保存されます。
Hiveコネクタは、無効、レガシー、および実験の次のモードでHiveビューをサポートしています。
モード | 説明 |
無効 | このモードでは、ビューにエンコードされているビジネスロジックとデータはPrestoでは見えません。 Hiveビューはデフォルトで無視されます。 |
レガシー | このモードでは、Hiveビューはシンプルで、Prestoでデータを読み取ることができます。 このモードを有効にするには、 特定のカタログに対してこの従来のアクセスモードを一時的に有効にする場合は、カタログセッションプロパティ HiveQLはSQLに似ています。ビューを定義するHiveQLクエリは、SQLで記述されたクエリのように解釈されます。変換は必要ありません。 このモードは単純なHiveビューに適していますが、複雑なクエリでは問題が発生する可能性があります。たとえば、HiveQL関数がSQLと同じシグネチャを持っているが動作が異なる場合、返される結果が異なる場合があります。極端なシナリオでは、クエリが失敗するか、解析および実行されない場合があります。 |
実験 | このモードでは、ビューに含まれる式やステートメントを含め、Hiveビューを分析、処理、および書き直すことができます。 このモードを有効にするには、 このモードを使用する場合、次の機能はサポートされていません。
|
構成プロパティ
Hive構成プロパティ
Hiveコネクタは、JindoTableに基づくクエリ高速化をサポートしています。各EMRクラスターには、hive.properties と hive-acc.properties の 2 つの組み込み Hive コネクタがあります。 JindoTable のネイティブエンジンは、hive-acc.properties コネクタに組み込まれています。ネイティブエンジンは、ORCファイルまたはParquetファイルのクエリを高速化します。 JindoTableに基づくクエリ高速化の詳細については、SmartDataバージョンの関連トピックを参照してください。たとえば、SmartData 3.6.Xを使用している場合は、「ネイティブエンジンに基づいてクエリ高速化を有効にする」をご参照ください。
次の表に、Hiveコネクタの構成プロパティを示します。
プロパティ | 説明 |
hive.config.resources | HDFS構成ファイル。複数の構成ファイルを指定する場合は、ファイル名をコンマ(,)で区切ります。Prestoを実行しているすべてのホストに構成ファイルが存在することを確認してください。 説明 HDFSにアクセスする必要がある場合にのみ、このプロパティを構成します。 |
hive.recursive-directories | テーブルまたはパーティションのサブディレクトリからデータを読み取ることができるかどうかを指定します。このプロパティは、Hiveの |
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 | 単一テーブルスキャンあたりの最大パーティション数。 デフォルト値: 100000。 |
hive.hdfs.authentication.type | HDFS認証モード。有効な値:
|
hive.hdfs.impersonation.enabled | HDFSユーザーの偽装を有効にするかどうかを指定します。有効な値:
|
hive.hdfs.trino.principal | PrestoがHDFSに接続するときに使用されるKerberosプリンシパル。 |
hive.hdfs.trino.keytab | HDFSクライアントのキーファイルのパス。 |
hive.dfs.replication | HDFSレプリケーション係数。 |
hive.security | セキュリティプロパティ。デフォルト値: legacy。詳細については、「Hiveコネクタのセキュリティ構成」を参照してください。 |
security.config-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 | キャッシュされたファイルステータスエントリの最大数。 デフォルト値: 1000000。 |
hive.file-status-cache-expire-time | キャッシュされたディレクトリリストの有効期間。 デフォルト値: 1。単位: 分。 |
hive.rcfile.time-zone | バイナリエンコードされたタイムスタンプ値が調整されるタイムゾーン。 デフォルト値: JVMデフォルト。 説明 Hive 3.1以降のバージョンを使用する場合は、このプロパティをUTCに設定する必要があります。 |
hive.timestamp-precision | TIMESTAMP型のHive列の精度。有効な値:
デフォルト値: MILLISECONDS。 説明 精度の高い値は丸められます。 |
hive.temporary-staging-directory-enabled |
デフォルト値: true。 |
hive.temporary-staging-directory-path | データ書き込みに使用される一時ステージングディレクトリのパス。 デフォルト値: 説明 ${USER} プレースホルダーを使用して、ユーザーごとに一意の場所を指定できます。 |
hive.translate-hive-views | Hiveビューの変換を有効にするかどうかを指定します。 デフォルト値: false。 |
hive.legacy-hive-view-translation | 従来のアルゴリズムを使用してHiveビューを変換するかどうかを指定します。特定のカタログに対して、カタログセッションプロパティ デフォルト値: false。 |
hive.parallel-partitioned-bucketed-writes | パーティションテーブルおよびバケットテーブルへのデータ書き込みの並列性を向上させるかどうかを指定します。 デフォルト値: true。 説明 このプロパティをfalseに設定すると、書き込みスレッドの数はバケットの数を超えることはできません。 |
ORCファイルの構成プロパティ
次の表に、Hiveコネクタを使用してORCファイルからデータを読み取ったり、ORCファイルにデータを書き込んだりする際に構成されるプロパティを示します。
プロパティ | 説明 |
hive.orc.time-zone | タイムゾーンを宣言していない初期ORCバージョンのORCファイルのデフォルトのタイムゾーン。 デフォルト値: JVMデフォルト。 |
hive.orc.use-columns-names | 名前でORCファイルの列にアクセスするかどうかを指定します。 デフォルトでは、ORCファイルの列には、Hiveテーブル定義でのシーケンシャルな位置に基づいてアクセスされます。同等のカタログセッションプロパティは デフォルト値: false。 |
Parquetファイルの構成プロパティ
次の表に、Hiveコネクタを使用してParquetファイルからデータを読み取ったり、Parquetファイルにデータを書き込んだりする際に構成されるプロパティを示します。
プロパティ | 説明 |
hive.parquet.time-zone | タイムスタンプ値が調整されるタイムゾーン。 デフォルト値: JVMデフォルト。 説明 Hive 3.1以降のバージョンを使用する場合は、このプロパティをUTCに設定する必要があります。 |
hive.parquet.use-columns-names | 名前でParquetファイルの列にアクセスするかどうかを指定します。有効な値:
同等のカタログセッションプロパティは |
Hive metastore の構成プロパティ
次の表に、Hive metastore の構成プロパティを示します。専用のプロパティを使用して、Thrift プロトコルに基づいて接続された Hive metastore を構成できます。詳細については、「Thrift ベースの Hive metastore の構成プロパティ」をご参照ください。
プロパティ | 説明 |
hive.metastore | 使用される Hive metastore の種類。Presto は、デフォルトの Thrift ベースの Hive metastore (thrift) とその派生物をサポートしています。 デフォルト値: thrift。 |
hive.metastore-cache-ttl | Hive metastore にキャッシュされた metastore データの有効期間。 デフォルト値: 0。単位: 秒。 |
hive.metastore-cache-maximum-size | Hive metastore にキャッシュされた metastore データオブジェクトの最大数。 デフォルト値: 10000。 |
hive.metastore-refresh-interval | データアクセス操作後にキャッシュされた metastore データが非同期的に更新される間隔。期限切れでないデータのみが更新されます。データ更新機能により、後続のアクセスで最新のデータが取得されます。 |
hive.metastore-refresh-max-threads | キャッシュされた metastore データの更新に使用されるスレッドの最大数。 デフォルト値: 10。 |
hive.metastore-timeout | Hive metastore リクエストのタイムアウト期間。 デフォルト値: 10。単位: 秒。 |
Thrift ベースの Hive metastore の構成プロパティ
次の表に、Hive コネクタの Thrift ベースの Hive metastore の構成プロパティを示します。
プロパティ | 説明 |
hive.metastore.uri | Thrift プロトコルに基づいて Hive metastore にアクセスするために使用される URI。 複数の URI が構成されている場合、デフォルトで最初の URI が使用されます。他の URI に対応する Hive metastore は、セカンダリ metastore と見なされます。このプロパティは必須です。例: |
hive.metastore.username | Presto が Hive metastore にアクセスするために使用するユーザー名。 |
hive.metastore.authentication.type | Hive metastore の認証モード。有効な値:
|
hive.metastore.thrift.impersonation.enabled | Hive metastore のユーザー偽装を有効にするかどうかを指定します。 |
hive.metastore.thrift.delegation-token.cache-ttl | Hive metastore の委任トークンキャッシュの有効期間。 デフォルト値: 1。単位: 時間。 |
hive.metastore.thrift.delegation-token.cache-maximum-size | 委任トークンキャッシュの最大サイズ。 デフォルト値: 1000。 |
hive.metastore.thrift.client.ssl.enabled | Hive metastore が接続されているときに 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 metastore の Kerberos プリンシパル。 |
hive.metastore.client.principal | Presto が Hive metastore に接続するときに使用される Kerberos プリンシパル。 |
hive.metastore.client.keytab | Hive metastore クライアントの keytab ファイルのパス。 |
パフォーマンスチューニングの構成プロパティ
次の表に、Hive コネクタのパフォーマンスチューニングの構成プロパティを示します。
次の表のプロパティのデフォルト設定を変更すると、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 コネクタを使用して、テーブル統計を収集および管理できます。その後、統計に基づいてクエリのパフォーマンスを向上させることができます。
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 値の数 |