国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種QL腳本的解析模塊的分析研究

2014-08-14 16:52陳浩
電腦知識與技術(shù) 2014年19期

摘要:作為MapReduce系統(tǒng)的核心組件的腳本解析模塊,它是分布式云計算平臺實現(xiàn)的基礎。該模塊的實現(xiàn)是基于腳本編程接口,在此過程中使用的語言是QL(Query Language)。QL腳本通過腳本解析模塊實現(xiàn)解析之后,事件執(zhí)行模塊則由參數(shù)通過配置事件的方式一一實現(xiàn)。下面就這種腳本語言的實現(xiàn)過程作了詳細的分析。

關(guān)鍵詞:MapReduce;腳本解析;QL;事件配置

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)19-4361-03

An Analysis of Parsing Module QL Script

CHEN Hao

(Guangdong Technical College of Water Resources and Electric Engineering, Computer Information Engineering, Guangzhou 510925, China)

Abstract:MapReduce system as a core component of the script parsing module, which is the basis for a distributed cloud computing platform implementation. The module is based on the realization scripting interface, the language used in this process is QL (Query Language). After the QL script by script parsing module for parsing, event execution module configured by the parameters of events come true. The following detailed analysis of the implementation process of this scripting language.

Key words:MapReduce; script parsing; QL; event configuration

1 QL腳本的設計理念

QL腳本在設計方面,充分考慮了與現(xiàn)有數(shù)據(jù)庫查詢語言SQL相結(jié)合的特點,QL腳本無疑可以被看作是對數(shù)據(jù)庫查詢語句SQL的一種轉(zhuǎn)型和衍生?;趯ΜF(xiàn)有技術(shù)的可擴展性和覆蓋性分析,使用QL腳本來定義關(guān)鍵詞的過程能夠適應市場上各種網(wǎng)絡流量統(tǒng)計的不同類型,當然必須對設計過程中對關(guān)鍵詞的靈活擴展性作以充分性的考慮,以便于后期對QL腳本的擴容升級,更好的支撐云計算平臺的綜合應用。

2 QL腳本模塊的分析

QL腳本模塊解析可以分為以下幾大模塊:解析引擎(ScritEngine)、腳本語句解釋器(ScritParser)、比較運算模塊(Compare)、算術(shù)運算模塊(Arithmetic)、邏輯運算模塊(ExpressionEngine)、聚合運算模塊(Aggregate)、字段運算模塊(Field)、配置模塊(Configuration)等。圖1是QL腳本解析模塊的整體結(jié)構(gòu)圖。

QL腳本解析的實現(xiàn)過程如下:系統(tǒng)的入口為ScriptEngine,它的功能是讀取QL語言腳本,并將腳本逐行傳遞給腳本解析器。腳本解析器按照每行的QL語言腳本首字母對語句進行分類,根據(jù)不同語句的類別調(diào)用不同的解釋模塊對語句進行解析。語句解析逐行進行,如腳本中含有子句等其他復雜句型,腳本解析器會調(diào)用其他的處理模塊,如調(diào)用聚合運算模塊對腳本進行相應的處理。

3 配置文件的定義及解析過程

一個完整的QL語言腳本包括配置文件、原始數(shù)據(jù)文件、輸出結(jié)果保存位置和統(tǒng)計執(zhí)行語句。模塊在運行時,首先需要對配置文件進行解析以獲取數(shù)據(jù)格式,然后對輸入數(shù)據(jù)和輸出數(shù)據(jù)路徑進行解析,最后解析統(tǒng)計執(zhí)行語句,并將解析的命令傳遞給作業(yè)執(zhí)行模塊。

編寫QL語言腳本時,首先應指定配置文件,指明要處理的數(shù)據(jù)格式。配置文件的格式如下:列序號、名稱、描述、數(shù)據(jù)類型。根據(jù)配置文件中的格式,系統(tǒng)對輸入數(shù)據(jù)進行匹配,從而對指定列序號的數(shù)據(jù)進行操作。配置文件支持如下的關(guān)鍵詞:

