本發(fā)明涉及大數(shù)據(jù)處理的技術(shù)領(lǐng)域,尤其涉及一種表外文件數(shù)據(jù)的求交集方法,以及表外文件數(shù)據(jù)的求交集系統(tǒng)。
背景技術(shù):
hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進行運行。其優(yōu)點是學(xué)習(xí)成本低,可以通過類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計,不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析。
hive的hql(hive定義了簡單的類sql查詢語言,稱為hql,它允許熟悉sql的用戶查詢數(shù)據(jù)。同時,這個語言也允許熟悉MapReduce開發(fā)者的開發(fā)自定義的mapper和reducer來處理內(nèi)建的mapper和reducer無法完成的復(fù)雜的分析工作。)提供了基于表字段的join(求交集)方法,只需要寫個簡單hql就可以滿足大部分的join需求。但是join之前需要建表。這種方法不能處理表外文件,必須將要join(求交集)的數(shù)據(jù)放到表中才可以。
技術(shù)實現(xiàn)要素:
為克服現(xiàn)有技術(shù)的缺陷,本發(fā)明要解決的技術(shù)問題是提供了一種表外文件數(shù)據(jù)的求交集方法,其解決了hive的hql不能直接對表外的格式化數(shù)據(jù)直接進行join的問題,操作簡單方便。
本發(fā)明的技術(shù)方案是:這種表外文件數(shù)據(jù)的求交集方法,該方法的基礎(chǔ)框架是Hadoop streaming,且包括以下步驟:
(1)開始;
(2)檢查輸入的參數(shù)是否合法,是則執(zhí)行步驟(3),否則執(zhí)行步驟(11);
(3)對每個文件路徑,檢查其是否位于hdfs,是則執(zhí)行步驟(6),否則執(zhí)行步驟(4);
(4)檢查該路徑是否位于本地,是則執(zhí)行步驟(5),否則執(zhí)行步驟(11);
(5)將本地路徑下的文件上推到hdfs的一個臨時目錄下;
(6)從兩份數(shù)據(jù)中分別抽取樣本檢查其字段分割符和每一行數(shù)據(jù)的字段個數(shù);
(7)如果用戶沒有指定輸出列表,則生成一個包含兩份數(shù)據(jù)的所有字段的輸出列表,如果用戶沒有指定輸出路徑,生成一個臨時目錄;
(8)判斷輸出列表是否超出字段的范圍,是則執(zhí)行步驟(9),否則執(zhí)行步驟(11);
(9)根據(jù)檢測的各項參數(shù)提交一個用戶自定義的mapreduce任務(wù);
(10)求交集結(jié)果;
(11)退出。
本發(fā)明無需建表就能直接join位于本地或者hdfs上的任何兩份數(shù)據(jù),因此解決了hive的hql不能直接對表外的格式化數(shù)據(jù)直接進行join的問題;本發(fā)明只需要三個參數(shù),一鍵完成,因此操作簡單方便。
還提供了一種表外文件數(shù)據(jù)的求交集系統(tǒng),該系統(tǒng)包括:
輸入?yún)?shù)檢查模塊,其配置來檢查輸入的參數(shù)是否合法;
hdfs路徑檢查模塊,其配置來對每個文件路徑,檢查其是否位于hdfs;
本地路徑檢查模塊,其配置來檢查路徑是否位于本地;
文件上推模塊,其配置來將本地路徑下的文件上推到hdfs的一個臨時目錄下;
抽樣模塊,其配置來從兩份數(shù)據(jù)中分別抽取樣本檢查其字段分割符和每一行數(shù)據(jù)的字段個數(shù);
列表輸出模塊,其配置為:如果用戶沒有指定輸出列表,則生成一個包含兩份數(shù)據(jù)的所有字段的輸出列表,如果用戶沒有指定輸出路徑,生成一個臨時目錄;
列表檢查模塊,其配置來判斷輸出列表是否超出字段的范圍;
任務(wù)提交模塊,其配置來根據(jù)檢測的各項參數(shù)提交一個用戶自定義的mapreduce任務(wù);
計算模塊,其配置來求交集結(jié)果。
附圖說明
圖1所示為根據(jù)本發(fā)明的表外文件數(shù)據(jù)的求交集方法的流程圖。
具體實施方式
如圖1所示,這種表外文件數(shù)據(jù)的求交集方法,該方法的基礎(chǔ)框架是Hadoop streaming,且包括以下步驟:
(1)開始;
(2)檢查輸入的參數(shù)是否合法,是則執(zhí)行步驟(3),否則執(zhí)行步驟(11);
(3)對每個文件路徑,檢查其是否位于hdfs,是則執(zhí)行步驟(6),否則執(zhí)行步驟(4);
(4)檢查該路徑是否位于本地,是則執(zhí)行步驟(5),否則執(zhí)行步驟(11);
(5)將本地路徑下的文件上推到hdfs的一個臨時目錄下;
(6)從兩份數(shù)據(jù)中分別抽取樣本檢查其字段分割符和每一行數(shù)據(jù)的字段個數(shù);
(7)如果用戶沒有指定輸出列表,則生成一個包含兩份數(shù)據(jù)的所有字段的輸出列表,如果用戶沒有指定輸出路徑,生成一個臨時目錄;
(8)判斷輸出列表是否超出字段的范圍,是則執(zhí)行步驟(9),否則執(zhí)行步驟(11);
(9)根據(jù)檢測的各項參數(shù)提交一個用戶自定義的mapreduce任務(wù);
(10)求交集結(jié)果;
(11)退出。
本發(fā)明無需建表就能直接join位于本地或者hdfs上的任何兩份數(shù)據(jù),因此解決了hive的hql不能直接對表外的格式化數(shù)據(jù)直接進行join的問題;本發(fā)明只需要三個參數(shù),一鍵完成,因此操作簡單方便。
另外,所述步驟(2)中,輸入的參數(shù)至少包括三個參數(shù):有且僅有兩個文件路徑和一個where條件。
另外,該方法的輸入文件是兩份數(shù)據(jù),每一份數(shù)據(jù)是目錄或者文件,每一份數(shù)據(jù)內(nèi)只有一種分割符。
另外,所述兩份數(shù)據(jù)的分隔符是不同的。
或者,所述兩份數(shù)據(jù)的分隔符是相同的。
本領(lǐng)域普通技術(shù)人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,包括上述實施例方法的各步驟,而所述的存儲介質(zhì)可以是:ROM/RAM、磁碟、光盤、存儲卡等。因此,與本發(fā)明的方法相對應(yīng)的,本發(fā)明還同時包括一種表外文件數(shù)據(jù)的求交集系統(tǒng),該系統(tǒng)通常以與方法各步驟相對應(yīng)的功能模塊的形式表示。使用該方法的系統(tǒng)包括:
輸入?yún)?shù)檢查模塊,其配置來檢查輸入的參數(shù)是否合法;
hdfs路徑檢查模塊,其配置來對每個文件路徑,檢查其是否位于hdfs;
本地路徑檢查模塊,其配置來檢查路徑是否位于本地;
文件上推模塊,其配置來將本地路徑下的文件上推到hdfs的一個臨時目錄下;
抽樣模塊,其配置來從兩份數(shù)據(jù)中分別抽取樣本檢查其字段分割符和每一行數(shù)據(jù)的字段個數(shù);
列表輸出模塊,其配置為:如果用戶沒有指定輸出列表,則生成一個包含兩份數(shù)據(jù)的所有字段的輸出列表,如果用戶沒有指定輸出路徑,生成一個臨時目錄;
列表檢查模塊,其配置來判斷輸出列表是否超出字段的范圍;
任務(wù)提交模塊,其配置來根據(jù)檢測的各項參數(shù)提交一個用戶自定義的mapreduce任務(wù);
計算模塊,其配置來求交集結(jié)果。
另外,所述輸入?yún)?shù)檢查模塊中,輸入的參數(shù)至少包括三個參數(shù):有且僅有兩個文件路徑和一個where條件。
本發(fā)明實現(xiàn)方案的具體過程如下:
1、基礎(chǔ)框架(Framework)
Hadoop streaming
2、各模塊結(jié)構(gòu)(Modules)
●無
3、約定和規(guī)范
●輸入文件必須是兩份數(shù)據(jù)不能是兩份以上數(shù)據(jù),每一份數(shù)據(jù)可以是目錄或者文件
●每一份數(shù)據(jù)內(nèi)只能用一種分割符。
●兩份數(shù)據(jù)的分隔符可以不同。
4、格式化參數(shù)(Params)
●輸入(in):
√Input files:要join的兩份數(shù)據(jù),只能是兩份數(shù)據(jù)不能多或者少。必選參數(shù)
√Where condition:join的條件,必選參數(shù)
√Output list:輸出列表,用戶指定的輸出字段,可選參數(shù),默認輸出join到的兩份數(shù)據(jù)中的所有字段。
√Output dir:輸出目錄,可選參數(shù),默認自動生成。
●輸出(out):
√Join的結(jié)果
5、編碼實現(xiàn)(Programs)
●Coding:按照流程圖編寫所需要的檢測腳本、mapper、reducer
6、構(gòu)建部署(Build)
●Ubuntu12.04.4
●Hadoop2.4
●Python2.6
本發(fā)明的有益效果如下:
1.無需建表就能直接join位于本地或者hdfs上的任何兩份數(shù)據(jù)。
2.只需要三個參數(shù),一鍵完成。
以上所述,僅是本發(fā)明的較佳實施例,并非對本發(fā)明作任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬本發(fā)明技術(shù)方案的保護范圍。