1. 程式人生 > >Hadoop IO操作之基於文件的數據結構

Hadoop IO操作之基於文件的數據結構

定時任務 二進制 包括 大數據文件 組成 key 上傳 刪除 大小

  HDFS和MR主要針對大數據文件來設計,在小文件處理上效率低.解決方法是選擇一個容器,將這些小文件包裝起來,將整個文件作為一條記錄,可以獲取更高效率的儲存和處理,避免多次打開關閉流耗費計算資源.hdfs提供了兩種類型的容器 SequenceFile和MapFile。
小文件問題的解決方案:

  在原有HDFS基礎上添加一個小文件處理模塊,具體操作流程如下:
  -當用戶上傳文件時,判斷該文件是否屬於小文件,如果是,則交給小文件處理模塊處理,否則,交給通用文件處理模塊處理。在小文件模塊中開啟一定時任務,其主要功能是當模塊中文件總size大於HDFS上block大小的文件時,則通過SequenceFile組件以文件名做key,相應的文件內容為value將這些小文件一次性寫入hdfs模塊。
  -同時刪除已處理的文件,並將結果寫入數據庫。
  -當用戶進行讀取操作時,可根據數據庫中的結果標誌來讀取文件。

  Sequence file由一系列的二進制key/value組成,如果key為小文件名,value為文件內容,則可以將大批小文件合並成一個大文件。Hadoop-0.21.0版本開始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter類進行寫,讀和排序操作。該方案對於小文件的存取都比較自由,不限制用戶和文件的多少,支持Append追加寫入,支持三級文檔壓縮(不壓縮、文件級、塊級別)。其存儲結構如下圖所示:


  技術分享圖片

  後面會專門對Sequence file 和 Mapfile做分析。

Hadoop IO操作之基於文件的數據結構