簡體   English   中英

蜂巢中的增量/增量負載

[英]Delta/Incremental Load in Hive

我有以下用例:

我的應用程序在RDBMS DB中有一個包含多年數據的表。 我們已使用sqoop將數據獲取到HDFS中,並已加載到按年,月划分的hive表中。

現在,該應用程序將更新,並且每天也將新記錄插入RDBMS Table表中。 這些更新的記錄可以跨越整個歷史月份。 更新的記錄和新的插入記錄可以通過更新的時間戳字段確定(它將具有當前日期時間戳)。

現在的問題是:如何使用這些更新的記錄每天制作增量/增量負載配置單元表。

->我知道有一個sqoop功能,允許增量導入。 但是,僅新的增量導入對我們來說還不夠。

因為-

->我不能直接在配置單元表中插入這些記錄(使用insert into),因為它將導致重復的記錄(更新的記錄)。

->用同樣的方法,我不能使用插入覆蓋語句,因為它們只是更新和跨越多個月的插入記錄。 插入覆蓋將刪除以前的記錄。

當然,最簡單的選擇是每天使用sqoop獲取完整數據,但由於數據量很大,我們不想這樣做。

因此,基本上,我們只想完全加載我們已收到更新/插入記錄的那些分區。

我們願意在蜂巢或魷魚端探索選擇。 你能告訴我們嗎?

提前致謝。

對於任何基於Hive的系統,更新都是一個眾所周知的難題。

一種典型的方法是兩步過程

  1. 將所有已更改的數據插入到一個表中。 如您所說,更新行時將導致重復。
  2. 定期用第一張表中的“重復數據刪除”數據覆蓋第二張表。

第二步可能很痛苦,但實際上沒有辦法解決。 在某種程度上,您必須重寫,因為Hive不會進行就地更新。 但是,根據您的數據,您也許可以對表進行足夠巧妙的分區,以避免進行完全覆蓋。 例如,如果第1步僅插入少數幾個分區,則僅那些分區需要被覆蓋到第二個表中。

同樣,根據訪問模式,將第二個“重復數據刪除”表作為視圖而不完全實現它可能是有意義的。 通常,這只會延遲查詢時間。

我所看到的唯一的另一種方法是使用非常自定義的輸入和輸出格式。 您可以在這里閱讀有關以下內容的詳細信息: http : //pkghosh.wordpress.com/2012/07/08/making-hive-squawk-like-a-real-database/

Owen O'Malley還一直在努力將這種想法的版本添加到標准Hive中,但仍在開發中: https : //issues.apache.org/jira/browse/HIVE-5317

您可以使用直接的Map Reduce方法進行批量插入,更新和刪除。 詳細信息在這里。 它本質上是合並和緊湊的操作。 在記錄或以HDFS文件名編碼的時間戳或序列字段上執行二級排序。 來自reduce端聯接的記錄的最后版本作為輸出發出。

https://pkghosh.wordpress.com/2015/04/26/bulk-insert-update-and-delete-in-hadoop-data-lake/

將批量數據插入數據湖時,我們也遇到了類似的問題。 由於我們無法控制數據,因此很難保持湖泊清潔,避免重復。 請注意,這與更新配置單元中的記錄無關,而是避免再次重復同一記錄。

我為此任務創建了一個豬腳本:

CODATA = COGROUP HISTORICAL_DATA BY (key_col_1, key_col_2, ...),
                 DAILY_DATA_DISTINCT BY (key_col_1, key_col_2, ...);
CODATA_FILTERED = FILTER CODATA BY IsEmpty(HISTORICAL_DATA);
SET_DIFFERENCE = FOREACH CODATA_FILTERED GENERATE FLATTEN($2);
DUMMY = FILTER DAILY_DATA_DISTINCT BY $0=='';
DAILY_NEW_DATA = UNION DUMMY, SET_DIFFERENCE;

它建立了設置差異。 Apache DataFu SetDifference可以執行相同的操作,但是我們無法在內部使用它。

我為增量加載提供了一個解決方案,其中包含一個shell腳本,您只需要安排作業,就可以將行逐步添加到配置單元數據庫中。 對於完整的解決方案,您必須點擊以下鏈接-

https://bigdata-analytix.blogspot.com/2018/10/hive-incrementaldelta-load.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM