Hadoop數(shù)據(jù)文件的生成方法與解析方法
【技術領域】
[0001]本發(fā)明涉及信息技術行業(yè)數(shù)據(jù)庫技術領域,尤其涉及一種Hadoop數(shù)據(jù)文件的生成方法與解析方法。
【背景技術】
[0002]在當今大數(shù)據(jù)背景下,產生了多種各樣的大數(shù)據(jù)處理工具,Apache Hadoop就是其中之一。它是一個Apache基金會的頂級開源項目,已被廣泛應用于需要處理大數(shù)據(jù)的項目和系統(tǒng)中。
[0003]HadoopMapreduce是Hadoop處理數(shù)據(jù)的框架模型,其通過mapreduce編程,讀取海量數(shù)據(jù),并將每條數(shù)據(jù)中具有相同鍵值的數(shù)據(jù)進行歸類處理。在mapreduce編程時需要指定兩個重要參數(shù):一為mapred.1nput, dir,用于指定數(shù)據(jù)源文件的地址;二為mapreduce.1nputformat.class,用于解析數(shù)據(jù)文件中的每條數(shù)據(jù)記錄。
[0004]Hadoopmapreduce在處理數(shù)據(jù)時,會將輸入數(shù)據(jù)文件中的數(shù)據(jù)按行進行讀取,并將這行數(shù)據(jù)輸入至mapreduce程序處理,mapreduce程序根據(jù)一行數(shù)據(jù)和指定的列分割符,將這一行的數(shù)據(jù)解析成一個字符串數(shù)組,通過數(shù)組下標來獲取指定數(shù)據(jù),如行數(shù)據(jù)為:a|b|c,列分割符為“ I ”,則行數(shù)據(jù)在被解析后即為一個數(shù)組,如:Str[2] { “a”,”b”,”c”},其取值方式為第一列為Str [O]的值a,第二列為Str [I]的值b,第三列為Str [2]的值c
[0005]由于需要在mapreduce計算時把輸入的每行數(shù)據(jù)解析成數(shù)組,并需要指定數(shù)組下標來獲取對應數(shù)據(jù),這樣就容易導致開發(fā)人員在編碼時需要了解這行數(shù)據(jù)的列偏移量及其實際含義,這容易導致設置錯誤數(shù)組下標,讀取錯位數(shù)據(jù),導致程序錯誤,程序開發(fā)效率降低,同時造成程序代碼晦澀難懂。
[0006]同時,當輸入文件中包含多種數(shù)據(jù)類型,即存在列數(shù)不同的異構數(shù)據(jù)或列數(shù)相同但數(shù)據(jù)類型不同的數(shù)據(jù)時,如數(shù)據(jù)類型A的行值為a I b I c,數(shù)據(jù)類型B的行值a | b | c | d | e,或兩種數(shù)據(jù)A、B的行值均表現(xiàn)為a|b|c,但實際業(yè)務含義不同。由于無法通過解析后的數(shù)組長度唯一識別其數(shù)據(jù)類型,導致mapreduce程序對多數(shù)據(jù)源輸入的支持較弱。
【發(fā)明內容】
[0007](一 )要解決的技術問題
[0008]鑒于上述技術問題,本發(fā)明提供了一種Hadoop數(shù)據(jù)文件的生成方法與解析方法,以提高數(shù)據(jù)的可識別性,進而提高程序開發(fā)效率和程序代碼的可讀性,同時提高mapreduce程序對多數(shù)據(jù)源輸入的支持。
[0009]( 二)技術方案
[0010]根據(jù)本發(fā)明的一個方面,提供了一種Hadoop數(shù)據(jù)文件的生成方法。該Hadoop數(shù)據(jù)文件的生成方法包括:
[0011]步驟1,應用程序在輸出Hadoop數(shù)據(jù)對象時,根據(jù)Hadoop數(shù)據(jù)對象的類型,在Hadoop數(shù)據(jù)對象中添加標簽數(shù)據(jù);
[0012]步驟2,根據(jù)一個或多個Hadoop數(shù)據(jù)對象,生成一個Hadoop數(shù)據(jù)文件,其中,每個Hadoop數(shù)據(jù)對象作為Hadoop數(shù)據(jù)文件的一行,并且標簽數(shù)據(jù)為該行Hadoop數(shù)據(jù)對象中的一列。
[0013]根據(jù)本發(fā)明的一個方面,提供了一種Hadoop數(shù)據(jù)文件的解析方法。該Hadoop數(shù)據(jù)文件的解析方法包括:
[0014]SI,通過mapreduce程序獲取Hadoop數(shù)據(jù)文件的每行數(shù)據(jù);
[0015]S2,將每行數(shù)據(jù)封裝到一個實體對象中;
[0016]S3,通過函數(shù)獲取實體對象中封裝的每列數(shù)據(jù)。
[0017](三)有益效果
[0018]從上述技術方案可以看出,本發(fā)明Hadoop數(shù)據(jù)文件的生成與解析方法中,在數(shù)據(jù)行中增加了對應數(shù)據(jù)類型的標簽數(shù)據(jù),并針對不同的數(shù)據(jù)類型,在mapreduce配置信息中指定其列信息,通過提供實體對象Tag屬性即可獲知此數(shù)據(jù)類型并根據(jù)列名獲取數(shù)據(jù),從而具有以下有益效果:
[0019](I)編程人員可以根據(jù)該標簽數(shù)據(jù)和列名信息進行編程,而不用直接設置數(shù)組下標,提高了程序開發(fā)效率和程序代碼的可讀性;
[0020](2)處理相關數(shù)據(jù)行時,通過標簽數(shù)據(jù)識別數(shù)據(jù)行的類型,從而可在一個mapreduce程序中處理多種數(shù)據(jù),提高了 mapreduce程序對多數(shù)據(jù)源輸入的支持。
【附圖說明】
[0021]圖1為根據(jù)本發(fā)明實施例Hadoop數(shù)據(jù)文件的生成方法的流程圖;
[0022]圖2為根據(jù)本發(fā)明實施例Hadoop數(shù)據(jù)文件的解析方法的流程圖;
【具體實施方式】
[0023]本發(fā)明提供一種Hadoop數(shù)據(jù)文件的生成方法,應用程序在輸出一行Hadoop數(shù)據(jù)對象時,根據(jù)Hadoop數(shù)據(jù)對象的類型,在Hadoop數(shù)據(jù)對象中添加一列標簽數(shù)據(jù),根據(jù)一個或多個Hadoop數(shù)據(jù)對象,生成一個Hadoop數(shù)據(jù)文件。此Hadoop數(shù)據(jù)文件提高了數(shù)據(jù)的可識別性,進而提高程序開發(fā)效率和程序代碼的可讀性,同時提高mapreduce程序對多數(shù)據(jù)源輸入的支持。
[0024]本發(fā)明還提供一種Hadoop數(shù)據(jù)文件的解析方法,通過mapreduce程序獲取Hadoop數(shù)據(jù)文件的每列數(shù)據(jù),并封裝到一個實體對象中,得到多個實體對象,通過函數(shù)獲取實體對象中封裝的每列數(shù)據(jù)。
[0025]在一種實施方式中,在mapreduce程序的配置信息中,指定每種數(shù)據(jù)類型對應的列信息,其中,列信息包括一列或多列數(shù)據(jù)的列順序和每列數(shù)據(jù)的列名信息;根據(jù)列信息,獲取Hadoop數(shù)據(jù)文件的每列數(shù)據(jù)。
[0026]在一種實施方式中,實體對象包括一個Map對象及一個Tag屬性,其中,將每列數(shù)據(jù)分別封裝到一個實體對象中包括:將標簽數(shù)據(jù)賦予Tag屬性,將其他列的數(shù)據(jù)及其對應的列名信息寫入到Map對象。
[0027]在一種實施方式中,根據(jù)實體對象的Tag屬性,獲取Hadoop數(shù)據(jù)文件的數(shù)據(jù)類型,根據(jù)Hadoop數(shù)據(jù)文件的數(shù)據(jù)類型,將與該數(shù)據(jù)類型對應的列名信息輸入至函數(shù)中,獲取列名信息對應的數(shù)據(jù)。
[0028]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明白,以下結合具體實施例,并參照附圖,對本發(fā)明進一步詳細說明。
[0029]在本發(fā)明的一個實例中,提供了一種Hadoop數(shù)據(jù)文件的生成方法。圖1為根據(jù)本發(fā)明實施例Hadoop數(shù)據(jù)文件生成方法的流程圖,如圖1所示,方法包括:
[0030]步驟1,應用程序在生成數(shù)據(jù)文件時,讀取數(shù)據(jù)文件中的每行Hadoop數(shù)據(jù),識別出每行Hadoop數(shù)據(jù)的數(shù)據(jù)類型,其中,每行Hadoop數(shù)據(jù)包含有一列或多列數(shù)據(jù);
[0031]步驟2,根據(jù)每行Hadoop數(shù)據(jù)的數(shù)據(jù)類型,在每行Hadoop數(shù)據(jù)中添加一列標簽數(shù)據(jù),以對應生成一個Hadoop