表1 配置文件關(guān)鍵詞列表[關(guān)鍵字\&功能\&ResetColumn語句\&用于重新載入列配置文件,切換不同的配置文件\&createColumn語句\&用于創(chuàng)建一個新的配置文件,并載入這個配置文件\&AddColumn語句\&對當前的配置文件進行增加列的操作\&]

如上表所示,目前配置文件中共支持三個關(guān)鍵詞,分別為:ResetColumn用于重新載入列配置文件,可用于切換不同的配置文件。CreateColumn用于在當前腳本中創(chuàng)建一個新的配置文件。AddColumn對當前的配置文件進行增加列的操作。

4 關(guān)鍵詞解析

QL語言中的關(guān)鍵詞指的是在每一句QL腳本句首的單詞,每個語句的功能由此關(guān)鍵詞來確定,在解析時腳本解析模塊會根據(jù)該關(guān)鍵詞來進行下一步的判斷。目前QL語言支持的關(guān)鍵詞為:Process,Select,Count,CountD如下表所示。

表2 腳本關(guān)鍵詞列表

[分類\&關(guān)鍵字\&功能簡介\&分組聚合統(tǒng)計\&Process\&對各分組求集合函數(shù)值\&選擇字段\&Select\&選擇字段、字串、表達式輸出結(jié)果\&多重計算\&Count\&同時對多個邏輯表達式計數(shù)\&去重計算\&Countd\&對指定字段去重計算\&]

1) Process 語句endprint

功能介紹:提供統(tǒng)計各分組內(nèi)的聚合函數(shù)運算結(jié)果的功能。Process語句支持多種表達式,表達式中必須包含有函數(shù)。且支持多種子句:where 子句、groijpby 子句、order by 子句、tofile 子句,having 子句' limit 子句。

在腳本解析時,Process類接收以"Process"開頭的一行腳本,從后往前尋找各個子句,并將該行腳本切割為各個子句,創(chuàng)建子句解釋類的對象處理各個子句。Process語句腳本解析過程按照從后往前的順序解析子句。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方法,傳給作業(yè)執(zhí)行模塊。

2) Select 語句

功能介紹:用于選擇某列或多列輸出。提供選擇某個字段、多個字段四則運算或字段運算的功能。

Select語句類關(guān)系與Process的類似,按照從后往前的順序解析子句。Select語句支持多重輸出功能,語句中可通過花括號指定多重輸出條件和輸出文件名。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方式,傳入作業(yè)執(zhí)行模塊。

3) Count 語句

功能介紹:提供同時計數(shù)多個值的功能。

Count語句設計為同時計數(shù)多個值的功能。Count后可跟多個邏輯表達式,在一次讀取數(shù)據(jù)的同時,計數(shù)滿足各個表達式條件的記錄數(shù)。

4) CountD 語句

功能介紹:提供對指定字段的去重計數(shù)功能。

CountD語句支持where子句,group by子句和tofile子句。CoimtD語句的主要功能是以符合where指定條件的話單為對象,按照groipby分組,對CountD指定的字段進行去重計數(shù)。

以上的QL關(guān)鍵詞只是定義了該語句的功能范圍,實際統(tǒng)計的任務需要其他運算邏輯語句來組成更為復雜的操作。全部的關(guān)鍵詞都支持算術(shù)運算,包含加減乘除四種運算,并且可以使用括號定義運算優(yōu)先級。當沒有括號時,將從左到右進行計算,乘除運算優(yōu)先于加減運算。

5 事件執(zhí)行模塊

事件執(zhí)行模塊的功能是接收腳本解析模塊傳遞過來的參數(shù),根據(jù)參數(shù)選擇不同的Map和Reduce類,并配置和提交統(tǒng)計事件到Hadoop框架。事件執(zhí)行模塊內(nèi)的各模塊基本都遵循Hadoop的Map Reduce框架的接口定義。主要任含以下幾個模塊:輸入輸出模塊、Map模塊、Partition模塊、Combine模塊和Reduce模塊。

