6. Hive データ ウェアハウス アプリケーションの Hive トランザクション (非常に詳細なステップバイステップ ガイダンス、WIN10、VMware Workstation 15.5 PRO、CentOS-6.7)

Hive リモート モード デプロイメントのリファレンス:
1. Hive データ ウェアハウス アプリケーションの Hive デプロイメント (非常に詳細なステップバイステップ ガイダンス、WIN10、VMware Workstation 15.5 PRO、CentOS-6.7)

1. 事務の設計と特徴

1. 事務の特徴

トランザクションは、一連のデータベース操作で構成される完全な論理プロセスです。Hive では、トランザクションにはアトミック性、分離性、一貫性、耐久性という 4 つの特性が含まれます。

アトミック性: トランザクション内のすべての操作は完全に完了しているか、完了していないかのいずれかであり、中間段階で終了することはありません。
分離: データベースでは、同時に実行されるトランザクションが相互に干渉しないようにします。トランザクション内で使用される操作とデータは、他の同時トランザクションから分離されます。
一貫性: トランザクションの開始前と終了後、データベースは一貫性と正確性を維持し、データ整合性の制約を満たします。
永続性: トランザクションの完了後、データベース内の対応するデータの状態変化は永続的になります。

2. ビジネスデザイン

Hive のデータ ファイルは HDFS に保存されているため、ファイルの変更はサポートされておらず、データの追加のみが許可されています。同時に、データが HDFS に追加されるとき、HDFS にはデータ ファイルを読み取るユーザーに一貫性を提供する機能がありません。Hive は増分形式を使用してデータの更新と削除を記録するためです。
Hive トランザクション テーブルのデータは、通常、2 種類のファイルに設計されています。1 つは、Hive トランザクション テーブルに元のデータを格納するために使用される基本ファイルであり、もう 1 つは、新しいデータを格納するために使用される増分ファイルです。 Hive トランザクション テーブル内のデータ。更新および削除されたデータは、Hive バケットの形式で保存されます。
実際の運用では、各トランザクションデータは個別の増分フォルダーを作成して保存することになりますが、ユーザーがトランザクションテーブルのデータを読み込む際には、基本ファイルと増分ファイルの両方がメモリ上に読み込まれます。このプロセスは、元のデータのどのデータが変更または削除されたかを判断し、最終的にマージされた結果をクエリに返します。

3.取引の実施

Hive は、HiveServer2 または Metastore で実行される一連のバックグラウンド プロセス コンパクターを通じてトランザクション サポートを実装します。テーブルの変更操作が増えると、デルタ ファイルの数も増加するため、Compactor を使用してデルタ ファイルを圧縮する必要があります。圧縮は、一次圧縮と二次圧縮に分けられます。一次圧縮は、1 つ以上のバケットのデルタ ファイルとベース ファイルを処理し、バケットごとに新しいベース ファイルに書き換えます。二次圧縮は、既存のデルタ ファイルのセットを取得します。デルタ ファイルとそれぞれを書き換えます。デルタ フォルダーを 1 つのデルタ ファイルに変換します。

2. トランザクションテーブルの操作

1. 開業

Hive はデフォルトではトランザクション サポートを有効にしていませんが、ACID 原則に確実に準拠するために、Hive は追加の処理を実行する必要があり、これによりパフォーマンスに影響があり、Hive トランザクションを有効にするための手動構成が必要になります。
作成したクラスターnode-01、node-02、node-03を例にとると、node-02のHiveクライアントツールBeelineを使用してnode-01のHiveServer2サービスにリモート接続してHiveを操作しているため、node-02のHiveクライアントツールBeelineを使用してHiveを操作します。 01を修正 Hive設定ファイルhive-site.xmlに以下の内容を追加します。

<property>
     <name>hive.support.concurrency</name>
  <value>true</value>
</property>
<property>
     <name>>hive.enforce.bucketing</name>
     <value>true</value>
</property>
<property>
     <name>hive.exec.dynamic.partition.mode</name>
     <value>nonstrict</value>
</property>
<property>
     <name>hive.txn.manager</name>
  <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
     <name>hive.compactor.initiator.on</name>
     <value>true</value>
</property>
<property>
     <name>hive.compactor.initiator.on</name>
     <value>1</value>
</property>

hive.support.concurrency: Hive ロック マネージャーが複数のトランザクションの同時実行機能を提供できるようにします。
hive.enforce.bucketing: バケット テーブルで指定されたバケットの数に従って自動バケット化を有効にします。
hive.exec.dynamic.partition.mode: Hive の厳密モードをオフにします。
hive.txn.manager: Hive のトランザクションとロックを管理します。
hive.compactor.initiator.on: イニシエーターをオンにします。
hive.compactor.initiator.on: Compactor を実行するワーカー スレッドの数を指定します。
hive-site.xmlの記述方法は以下のとおりです。
ここに画像の説明を挿入します

2. トランザクションテーブルの作成

