簡體   English   中英

在sqoop未將數據加載到HDFS中的apache配置單元中增量數據加載的最佳方法

[英]Best approach for incremental data load in apache hive where sqoop is not loading the data into HDFS

我有一種情況-定期使用實用程序數據文件[每次都使用相同的名稱-先刪除舊文件,然后加載更新的/最新的文件之后]從源系統推送到HDFS的定義位置。 該數據文件需要進一步推送到配置單元表中。

我正在尋找實現這一目標的最佳方法:

1)在配置單元中創建一個外部表,指向HDFS中實用程序將數據推送到HDFS的位置,這將在實用程序更新數據文件后立即自行更新配置單元表數據。

2)使用配置單元倉庫中存在的數據創建一個內部/托管表配置單元。 現在使用配置為cron作業的shell腳本-定期檢查配置單元倉庫中存在的文件的時間戳和實用程序正在推送/更新數據的位置中存在的文件的時間戳,如果時間戳不相同,則腳本將從配置單元中刪除文件倉庫並將最新文件復制到其中。

3)每次使用其他名稱創建新的配置單元表,將最新的數據文件加載到其中,刪除舊表,最后將新表重命名為配置單元中的舊表名稱。

4)還有其他方法嗎?

我需要專家評論哪種方法似乎是最好的??? 我還擔心這樣一種情況:我將使用這些方法中的任何一種來執行任何數據文件更改,並且有人同時訪問該表。是否有任何方法可以避免這種情況?

注意:不會通過Sqoop將數據加載到HDFS / Hive中作為增量加載。 同樣,每次更新的文件將再次具有完整的舊/更新數據以及新數據。 因此,此文件的大小可能會隨着時間的推移而增加,因為它將同時具有舊數據,更新數據和新數據。

問候,布達佩斯

如果您使用的Hive版本高於0.14,則可以執行上述操作。您應該使用hive的upsert功能。

  • 您可以創建一個外部表和一個受管理表。兩者都應具有相同的表結構-外部表將具有來自實用程序文件的所有數據(原始表單),並且您可以通過upsert功能進行更新,並根據需要插入(SCD II)在內部表中。我在A下創建的示例在外部創建, B在內部創建。更多信息,請參見此鏈接https://hortonworks.com/blog/update-hive-tables-easy-way/

    merge into A using B on A.id = B.id when matched then update set email=B.email, when not matched then insert values(B.id, B.email);

  • 最后,您可以設置一個oozie工作流程,該工作流程將定期執行插入/更新/刪除操作或設置任何cron作業。此外,您還需要定期從外部表中刪除數據以維護hdfs。

要么

您可以使用kudu代替蜂巢。請在此處參考我的回答

暫無
暫無

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

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