事件執(zhí)行過程示意圖如下:

圖2 事件執(zhí)行過程示意圖

每一行語句可解釋為一個可執(zhí)行的MapReduce的事件,事件執(zhí)行組件配置好事件后提交給Hadoop的JobTracker,由Hadoop的Map Reduce框架執(zhí)行事件,Map模塊讀取原始數(shù)據(jù)分塊,Partition模塊和Combine模塊對Map模塊輸出的統(tǒng)計結(jié)果進行合并處理,最后提交給Reduce模塊最終輸出至HDFS。

1) 輸入輸出模塊

輸入模塊負責讀入文件分片并將其分割成記錄,適用于讀取流記錄這種半結(jié)構(gòu)化文件。本模塊的輸入為網(wǎng)絡流量記錄文件,輸出為統(tǒng)計任務的鍵/值對,主鍵為本條記錄在文件中的字節(jié)偏移量,值為流量記錄值。本模塊只用于讀取半結(jié)構(gòu)化的文本文件,輸入模塊輸出的鍵/值對,通過引用傳遞給Map模塊。

輸出模塊根據(jù)指定的字段分隔符和行分隔符輸出結(jié)果。本模塊與輸入模塊類似,可以將記錄以行的形式存入文本文件中。其輸入為Reduce模塊產(chǎn)生的鍵/值對。輸出為最終結(jié)果文件,存儲在HDFS上。

2) Map 模塊

Map模塊的功能為從整條網(wǎng)絡流量記錄中取出指定字段,經(jīng)過提取、計算等操作后,產(chǎn)生鍵/值對,并將統(tǒng)計的初步結(jié)果寫到計算機本地磁盤。Map模塊繼承了 Hadoop框架的Map模塊,并根據(jù)處理的網(wǎng)絡流量記錄格式進行了一些定制。

根據(jù)統(tǒng)計功能的不同,目前系統(tǒng)包含如下兩個Map部件:GrovpMapper和CountMapper。GroipMapper用于處理分組后的集合統(tǒng)計,分組條件作為主鍵,Map端集合運算結(jié)果作為值進行輸出。CountMapper用于處理多重計數(shù)的統(tǒng)計需求。Map模塊的輸入為輸入模塊輸出的鍵/值對,Map模塊對相同的主鍵的鍵值進行合并處理后,輸出新的鍵/值對,鍵為分組的條件,值為該分組對應的值。

3) 數(shù)據(jù)分割模塊(Partition)

Partition模塊繼承了 Hadoop框架定義的Partition模塊。利用該模塊,系統(tǒng)將Map輸出的結(jié)果進行初步劃分,可以保證某一取值范圍的中間結(jié)果送到同一個Reduce任務中進行處理。劃分時采用對key進行hash運算的方式,在保證正確性的同時一定程度上簡化Reduce的過程。劃分的個數(shù)是由用戶自定義的Reduce任務的個數(shù)。

4) 數(shù)據(jù)合并模塊(Combine)

Combine模塊用于計算機本地中間文件的合并。該模塊通常運行在Reduce操作前,對之前模塊的結(jié)果中相同主鍵的鍵/值對進行合并。Combine模塊的處理步驟與Reduce的操作是相似的,但是Combine模塊通常在Map模塊運行后進行,它的出現(xiàn)可以有效的減少集群內(nèi)的數(shù)據(jù)傳輸。因為在Map Reduce運行的過程中,Map模塊和Reduce不一定在同一運算節(jié)點進行,該模塊可以將Map輸出的結(jié)果進行初步合并,減少輸入至Reduce模塊的文件大小。

5) Reduce 模塊

