2017-05-23 12 views
0

ハイブでトランザクションを有効にすることで、レコードを更新できます。私のハイブテーブルにAVROフォーマットを使用していると仮定します。ハイブが(だって複製因子は3である)AVROファイルを更新し、別のサーバーに再びそれらを複製するの面倒をどのようハイブトランザクションテーブルのデータを更新すると、HDFS内のファイルがファイルの作成/更新される方法

https://hortonworks.com/hadoop-tutorial/using-hive-acid-transactions-insert-update-delete-data/

これについて説明した良い記事や、ハイブでACIDを使用した結果が見つかりませんでした。 HDFSは非更新またはファイルのみを追加するために推奨されるので、どのようにしてこの間のレコードを更新しますか。

お知らせください。

答えて

2

テーブルのデータは、一連のベースファイルに格納されます。新しいレコード、更新、および削除はデルタファイルに格納されます。新しいデルタファイルセットが、テーブルを変更する各トランザクション(またはFlumeまたはStorm、トランザクションの各バッチなどのストリーミングエージェントの場合)ごとに作成されます。読み取り時に、リーダーはベースファイルとデルタファイルをマージし、読み取ったときに更新や削除を適用します。

その後、メジャーコンパクションは、より大きなデルタファイルおよび/またはベースファイルを別のベースファイルにマージして、定期的な間隔でテーブルスキャン操作を高速化します。

スペースを節約し、データアクセスを最適化するために、挿入/更新/削除されたデータが定期的に圧縮されます。

  1. それだけORCファイルのために働く:

    ACIDトランザクションは、現在、これらの制限を持っていています。 Parquetテーブルのサポートを追加するためのオープンソースのJIRAがあります。

  2. これは、ソートされていないバケット表に対してのみ機能します。
  3. INSERT OVERWRITEはトランザクションではサポートされていません。
  4. BEGIN、COMMIT、またはROLLBACKトランザクションはサポートされていません。
  5. OLTPではお勧めできません。

ACIDはAVROファイルではサポートされず、HDFSブロック置換ポリシーはACIDテーブルでも同じです。

以下のリンクは、ハイブのACIDテーブルを理解するのに役立ちます。

http://docs.qubole.com/en/latest/user-guide/hive/use-hive-acid.html

https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

関連する問題