Hive トランザクションが有効な場合、作成した Hive テーブルがそのままトランザクション テーブルになるわけではないため、Hive テーブルの作成時に属性値transactional で作成した Hive テーブルがトランザクション テーブルに属することを宣言する必要があります。
たとえば、Hive でバケットベースのトランザクション テーブル tran_clustered_table を作成します。このテーブルには、ID、名前、性別、年齢、部門の列が含まれます。テーブルの作成手順は次のとおりです。

CREATE TABLE hive_database.tran_clustered_table (
id STRING,name STRING,gender STRING,age INT,dept STRING)
CLUSTERED BY (dept) INTO 3 BUCKETS
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC
TBLPROPERTIES ("transactional"="true",
  "compactor.mapreduce.map.memory.mb"="2048",
  "compactorthreshold.hive.compactor.delta.num.threshold"="4",
  "compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
);

"transactional" = "true": 作成されたテーブルがトランザクション テーブルであることを示します。
"compactor.mapreduce.map.memory.mb" = "2048": 圧縮タスクによってトリガーされた MapReduce タスクによって使用されるメモリを示します。
"compactorthreshold.hive.compactor.delta.num.threshold" = "4": 4 つを超えるデルタ ファイルが二次圧縮をトリガーすることを示します。
"compactorthreshold.hive.compactor.delta.pct.threshold" = "0.5": デルタ ファイルのサイズがベース ファイルの 50% を超えると、大規模な圧縮がトリガーされることを示します。
ここに画像の説明を挿入します

3. データ挿入

トランザクションテーブルにデータを挿入する操作は、実テーブルにデータを挿入する操作と同じであり、作成したトランザクションテーブルに該当するデータを挿入します。

INSERT INTO TABLE hive_database.tran_clustered_table VALUES 
("001","user01","male",20,"YanFa"),
("002","user02","woman",23,"WeiHu"),
("003","user03","woman",25,"YanFa"),
("004","user04","woman",30,"RenShi"),
("005","user05","male",28,"YanFa"),
("006","user06","male",27,"CeShi"),
("007","user07","woman",33,"ShouHou"),
("008","user08","male",32,"CeShi");

上記の手順を実行すると、トランザクション テーブル tran_clustered_table によって、HDFS ストレージ ディレクトリ /user/hive_local/warehouse/hive_database.db/tran_clustered_table/ に delta で始まるフォルダーが生成されます。このフォルダー内のデータ ファイルは、挿入の追加に属します。操作.ボリューム ファイル。

4. アップデート操作

Hive トランザクション テーブルの更新操作とは、トランザクション テーブル内の特定の列の値、または複数の列の値を更新することを指します。更新操作の構文形式は次のとおりです。

UPDATE tablename SET column = value [, column = value ...] 
[WHERE expression]

UPDATE は更新操作の HiveQL ステートメントを表します。tablename はトランザクション テーブルの名前を表します。SET 句は更新された列と対応する値を指定します。column = value は列名と対応する値を表します。WHERE 式はオプションであり、次のことを示します。条件式は、「列値を更新する条件の指定」に従って WHERE 句で指定されます。
たとえば、作成して挿入したテーブル tran_clustered_table の user01 の従業員 ID を 009 に更新し、年齢を 21 に更新します。具体的な手順は次のとおりです。

UPDATE hive_database.tran_clustered_table 
SET age = 21,id="009" 
WHERE name = "user01";

このとき、トランザクション テーブル tran_clustered_table は、HDFS ストレージ ディレクトリ /user/hive_local/warehouse/hive_database.db/tran_clustered_table/ の下に delta で始まるフォルダーを生成し、このフォルダー内のデータ ファイルが更新操作用のデルタ ファイルになります。
予防:

  1. 更新された列はトランザクション テーブルに存在する必要があります。
  2. パーティション テーブルのパーティション フィールドを更新列として指定することはできません。
  3. バケット テーブルのバケット フィールドを更新列として指定することはできません。

5. 削除操作

Hive トランザクション テーブルの削除操作とは、指定された条件を満たす Hive テーブル内のすべてのデータを削除することを指します。ここでの Hive テーブルはトランザクション テーブルのみをサポートします。Hive での削除操作の構文形式は次のとおりです。

DELETE FROM tablename [WHERE expression]

DELETE はトランザクション テーブル データを削除するステートメントを表し、FROM 句はデータを削除するトランザクション テーブルを指定します。WHERE 式はオプションであり、条件式が WHERE 句で指定されていることを示します。
たとえば、トランザクション テーブル tran_clustered_table 内の user01 という名前の従業員を削除する場合、具体的な手順は次のとおりです。

DELETE FROM hive_database.tran_clustered_table WHERE name = "user01";

このとき、トランザクション テーブル tran_clustered_table は、HDFS ストレージ ディレクトリ /user/hive_local/warehouse/hive_database.db/tran_clustered_table/ の下に delta で始まるフォルダーを生成し、このフォルダー内のデータ ファイルが更新操作用のデルタ ファイルになります。

参考文献: Dark Horse Programmer. Hive Data Warehouse Application[M]. 北京: 清華大学出版局、2021。

おすすめ

転載: blog.csdn.net/weixin_42051846/article/details/132767066