Reduce模塊繼承了 Hadoop框架定義的Reduce模塊,實現(xiàn)的功能是對前一模塊統(tǒng)計的中間結(jié)果進行合并,輸出最終結(jié)果。處理流程為:Map模塊的中間結(jié)果被Combine模塊和Partition模塊處理以后,存入運算節(jié)點的本地磁盤臨時文件內(nèi)。集群主節(jié)點通知Reduce模塊去對應的運算節(jié)點讀取文件。目前系統(tǒng)所有Map模塊生成的中間結(jié)果都按主鍵值被Hash函數(shù)分成N份(N是系統(tǒng)用戶指定的Reduce數(shù)量),N個Reduce任務分別負責不同的主鍵取值區(qū)間。因此,所有的Reduce任務需要按照主鍵的取值范圍去對應的節(jié)點讀取Map輸出的中間結(jié)果,并將其形成鍵/值的列表。讀取后,再次按照主鍵進行合并,并進行函數(shù)計算、算術(shù)運算、邏輯運算等操作。最終由輸出模塊將最終的鍵/值對輸出到HDFS。

5 結(jié)束語

QL語言設計目的是能讓了解該語言的普通用戶,即使在完全不懂JAVA編程技能的情況下,能夠在云計算平臺系統(tǒng)上進行分

布式計算。因為作為開源項目的Hadoop為用戶提供了眾多的JAVA編程接口,但是很多用戶并不具備編寫完整程序的能力,而且針對不同的分析任務都編寫相應的程序成本較高。通過QL語言可以較好的解決這一難題,用戶只要在掌握基本的語法的情況下即可實現(xiàn)分布式的云計算。

參考文獻:

[1] 萬至臻.基于MapReduce模型的并行計算平臺的設計與實現(xiàn)[D].杭州:浙江大學,2008.

[2] 謝桂蘭.基于Hadoop MapReduce模型的應用研究[J].微型機與應用,2010,4.

[3] 陳香香.云計算中MapReduce性能優(yōu)化及應用[D]. 重慶:重慶大學,2011.

[4] 張建平.云計算中基于MapReduce集群模型的調(diào)度優(yōu)化與研究[D]. 南京:南京郵電大學,2013.

功能介紹:提供統(tǒng)計各分組內(nèi)的聚合函數(shù)運算結(jié)果的功能。Process語句支持多種表達式,表達式中必須包含有函數(shù)。且支持多種子句:where 子句、groijpby 子句、order by 子句、tofile 子句,having 子句' limit 子句。

在腳本解析時,Process類接收以"Process"開頭的一行腳本,從后往前尋找各個子句,并將該行腳本切割為各個子句,創(chuàng)建子句解釋類的對象處理各個子句。Process語句腳本解析過程按照從后往前的順序解析子句。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方法,傳給作業(yè)執(zhí)行模塊。

2) Select 語句

功能介紹:用于選擇某列或多列輸出。提供選擇某個字段、多個字段四則運算或字段運算的功能。

Select語句類關(guān)系與Process的類似,按照從后往前的順序解析子句。Select語句支持多重輸出功能,語句中可通過花括號指定多重輸出條件和輸出文件名。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方式,傳入作業(yè)執(zhí)行模塊。

3) Count 語句

功能介紹:提供同時計數(shù)多個值的功能。

Count語句設計為同時計數(shù)多個值的功能。Count后可跟多個邏輯表達式,在一次讀取數(shù)據(jù)的同時,計數(shù)滿足各個表達式條件的記錄數(shù)。

4) CountD 語句

功能介紹:提供對指定字段的去重計數(shù)功能。

CountD語句支持where子句,group by子句和tofile子句。CoimtD語句的主要功能是以符合where指定條件的話單為對象,按照groipby分組,對CountD指定的字段進行去重計數(shù)。

