合並小文件spark開發


歷時一個星期的討論與開發,終於得出了一個合並小文件的雛形。

作為一個開發新生代,實屬不易,發布出來與大家共勉。

思路:

這個思路是我與一個大佬一起完成的。接到合並小文件的任務以后,我們開始再網上各種找資料,跟朋友溝通學習。其中在網上找到了一篇博客寫的很好:

https://www.cnblogs.com/heguoxiu/p/10691019.html   這篇博客已經很完善了,但是我們后邊並沒有完全按照他的思路來,其中他這里邊缺少了校驗的過程,就是小文件合並以后對文件條數的校驗

* 合並文件
* 合並步驟:
* 1. 將小文件目錄(srcDataPath)下的文件移動到臨時目錄/mergePath/${mergeTime}/src
* 2. 計算臨時目錄(/mergePath/${mergeTime}/src)的大小。 根據大小確定分區的數。
* 3. 使用coalesce或者repartition, 傳入分區數。 將臨時目錄數據寫入臨時的數據目錄(/mergePath/${mergeTime}/data)

*4.校驗srcDataPath目錄下數據條數和/mergePath/${mergeTime}/src目錄下的條數是否一致,如若一致那么進行步驟5,6,否則,將小文件原封不動的放回去
* 5. 將臨時數據目錄文件move到文件目錄(srcDataPath)
* 6. 刪除臨時目錄(/merge/tmp)

 

以上這個思路是第一版,后來考慮到一個問題就是如果我們把小文件移動到臨時目錄的時候,那段時間這個目錄對應的表是無法查詢的,為了避免這個問題,我們沒有選擇移動文件,而是選擇了通過read讀取文件,轉成DF,然后再把DF寫入一個臨時目錄,這樣就不會出現合並目錄對應的表無法查詢的問題了。

h

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM