自動化HDFS資料複製機制的簡單方法!
到目前為止,我們已經看到了從HDFS複製資料的不同選擇。大多數機制沒有自動化或排程功能,不過是用於訪問資料的低階方法。如果希望自動化資料副本,可以將其中一種低階技術包含在排程引擎(如cron或Quartz)中。但是,如果正在尋找開箱即用的自動化工具,本節很適合你閱讀。

在本章的前半部分,我們研究了兩種可以將半結構化和二進位制資料轉換為HDFS的機制:開源HDFS File Slurper專案和Oozie,它們觸發了資料入口工作流程。使用本地檔案系統進行輸入(以及輸出)的挑戰是,在叢集上執行的map和reduce任務將無法訪問特定伺服器上的檔案系統,將資料從HDFS移動到檔案系統有三個廣泛的選擇:
在伺服器(例如Web伺服器)上託管agent,然後使用MapReduce將其寫入。
在MapReduce中寫入本地檔案系統,然後在後處理步驟中觸發遠端伺服器上的指令碼以移動該資料。
在遠端伺服器上執行程序以直接從HDFS提取資料。
第三種選擇是首選方法,因為最簡單且最有效,因此這是本節的重點。我們將瞭解如何使用HDFS File Slurper自動將檔案從HDFS移出到本地檔案系統。
從HDFS匯出檔案的自動機制
假設有MapReduce用HDFS編寫的檔案,你想要將它們自動提取到本地檔案系統。任何Hadoop工具都不支援此類功能,因此必須檢視其他方法。
問題
自動將檔案從HDFS移動到本地檔案系統。
解決方案
HDFS檔案Slurper可用於將檔案從HDFS複製到本地檔案系統。
討論
這裡的目標是使用HDFS File Slurper專案(https://github.com/alexholmes/ hdfs-file-slurper)來協助自動化。我們在前文詳細介紹了HDFS File Slurper,請在繼續使用此技術之前閱讀該部分。
HDFS Slurper支援將資料從HDFS移動到本地目錄,我們需要做的就是翻轉源目錄和目標目錄,如Slurper配置檔案以下所示:
你會注意到,HDFS中不僅有源目錄,而且還有工作,完成和錯誤目錄。這是因為需要能夠在目錄之間自動移動檔案,而不會產生跨檔案系統複製的昂貴開銷。
總結

此時,你可能想知道如何觸發Slurper來複制剛剛使用MapReduce作業編寫的目錄。當MapReduce作業成功完成時,它會在作業輸出目錄中建立一個名為_SUCCESS的檔案。這似乎是啟動輸出程序將該內容複製到本地檔案系統的完美觸發器。事實證明,Oozie有一種機制可以在檢測到這些Hadoop檔案“成功”時觸發工作流程,但這裡的挑戰是Oozie執行的任何工作都是在MapReduce中執行的,所以它不能用於執行直接轉移。可以編寫自己的指令碼,輪詢HDFS以查詢已完成的目錄,然後觸發檔案複製過程。如果原始檔需要保持不變,那麼檔案複製過程可以是Slurper或簡單的hadoop fs -get命令。
大家可以多多關注哦,你的關注是我最大的動力
可以關注我的微信公眾號: 首席資料師 裡面有很多關於大資料的乾貨