以上的QL關(guān)鍵詞只是定義了該語句的功能范圍,實際統(tǒng)計的任務需要其他運算邏輯語句來組成更為復雜的操作。全部的關(guān)鍵詞都支持算術(shù)運算,包含加減乘除四種運算,并且可以使用括號定義運算優(yōu)先級。當沒有括號時,將從左到右進行計算,乘除運算優(yōu)先于加減運算。

5 事件執(zhí)行模塊

事件執(zhí)行模塊的功能是接收腳本解析模塊傳遞過來的參數(shù),根據(jù)參數(shù)選擇不同的Map和Reduce類,并配置和提交統(tǒng)計事件到Hadoop框架。事件執(zhí)行模塊內(nèi)的各模塊基本都遵循Hadoop的Map Reduce框架的接口定義。主要任含以下幾個模塊:輸入輸出模塊、Map模塊、Partition模塊、Combine模塊和Reduce模塊。

事件執(zhí)行過程示意圖如下:

圖2 事件執(zhí)行過程示意圖

每一行語句可解釋為一個可執(zhí)行的MapReduce的事件,事件執(zhí)行組件配置好事件后提交給Hadoop的JobTracker,由Hadoop的Map Reduce框架執(zhí)行事件,Map模塊讀取原始數(shù)據(jù)分塊,Partition模塊和Combine模塊對Map模塊輸出的統(tǒng)計結(jié)果進行合并處理,最后提交給Reduce模塊最終輸出至HDFS。

1) 輸入輸出模塊

輸入模塊負責讀入文件分片并將其分割成記錄,適用于讀取流記錄這種半結(jié)構(gòu)化文件。本模塊的輸入為網(wǎng)絡流量記錄文件,輸出為統(tǒng)計任務的鍵/值對,主鍵為本條記錄在文件中的字節(jié)偏移量,值為流量記錄值。本模塊只用于讀取半結(jié)構(gòu)化的文本文件,輸入模塊輸出的鍵/值對,通過引用傳遞給Map模塊。

輸出模塊根據(jù)指定的字段分隔符和行分隔符輸出結(jié)果。本模塊與輸入模塊類似,可以將記錄以行的形式存入文本文件中。其輸入為Reduce模塊產(chǎn)生的鍵/值對。輸出為最終結(jié)果文件,存儲在HDFS上。

2) Map 模塊

Map模塊的功能為從整條網(wǎng)絡流量記錄中取出指定字段,經(jīng)過提取、計算等操作后,產(chǎn)生鍵/值對,并將統(tǒng)計的初步結(jié)果寫到計算機本地磁盤。Map模塊繼承了 Hadoop框架的Map模塊,并根據(jù)處理的網(wǎng)絡流量記錄格式進行了一些定制。

根據(jù)統(tǒng)計功能的不同,目前系統(tǒng)包含如下兩個Map部件:GrovpMapper和CountMapper。GroipMapper用于處理分組后的集合統(tǒng)計,分組條件作為主鍵,Map端集合運算結(jié)果作為值進行輸出。CountMapper用于處理多重計數(shù)的統(tǒng)計需求。Map模塊的輸入為輸入模塊輸出的鍵/值對,Map模塊對相同的主鍵的鍵值進行合并處理后,輸出新的鍵/值對,鍵為分組的條件,值為該分組對應的值。

3) 數(shù)據(jù)分割模塊(Partition)

Partition模塊繼承了 Hadoop框架定義的Partition模塊。利用該模塊,系統(tǒng)將Map輸出的結(jié)果進行初步劃分,可以保證某一取值范圍的中間結(jié)果送到同一個Reduce任務中進行處理。劃分時采用對key進行hash運算的方式,在保證正確性的同時一定程度上簡化Reduce的過程。劃分的個數(shù)是由用戶自定義的Reduce任務的個數(shù)。

4) 數(shù)據(jù)合并模塊(Combine)

