HDFS合併小檔案

2021-09-22 02:19:56 字數 1540 閱讀 9838

眾所周知,hdfs中過多的小檔案,會給namenode造成很大的壓力,所謂的小檔案,是指遠遠小於檔案塊大小的檔案。

在使用hdfs的過程中,應盡量避免生成過多的小檔案。

假設存放在本地的資料由很多個小檔案組成,需要上傳到hdfs。一般的做法是在本地使用指令碼、程式先把小檔案合併後再上傳。

假設本地有兩個小檔案1.txt和2.txt,裡面內容如下:

[liuxiaowen@dev ~]$ cat 1.txt

111111

111111

111111

111111

[liuxiaowen@dev ~]$ cat 2.txt

222222

222222

222222

222222

使用下面的命令,可以將1.txt和2.txt合併,並上傳到hdfs:

[liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/lxw1234.txt

111111

111111

111111

111111

222222

222222

222222

222222

假設在hdfs的/tmp/lxw1234/目錄下,有兩個小檔案1.txt和2.txt

[liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/1.txt

111111

111111

111111

111111

[liuxiaowen@dev ~]$ hadoop fs -cat /tmp/lxw1234/2.txt

222222

222222

222222

222222

使用下面的命令:

[liuxiaowen@dev ~]$ hadoop fs -getmerge hdfs://cdh5/tmp/lxw1234/*.txt local_largefile.txt

[liuxiaowen@dev ~]$ cat local_largefile.txt

111111

111111

111111

111111

222222

222222

222222

222222

如果需要合併hdfs上的某個目錄下有很多小檔案,可以嘗試使用下面的命令:

[liuxiaowen@dev ~]$ hadoop fs -cat hdfs://cdh5/tmp/hdfs_largefile.txt

111111

111111

111111

111111

222222

222222

222222

222222

注意:這種處理方法在資料量非常大的情況下可能不太適合,最好使用mapreduce來合併。

**:合併hdfs和本地檔案系統中的小檔案

HDFS的小檔案合併成大檔案

前提 在實際專案中,輸入資料往往是由許多小檔案組成,這裡的小檔案是指小於hdfs系統block大小的檔案 預設128m 然而每乙個儲存在hdfs中的檔案 目錄和塊都對映為乙個物件,儲存在namenode伺服器記憶體中,通常占用150個位元組。由於hadoop擅長儲存大檔案,因為大檔案的元資料資訊比較...

HDFS的API操作 小檔案的合併

由於 hadoop 擅長儲存大檔案,因為大檔案的元資料資訊比較少,如果 hadoop 集群當中有大量的小檔案,那麼每個小檔案都需要維護乙份元資料資訊,會大大的增加集群管理元資料的記憶體壓力,所以在實際工作當中,如果有必要一定要將小檔案合併成大檔案進行一起處理 cd export servers hd...

HDFS9 小檔案合併

由於hadoop擅長儲存大檔案,因為大檔案的元資料資訊比較少,如果hadoop集群當中有大量的小檔案,那麼每個小檔案都需要維護乙份元資料資訊,會大大的增加集群管理元資料的記憶體壓力,所以在實際工作當中,如果有必要一定要將小檔案合併成大檔案進行一起處理。cd export servers hdfs d...