一種基于hdfs的小文件合并工具和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,特別涉及一種基于HDFS的小文件合并工具和方法。
【背景技術(shù)】
[0002]分布式文件系統(tǒng)(Hadoop,HDFS)由一個(gè)NameNode和若干個(gè)DataNode組成,是集群的重要組成部分,憑借其可靠、高效、可伸縮的特性在大規(guī)模計(jì)算領(lǐng)域得到了廣泛應(yīng)用。由于NameNode把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存的block中,雖然每一個(gè)小文件的大小遠(yuǎn)遠(yuǎn)小于一個(gè)block的大小,但是,每一個(gè)小文件均需占用一個(gè)block,每個(gè)block的存儲(chǔ)約占150byte,那么,如果有10000000個(gè)小文件,則namenode大約需要2G內(nèi)存空間。如果存儲(chǔ)I億個(gè)文件,則namenode需要20G內(nèi)存空間,同時(shí),HDFS對(duì)小文件的訪問(wèn)過(guò)程,需要不斷的從一個(gè)小文件跳轉(zhuǎn)到另外一個(gè)小文件,那么,隨著HDFS中存儲(chǔ)的小文件數(shù)量的增加,導(dǎo)致文件處理的效率降低。
【發(fā)明內(nèi)容】
[0003]本發(fā)明提供一種基于HDFS的小文件合并工具和方法,能夠有效的提高文件處理的效率。
[0004]一種基于HDFS的小文件合并工具,應(yīng)用于集群中能夠與HDFS包含的各個(gè)節(jié)點(diǎn)交互信息的服務(wù)器,包括:
[0005]設(shè)置單元,用于設(shè)置小文件合并規(guī)則;
[0006]生成目錄單元,用于確定目錄參數(shù),并根據(jù)所述目錄參數(shù),生成輸入/輸出目錄;
[0007]傳輸單元,用于設(shè)置小文件閾值,并根據(jù)所述小文件閾值,確定所述外設(shè)的各個(gè)節(jié)點(diǎn)中的小文件,并將確定的小文件存儲(chǔ)到所述生成目錄單元生成的所述輸入目錄中;
[0008]讀取合并單元,用于遍歷所述輸入目錄,并讀取所述輸入目錄中符合所述設(shè)置單元設(shè)置的合并規(guī)則的至少兩個(gè)小文件,將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件,并將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述生成目錄單元生成的輸出目錄中。
[0009]優(yōu)選地,所述設(shè)置單元,進(jìn)一步用于設(shè)定合并時(shí)間周期;
[0010]所述讀取合并單元,用于當(dāng)達(dá)到所述設(shè)置單元設(shè)定的合并時(shí)間周期時(shí),執(zhí)行所述遍歷所述輸入目錄,并讀取所述輸入目錄中符合所述設(shè)置單元設(shè)置的合并規(guī)則的至少兩個(gè)小文件。
[0011]優(yōu)選地,該小文件合并工具,進(jìn)一步包括:添加單元,其中,
[0012]所述添加單元,用于為所述傳輸單元確定的小文件中的每一條目標(biāo)數(shù)據(jù)添加字符識(shí)別碼;
[0013]所述傳輸單元,用于將所述包含所述字符識(shí)別碼的小文件存儲(chǔ)到所述生成目錄單元生成的所述輸入目錄中;
[0014]所述讀取合并單元,用于識(shí)別所述至少兩個(gè)小文件中的每一條數(shù)據(jù),將具有所述字符識(shí)別碼的每一條目標(biāo)數(shù)據(jù)合并到至少一個(gè)數(shù)據(jù)文件,并將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述生成目錄單元生成的輸出目錄中。
[0015]優(yōu)選地,小文件合并工具,進(jìn)一步包括:驗(yàn)證單元,其中,
[0016]所述讀取合并單元,進(jìn)一步用于當(dāng)所述至少兩個(gè)小文件中的目標(biāo)數(shù)據(jù)完全合并到所述至少一個(gè)數(shù)據(jù)文件中時(shí),為所述至少一個(gè)數(shù)據(jù)文件生成對(duì)應(yīng)的part_000.txt文件和_success.txt 文件;
[0017]所述驗(yàn)證單元,用于驗(yàn)證所述讀取合并單元合并的至少一個(gè)數(shù)據(jù)文件中當(dāng)前數(shù)據(jù)文件是否具有對(duì)應(yīng)的part_000.txt文件和_success.txt文件,如果是,則確定所述當(dāng)前數(shù)據(jù)文件合并成功,并將所述該當(dāng)前數(shù)據(jù)文件對(duì)應(yīng)的所述外設(shè)的各個(gè)節(jié)點(diǎn)中的小文件刪除。
[0018]優(yōu)選地,所述傳輸單元,用于:
[0019]為所述外設(shè)的各個(gè)節(jié)點(diǎn)傳輸系統(tǒng)文件,設(shè)置小文件閾值5s和2M,當(dāng)當(dāng)前系統(tǒng)文件傳輸時(shí)間小于5s時(shí),確定該當(dāng)前系統(tǒng)文件為小文件,或者,當(dāng)當(dāng)前系統(tǒng)文件大小小于2M時(shí),確定該當(dāng)前系統(tǒng)文件為小文件。
[0020]一種基于HDFS的小文件合并方法,應(yīng)用于集群中能夠與HDFS包含的各個(gè)節(jié)點(diǎn)交互信息的服務(wù)器,包括:
[0021 ]設(shè)置小文件合并規(guī)則和小文件閾值;
[0022]確定目錄參數(shù),并根據(jù)所述目錄參數(shù),生成輸入/輸出目錄;
[0023]根據(jù)所述小文件閾值,確定所述各個(gè)節(jié)點(diǎn)中的小文件,并將確定的小文件存儲(chǔ)到所述輸入目錄中;
[0024]遍歷所述輸入目錄,并讀取所述輸入目錄中符合所述合并規(guī)則的至少兩個(gè)小文件,將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件,并將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述輸出目錄中。
[0025]優(yōu)選地,該方法進(jìn)一步包括:設(shè)定合并時(shí)間周期;
[0026]所述遍歷所述輸入目錄,包括:當(dāng)達(dá)到所述合并時(shí)間周期時(shí),執(zhí)行所述遍歷所述輸入目錄。
[0027]優(yōu)選地,所述小文件閾值為5s和2M;
[0028]所述確定所述各個(gè)節(jié)點(diǎn)中的小文件,包括:為所述各個(gè)節(jié)點(diǎn)傳輸系統(tǒng)文件,當(dāng)當(dāng)前系統(tǒng)文件傳輸時(shí)間小于5s時(shí),確定該當(dāng)前系統(tǒng)文件為小文件,或者,當(dāng)當(dāng)前系統(tǒng)文件大小小于2M時(shí),確定該當(dāng)前系統(tǒng)文件為小文件。
[0029]優(yōu)選地,在所述確定所述各個(gè)節(jié)點(diǎn)中的小文件之后,在所述將確定的小文件存儲(chǔ)到所述輸入目錄中之前,進(jìn)一步包括:為所述小文件中的每一條目標(biāo)數(shù)據(jù)添加字符識(shí)別碼;
[0030]所述將確定的小文件存儲(chǔ)到所述輸入目錄中,包括:將所述包含所述字符識(shí)別碼的小文件存儲(chǔ)到所述輸入目錄中。
[0031]優(yōu)選地,在所述讀取所述輸入目錄中符合所述合并規(guī)則的至少兩個(gè)小文件之后,在所述將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件之前,包括:識(shí)別所述至少兩個(gè)小文件中的每一條數(shù)據(jù);
[0032]所述將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件,包括:將具有所述字符識(shí)別碼的每一條目標(biāo)數(shù)據(jù)合并到至少一個(gè)數(shù)據(jù)文件。
[0033]優(yōu)選地,在所述將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件之后,在所述將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述輸出目錄中之前,進(jìn)一步包括:為所述至少一個(gè)數(shù)據(jù)文件生成對(duì)應(yīng)的part_000.txt文件和_success.txt文件;
[0034]所述將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述輸出目錄中,包括:將所述至少一個(gè)數(shù)據(jù)文件、對(duì)應(yīng)的part_000.txt文件和_success.txt文件存儲(chǔ)到所述輸出目錄中;
[0035]在所述將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述輸出目錄中之后,進(jìn)一步包括:驗(yàn)證所述至少一個(gè)數(shù)據(jù)文件中當(dāng)前數(shù)據(jù)文件是否具有對(duì)應(yīng)的part_000.txt文件和_success.txt文件,如果是,則確定所述當(dāng)前數(shù)據(jù)文件合并成功,并將所述該當(dāng)前數(shù)據(jù)文件對(duì)應(yīng)的各個(gè)節(jié)點(diǎn)中的小文件刪除。
[0036]本發(fā)明實(shí)施例提供了一種基于HDFS的小文件合并工具和方法,該小文件合并工具,應(yīng)用于集群中能夠與HDFS包含的各個(gè)節(jié)點(diǎn)交互信息的服務(wù)器,包括:設(shè)置單元,用于設(shè)置小文件合并規(guī)則,通過(guò)設(shè)置單元能夠根據(jù)客戶需求合并小文件;生成目錄單元,用于確定目錄參數(shù),并根據(jù)所述目錄參數(shù),生成輸入/輸出目錄,以為小文件和生成的數(shù)據(jù)文件指定存儲(chǔ)目錄,方便對(duì)于小文件和數(shù)據(jù)文件的查找和定位;傳輸單元,用于設(shè)置小文件閾值,并根據(jù)所述小文件閾值,確定所述外設(shè)的各個(gè)節(jié)點(diǎn)中的小文件,并將確定的小文件存儲(chǔ)到所述生成目錄單元生成的所述輸入目錄中;讀取合并單元,用于遍歷所述輸入目錄,并讀取所述輸入目錄中符合所述設(shè)置單元設(shè)置的合并規(guī)則的至少兩個(gè)小文件,將所述至少兩個(gè)小文件合并為至少一個(gè)數(shù)據(jù)文件,并將所述至少一個(gè)數(shù)據(jù)文件存儲(chǔ)到所述生成目錄單元生成的輸出目錄中,實(shí)現(xiàn)了將小文件合并,減少了小文件對(duì)節(jié)點(diǎn)內(nèi)存的占用,同時(shí),避免了訪問(wèn)小文件過(guò)程的頻繁跳轉(zhuǎn),因此,能夠有效地提高文件處理的效率。
【附圖說(shuō)明】
[0037]圖1為本發(fā)明實(shí)施例提供的一種基于HDFS的小文件合并工具的結(jié)構(gòu)示意圖;
[0038]圖2為本發(fā)明另一實(shí)施例提供的一種基于HDFS的小文件合并工具的結(jié)構(gòu)示意圖;
[0039]圖3為本發(fā)明實(shí)施例提供的一種基于HDFS的小文件合并方法的流程圖;
[0040]圖4為本發(fā)明另一實(shí)施例提供的一種基于HDFS的小文件合并方法的流程圖。
【具體實(shí)施方式】
[0041]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0042]如圖1所示,本發(fā)明實(shí)施例提供一種基于HDFS的小文件合并工具,應(yīng)用于集群中能夠與HDFS包含的各個(gè)節(jié)點(diǎn)交互信息的服務(wù)器,包括:
[0043]設(shè)置單元101,用于設(shè)置小文件合并規(guī)則;
[0044]生成目錄單元102,用于確定目錄參數(shù),并根據(jù)目錄參數(shù),生成輸入/輸出目錄;
[0045]傳輸單元103,用于設(shè)置