Combine模塊用于計算機本地中間文件的合并。該模塊通常運行在Reduce操作前,對之前模塊的結(jié)果中相同主鍵的鍵/值對進行合并。Combine模塊的處理步驟與Reduce的操作是相似的,但是Combine模塊通常在Map模塊運行后進行,它的出現(xiàn)可以有效的減少集群內(nèi)的數(shù)據(jù)傳輸。因為在Map Reduce運行的過程中,Map模塊和Reduce不一定在同一運算節(jié)點進行,該模塊可以將Map輸出的結(jié)果進行初步合并,減少輸入至Reduce模塊的文件大小。

5) Reduce 模塊

Reduce模塊繼承了 Hadoop框架定義的Reduce模塊,實現(xiàn)的功能是對前一模塊統(tǒng)計的中間結(jié)果進行合并,輸出最終結(jié)果。處理流程為:Map模塊的中間結(jié)果被Combine模塊和Partition模塊處理以后,存入運算節(jié)點的本地磁盤臨時文件內(nèi)。集群主節(jié)點通知Reduce模塊去對應的運算節(jié)點讀取文件。目前系統(tǒng)所有Map模塊生成的中間結(jié)果都按主鍵值被Hash函數(shù)分成N份(N是系統(tǒng)用戶指定的Reduce數(shù)量),N個Reduce任務分別負責不同的主鍵取值區(qū)間。因此,所有的Reduce任務需要按照主鍵的取值范圍去對應的節(jié)點讀取Map輸出的中間結(jié)果,并將其形成鍵/值的列表。讀取后,再次按照主鍵進行合并,并進行函數(shù)計算、算術(shù)運算、邏輯運算等操作。最終由輸出模塊將最終的鍵/值對輸出到HDFS。

5 結(jié)束語

QL語言設計目的是能讓了解該語言的普通用戶,即使在完全不懂JAVA編程技能的情況下,能夠在云計算平臺系統(tǒng)上進行分

布式計算。因為作為開源項目的Hadoop為用戶提供了眾多的JAVA編程接口,但是很多用戶并不具備編寫完整程序的能力,而且針對不同的分析任務都編寫相應的程序成本較高。通過QL語言可以較好的解決這一難題,用戶只要在掌握基本的語法的情況下即可實現(xiàn)分布式的云計算。

參考文獻:

[1] 萬至臻.基于MapReduce模型的并行計算平臺的設計與實現(xiàn)[D].杭州:浙江大學,2008.

[2] 謝桂蘭.基于Hadoop MapReduce模型的應用研究[J].微型機與應用,2010,4.

[3] 陳香香.云計算中MapReduce性能優(yōu)化及應用[D]. 重慶:重慶大學,2011.

[4] 張建平.云計算中基于MapReduce集群模型的調(diào)度優(yōu)化與研究[D]. 南京:南京郵電大學,2013.

功能介紹:提供統(tǒng)計各分組內(nèi)的聚合函數(shù)運算結(jié)果的功能。Process語句支持多種表達式,表達式中必須包含有函數(shù)。且支持多種子句:where 子句、groijpby 子句、order by 子句、tofile 子句,having 子句' limit 子句。

在腳本解析時,Process類接收以"Process"開頭的一行腳本,從后往前尋找各個子句,并將該行腳本切割為各個子句,創(chuàng)建子句解釋類的對象處理各個子句。Process語句腳本解析過程按照從后往前的順序解析子句。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方法,傳給作業(yè)執(zhí)行模塊。

2) Select 語句

功能介紹:用于選擇某列或多列輸出。提供選擇某個字段、多個字段四則運算或字段運算的功能。

Select語句類關(guān)系與Process的類似,按照從后往前的順序解析子句。Select語句支持多重輸出功能,語句中可通過花括號指定多重輸出條件和輸出文件名。解析完成后,將所需信息封裝起來,通過作業(yè)配置的方式,傳入作業(yè)執(zhí)行模塊。

3) Count 語句

功能介紹:提供同時計數(shù)多個值的功能。

Count語句設計為同時計數(shù)多個值的功能。Count后可跟多個邏輯表達式,在一次讀取數(shù)據(jù)的同時,計數(shù)滿足各個表達式條件的記錄數(shù)。

4) CountD 語句

功能介紹:提供對指定字段的去重計數(shù)功能。

CountD語句支持where子句,group by子句和tofile子句。CoimtD語句的主要功能是以符合where指定條件的話單為對象,按照groipby分組,對CountD指定的字段進行去重計數(shù)。

以上的QL關(guān)鍵詞只是定義了該語句的功能范圍,實際統(tǒng)計的任務需要其他運算邏輯語句來組成更為復雜的操作。全部的關(guān)鍵詞都支持算術(shù)運算,包含加減乘除四種運算,并且可以使用括號定義運算優(yōu)先級。當沒有括號時,將從左到右進行計算,乘除運算優(yōu)先于加減運算。

5 事件執(zhí)行模塊

事件執(zhí)行模塊的功能是接收腳本解析模塊傳遞過來的參數(shù),根據(jù)參數(shù)選擇不同的Map和Reduce類,并配置和提交統(tǒng)計事件到Hadoop框架。事件執(zhí)行模塊內(nèi)的各模塊基本都遵循Hadoop的Map Reduce框架的接口定義。主要任含以下幾個模塊:輸入輸出模塊、Map模塊、Partition模塊、Combine模塊和Reduce模塊。

事件執(zhí)行過程示意圖如下:

圖2 事件執(zhí)行過程示意圖

每一行語句可解釋為一個可執(zhí)行的MapReduce的事件,事件執(zhí)行組件配置好事件后提交給Hadoop的JobTracker,由Hadoop的Map Reduce框架執(zhí)行事件,Map模塊讀取原始數(shù)據(jù)分塊,Partition模塊和Combine模塊對Map模塊輸出的統(tǒng)計結(jié)果進行合并處理,最后提交給Reduce模塊最終輸出至HDFS。

1) 輸入輸出模塊

輸入模塊負責讀入文件分片并將其分割成記錄,適用于讀取流記錄這種半結(jié)構(gòu)化文件。本模塊的輸入為網(wǎng)絡流量記錄文件,輸出為統(tǒng)計任務的鍵/值對,主鍵為本條記錄在文件中的字節(jié)偏移量,值為流量記錄值。本模塊只用于讀取半結(jié)構(gòu)化的文本文件,輸入模塊輸出的鍵/值對,通過引用傳遞給Map模塊。

輸出模塊根據(jù)指定的字段分隔符和行分隔符輸出結(jié)果。本模塊與輸入模塊類似,可以將記錄以行的形式存入文本文件中。其輸入為Reduce模塊產(chǎn)生的鍵/值對。輸出為最終結(jié)果文件,存儲在HDFS上。

2) Map 模塊

Map模塊的功能為從整條網(wǎng)絡流量記錄中取出指定字段,經(jīng)過提取、計算等操作后,產(chǎn)生鍵/值對,并將統(tǒng)計的初步結(jié)果寫到計算機本地磁盤。Map模塊繼承了 Hadoop框架的Map模塊,并根據(jù)處理的網(wǎng)絡流量記錄格式進行了一些定制。

根據(jù)統(tǒng)計功能的不同,目前系統(tǒng)包含如下兩個Map部件:GrovpMapper和CountMapper。GroipMapper用于處理分組后的集合統(tǒng)計,分組條件作為主鍵,Map端集合運算結(jié)果作為值進行輸出。CountMapper用于處理多重計數(shù)的統(tǒng)計需求。Map模塊的輸入為輸入模塊輸出的鍵/值對,Map模塊對相同的主鍵的鍵值進行合并處理后,輸出新的鍵/值對,鍵為分組的條件,值為該分組對應的值。

3) 數(shù)據(jù)分割模塊(Partition)

Partition模塊繼承了 Hadoop框架定義的Partition模塊。利用該模塊,系統(tǒng)將Map輸出的結(jié)果進行初步劃分,可以保證某一取值范圍的中間結(jié)果送到同一個Reduce任務中進行處理。劃分時采用對key進行hash運算的方式,在保證正確性的同時一定程度上簡化Reduce的過程。劃分的個數(shù)是由用戶自定義的Reduce任務的個數(shù)。

4) 數(shù)據(jù)合并模塊(Combine)

Combine模塊用于計算機本地中間文件的合并。該模塊通常運行在Reduce操作前,對之前模塊的結(jié)果中相同主鍵的鍵/值對進行合并。Combine模塊的處理步驟與Reduce的操作是相似的,但是Combine模塊通常在Map模塊運行后進行,它的出現(xiàn)可以有效的減少集群內(nèi)的數(shù)據(jù)傳輸。因為在Map Reduce運行的過程中,Map模塊和Reduce不一定在同一運算節(jié)點進行,該模塊可以將Map輸出的結(jié)果進行初步合并,減少輸入至Reduce模塊的文件大小。

5) Reduce 模塊

Reduce模塊繼承了 Hadoop框架定義的Reduce模塊,實現(xiàn)的功能是對前一模塊統(tǒng)計的中間結(jié)果進行合并,輸出最終結(jié)果。處理流程為:Map模塊的中間結(jié)果被Combine模塊和Partition模塊處理以后,存入運算節(jié)點的本地磁盤臨時文件內(nèi)。集群主節(jié)點通知Reduce模塊去對應的運算節(jié)點讀取文件。目前系統(tǒng)所有Map模塊生成的中間結(jié)果都按主鍵值被Hash函數(shù)分成N份(N是系統(tǒng)用戶指定的Reduce數(shù)量),N個Reduce任務分別負責不同的主鍵取值區(qū)間。因此,所有的Reduce任務需要按照主鍵的取值范圍去對應的節(jié)點讀取Map輸出的中間結(jié)果,并將其形成鍵/值的列表。讀取后,再次按照主鍵進行合并,并進行函數(shù)計算、算術(shù)運算、邏輯運算等操作。最終由輸出模塊將最終的鍵/值對輸出到HDFS。

5 結(jié)束語

QL語言設計目的是能讓了解該語言的普通用戶,即使在完全不懂JAVA編程技能的情況下,能夠在云計算平臺系統(tǒng)上進行分

布式計算。因為作為開源項目的Hadoop為用戶提供了眾多的JAVA編程接口,但是很多用戶并不具備編寫完整程序的能力,而且針對不同的分析任務都編寫相應的程序成本較高。通過QL語言可以較好的解決這一難題,用戶只要在掌握基本的語法的情況下即可實現(xiàn)分布式的云計算。

參考文獻:

[1] 萬至臻.基于MapReduce模型的并行計算平臺的設計與實現(xiàn)[D].杭州:浙江大學,2008.

[2] 謝桂蘭.基于Hadoop MapReduce模型的應用研究[J].微型機與應用,2010,4.

[3] 陳香香.云計算中MapReduce性能優(yōu)化及應用[D]. 重慶:重慶大學,2011.

[4] 張建平.云計算中基于MapReduce集群模型的調(diào)度優(yōu)化與研究[D]. 南京:南京郵電大學,2013.

阿坝县| 嫩江县| 当阳市| 江安县| 英山县| 台湾省| 耒阳市| 苏尼特左旗| 台南市| 鄱阳县| 娱乐| 临海市| 信丰县| 沂南县| 蓬莱市| 砚山县| 永德县| 兴业县| 新蔡县| 青田县| 涿鹿县| 特克斯县| 寻甸| 云龙县| 博白县| 东山县| 武邑县| 湘潭市| 财经| 临颍县| 隆德县| 闽清县| 洪雅县| 辽宁省| 米脂县| 沽源县| 烟台市| 兴山县| 赤峰市| 东丽区| 神池县|