陳 茜 吳懷林 馬志柔 劉 杰 鐘 華
1(中國科學(xué)院大學(xué) 北京 100049)2(中國科學(xué)院軟件研究所 北京 100190)
?
一種大數(shù)據(jù)分析組件的自動化開發(fā)集成方法
陳茜1,2吳懷林2馬志柔2劉杰2鐘華2
1(中國科學(xué)院大學(xué)北京 100049)2(中國科學(xué)院軟件研究所北京 100190)
摘要隨著大數(shù)據(jù)時代的到來,數(shù)據(jù)分析需求日趨多樣化,大數(shù)據(jù)分析工具自帶的算法庫已無法滿足個性化的數(shù)據(jù)分析需求,亟需開發(fā)或集成新的算法。但現(xiàn)有的大數(shù)據(jù)分析工具算法開發(fā)集成學(xué)習(xí)成本高,給新算法的開發(fā)集成帶來一定困難。提出一種針對大數(shù)據(jù)分析工具自動化開發(fā)集成算法的方法,算法以組件的形式集成到分析工具中。首先定義組件模型,其次給出組件模型自動化生成流程,最后重點分析組件代碼的自動生成和代碼檢測問題,給出基于元信息的代碼生成方案和基于Soot控制流的靜態(tài)代碼檢測方法。實驗表明,該方法可以完成大數(shù)據(jù)分析組件的自動化開發(fā)集成。
關(guān)鍵詞大數(shù)據(jù)分析組件Soot控制流分析代碼生成
0引言
隨著互聯(lián)網(wǎng)的快速發(fā)展,我們已經(jīng)進入大數(shù)據(jù)時代,越來越多的機構(gòu)組織開始重視數(shù)據(jù)分析帶來的價值,人們對數(shù)據(jù)分析的需求也迅速提升。許多優(yōu)秀的算法分析師致力于數(shù)據(jù)分析算法開發(fā)優(yōu)化的同時,日趨增長的大數(shù)據(jù)分析業(yè)務(wù)亟需業(yè)務(wù)部門的分析師完成。集成化的大數(shù)據(jù)分析工具正是連接兩者的紐帶,它可以集成開發(fā)者開發(fā)好的數(shù)據(jù)分析算法,供業(yè)務(wù)分析師使用。
Haflow正是這樣的一個集成化的大數(shù)據(jù)分析工具。該工具以組件為設(shè)計單位,具有拖拽式流程設(shè)計界面,以分布式集群Hadoop為組件運行的基礎(chǔ)設(shè)施,組件間通過HDFS文件傳遞數(shù)據(jù)[1]。除了Haflow,目前市場上已經(jīng)有一些成熟的數(shù)據(jù)分析工具,如Weka[2]、Clementine、R[3]等。這些工具本身集成了一些優(yōu)秀的數(shù)據(jù)分析算法,數(shù)據(jù)分析師固然可以利用這些工具自帶的算法進行數(shù)據(jù)挖掘分析。但是當(dāng)遇到特定的數(shù)據(jù)分析需求,需要開發(fā)和實現(xiàn)新的數(shù)據(jù)分析算法時,這些數(shù)據(jù)分析工具卻并未提供很好的平臺算法擴展接口和算法開發(fā)工具,方便算法的快速開發(fā)和集成。以Weka為例,擴展現(xiàn)有的算法庫,添加一個新的算法需要完成以下步驟:1) 按照Weka接口和規(guī)范編寫新的算法;2) 建立合理的目錄結(jié)構(gòu),定位算法所在的包;3) 修改Weka啟動時加載的系統(tǒng)配置文件[4]。這必然增加了算法開發(fā)和集成的復(fù)雜程度,給算法開發(fā)人員帶來了學(xué)習(xí)負(fù)擔(dān)。
為了解決大數(shù)據(jù)分析工具算法集成開發(fā)復(fù)雜的問題,本文基于現(xiàn)有的大數(shù)據(jù)分析工具Haflow提出一種自動的算法開發(fā)集成方法。通過該方法,屏蔽算法開發(fā)人員與工具適配的工作,免去算法開發(fā)人員研究平臺接口規(guī)范的麻煩,使其只需關(guān)注在算法的實現(xiàn)和優(yōu)化工作上,從而提高算法開發(fā)人員的工作效率。另外本文還利用靜態(tài)代碼分析的方法檢測現(xiàn)有開源代碼中不符合工具規(guī)范的部分,從而實現(xiàn)開源代碼的自動化集成??傊?,利用該方法,可以快速地為Haflow大數(shù)據(jù)分析工具開發(fā)和集成開源算法,從而解決數(shù)據(jù)分析算法開發(fā)集成困難的問題。
1相關(guān)研究
相關(guān)研究主要調(diào)研了主流的商業(yè)數(shù)據(jù)分析工具算法開發(fā)現(xiàn)狀和學(xué)術(shù)界數(shù)據(jù)分析組件自動化開發(fā)方案。
在數(shù)據(jù)挖掘領(lǐng)域,國內(nèi)外針對不同的應(yīng)用場景研究開發(fā)了不同的數(shù)據(jù)分析工具。主流的數(shù)據(jù)分析工具包括:SAS、SPSS、Weka以及R語言等。研究這些工具上的算法開發(fā)解決方案,SAS、SPSS由于不開源,基本無法為其開發(fā)自定義的算法。R和Weka是開源的,前文中以及提到為Weka編寫新算法需要三步,Weka并未提供自動化的算法開發(fā)方法;R是一個開放式平臺,R提供了包結(jié)構(gòu)的解決方案來管理算法,開發(fā)的新的算法需要滿足包結(jié)構(gòu)的標(biāo)準(zhǔn)。Haflow是一個基于組件的大數(shù)據(jù)分析工具[1],該工具構(gòu)建在分布式集群上,以HDFS為底層文件系統(tǒng),提供可擴展的組件接口。數(shù)據(jù)分析算法可以以組件的形式集成到工具平臺上,并且支持異構(gòu)底層的算法。Haflow雖然提供了開放接口來支持組件開發(fā)集成,但沒有提供自動化的方法,開發(fā)人員要學(xué)習(xí)Haflow本身的接口,熟悉Haflow的處理邏輯才能開發(fā)組件。對于開源算法的集成,也需要開發(fā)人員找出算法中不符合平臺規(guī)范的地方,代價很高。
綜上所述,現(xiàn)有的大數(shù)據(jù)分析工具給出的算法開發(fā)和集成方案為:提供可擴展的算法開發(fā)接口,新組件的開發(fā)需要實現(xiàn)該接口,滿足包結(jié)構(gòu)管理規(guī)范,但沒有給出自動化的組件開發(fā)集成方案。
除了以上提到的商業(yè)數(shù)據(jù)分析工具,學(xué)術(shù)界提出了以下研究方法。
采用模型驅(qū)動的代碼生成方法,利用系統(tǒng)提供的模型組件定義數(shù)據(jù)挖掘過程,該過程是一個邏輯模型,與具體實現(xiàn)技術(shù)無關(guān)。邏輯模型經(jīng)過系統(tǒng)的后臺解析成物理模型,然后在系統(tǒng)中執(zhí)行。通過Jet模板解析的方式來生成物理模型代碼,Jet解析器將用戶參數(shù)和代碼模板轉(zhuǎn)換成可執(zhí)行Java代碼[5]。該方法實現(xiàn)了數(shù)據(jù)挖掘組件的自動化開發(fā)過程,但沒有提供開源算法集成到數(shù)據(jù)分析工具的解決方案。
利用靜態(tài)代碼分析方法可以對程序中的代碼進行檢測分析,Soot是McGill大學(xué)的Sable研究小組于1996年開發(fā)的Java字節(jié)碼優(yōu)化框架[6],其目標(biāo)是開發(fā)能夠更快更好地理解與執(zhí)行Java程序的工具[7]。通過 Soot 提供的過程內(nèi)和過程間的分析與優(yōu)化支持,用戶可以很方便地獲得每個方法的控制流圖和各個折衷級別上的全局調(diào)用圖[8]。在學(xué)術(shù)研究中,Soot還被用來檢測分析程序中的缺陷[9]。本文將利用Soot分析開源算法中的輸入輸出語句代碼,從而完成開源算法的集成。
2大數(shù)據(jù)分析組件的自動化開發(fā)集成
本文將研究如何自動化開發(fā)和集成大數(shù)據(jù)分析算法到Haflow工具中。Haflow將平臺上的分析算法定義為組件,首先要了解組件的概念,然后給出自動化集成和開發(fā)這些組件的步驟和處理框架。
2.1大數(shù)據(jù)分析組件模型
由圖1可以看出組件模型由三部分構(gòu)成:組件元信息、組件實體和組件接口,可以表示為V=(M,E,I)。
圖1 組件模型
具體介紹如下:
M為組件元信息:定義組件的描述,繼承Haflow提供的抽象類來滿足其規(guī)范,是組件被平臺識別和管理的基礎(chǔ)。
E為組件實體:是組件功能的實現(xiàn)部分,是集成或者全新開發(fā)的算法部分,支持Java、MapReduce、R、Hive等多種底層異構(gòu)平臺。
I為組件接口:是組件的輸入輸出部分,用來滿足與其他組件的匹配,將相鄰兩個組件的匹配轉(zhuǎn)換為中間數(shù)據(jù)結(jié)點的匹配。
從具體代碼實現(xiàn)上看,一個組件可以理解為一個Jar包,是由Java代碼按照規(guī)定的包結(jié)構(gòu)打包生成。Java源碼按照功能的不同區(qū)分成兩部分:組件元信息Java類和組件實現(xiàn)Java類。組件接口Java代碼段分布在兩者之中,組件Jar包結(jié)構(gòu)如圖2所示。
圖2 組件Jar包結(jié)構(gòu)圖
元信息Java類由ID、組件參數(shù)以及根據(jù)底層平臺不同繼承實現(xiàn)的不同組件抽象類三部分組成。實體部分可以是以Main函數(shù)作為調(diào)用入口的一個Java類,也可以是由Main函數(shù)做入口調(diào)用的多個Java類。組件接口部分比較特殊不是單獨的Java類,而是由兩部分代碼段組成:元信息Java類中描述組件輸入輸出的參數(shù)部分和實體Java文件中對這些輸入輸出進行處理的部分。Haflow底層是HDFS文件系統(tǒng),組件協(xié)同工作需要以HDFS文件作為接口標(biāo)準(zhǔn),即前一個組件輸出的HDFS文件作為與其相連的后一個組件的輸入。如圖3所示,組件的輸入輸出會以鍵值對(Key,Value)的形式作為Main函數(shù)的命令行參數(shù)傳遞到組件實體類內(nèi),實體類讀取Main函數(shù)的Args參數(shù)即可讀到輸入輸出文件所在的地址。
圖3 組件接口文件處理機制
2.2組件自動化開發(fā)集成處理流程
Haflow的組件主要有兩種來源:一是算法工程師自己從頭開始編寫的全新的算法包裝成組件;另一種是將Mahout、Weka等開源的算法適配成工具支持的組件。
兩種來源的算法要集成到平臺上成為組件。首先,要能被Haflow平臺識別,這就需要自動生成組件的元信息;其次,Mahout、Weka中有部分單機算法,對輸入輸出文件的處理都是單機方法,不滿足Haflow接口文件處理要求,需要自動化檢測這部分代碼,給出需要修改的片段;最后,修改后的算法本身可以作為組件實體,連同自動生成的組件元信息按照一定的包組織結(jié)構(gòu)生成Jar包提交到Haflow上。按照以上三步就完成了組件自動化開發(fā)集成,流程如圖4所示。
圖4 組件自動化開發(fā)集成處理流程
3方法實現(xiàn)及關(guān)鍵技術(shù)研究
3.1組件元信息自動化生成
Haflow對于組件元信息有統(tǒng)一的規(guī)范,可以抽象成一個元信息邏輯模型LM=(ID,Property,Platform)。該邏輯模型從用戶的角度來定義,ID是自動為組件生成的唯一標(biāo)識,Property是組件的參數(shù)信息,Platform代表組件依賴的底層平臺,不同的平臺對應(yīng)的物理模型不一樣。組件開發(fā)人員只需要填寫抽象邏輯模型要求的字段,從而屏蔽了其對底層平臺學(xué)習(xí)的成本。
采用基于元數(shù)據(jù)邏輯模型的文本模板替換算法實現(xiàn)組件元信息Java類的自動生成,處理流程如圖5所示。核心思想是定制一套文本模板,模板分為靜態(tài)和動態(tài)部分。根據(jù)組件元數(shù)據(jù)信息的不同,組件生成引擎加載文本模板,將靜態(tài)部分直接復(fù)制,動態(tài)部分根據(jù)元數(shù)據(jù)信息生成不同的代碼,最終自動化生成元信息Java文件。元信息代碼生成工作方式如圖6所示,元數(shù)據(jù)邏輯模型本質(zhì)是標(biāo)識組件元信息的一套鍵值對。文本模板顯式標(biāo)明了這些這些鍵值對該被替換的位置,替換算法的任務(wù)就是將文本模板的變量替換和根據(jù)底層物理平臺不同集成實現(xiàn)不同的抽象類。
圖5 組件元信息自動生成處理流程
圖6 元信息代碼生成工作方式
替換算法將文本模板中帶有$符號的變量被替換成參數(shù)鍵值對中實際值,按照底層平臺模型不同分別選擇繼承AbstractJavaModule、AbstractHiveModule、AbstractSqoopModule或AbstractMapReductModule不同的類。這些支持底層平臺的抽象類是預(yù)先寫好的,只要選擇需要的類型繼承。替換算法的偽代碼如算法1所示,首先將文本模板讀入輸入流中,然后遍歷參數(shù)鍵值對,查找文本模板輸入流中的相應(yīng)Key值,替換成Value即可。另外Haflow具有可擴展性,組件元信息中可實現(xiàn)用戶自定義的組件配置參數(shù)處理,用戶利用鍵值對<$type,custom>標(biāo)記參數(shù)里有需要自定義處理的類型。然后給出自定義的處理方法,替換算法會用該方法重寫上面提到的抽象類中的getArguments方法。最后給出生成的組件元信息Java類。
算法1替換算法
Input: ModulePropertyMap, ModuleTemplate
Output: ModuleMetaJavaFile
Read ModuleTemplate file into MTInputStream;
for each MP in MoudlePropertyMap:
key ← MP.key; value ← MP.value
//用戶自定義類型,需重寫讀取參數(shù)方法
if key==type && value==custom:
needtooverride is true
Endif
//將文本模板中的變量替換成參數(shù)鍵值對中的實際值
replace key in MTInputStream to value
if needtooverride is true
override getArguments function
Endif
Write MTInputStream into ModuleMetaJavaFile
3.2基于Soot控制流的靜態(tài)組件代碼檢測
開源算法對于命令行輸入輸出的處理多樣化,不同的代碼有不同的處理邏輯,要找到代碼中對于特定參數(shù)的讀寫語句是一個十分復(fù)雜繁瑣的工作。主要有兩個難點:找到輸入文件地址從命令行參數(shù)變量開始到最終被賦值的存儲輸入文件地址的變量;找到對該變量進行文件讀寫的語句。
以Mahout中的單機代碼TrainLogistic為例,代碼的部分相關(guān)片段如下:
public class TrainLogistic{
private static String inputFile;
?
public static void main(String[] args){
mainToOutput(args,new PrintWriter());
}
static void mainToOutput(String[] args,PrintWriter o){
if(parseArgs(args)){
BufferedReader in= open(inputFile);
?
}
}
private static boolean parseArgs(String[] args){
Option inputFile = builder.withLongName(″input″)
?
CommandLine cmdLine=parse.parseAndHelp(args);
TrainLogistic.inputFile=getStringArgument(cmdLine,inputFile);
}
從中可以看出,輸入文件參數(shù)從Main函數(shù)的命令行參數(shù)讀入后,并未在Main函數(shù)體內(nèi)直接處理,而是傳遞多次到parseArgs函數(shù)中。而該函數(shù)體中又沒有對args參數(shù)直接處理,而是調(diào)用了其他類的函數(shù)進行處理。經(jīng)過多次非本類的成員函數(shù)處理后,最終賦值給本類的成員變量InputFile,這才完成了兩個難點中的第一步。找到最終的InputFile變量后,查看對其文件讀寫語句,發(fā)現(xiàn)inputFile作為函數(shù)open的調(diào)用參數(shù),分析open函數(shù)體內(nèi)語句,最終找到對inputFile變量的文件處理語句,完成了難點中的第二步。
為了解決以上兩個難點,我們采用Soot代碼分析工具來獲得代碼的控制流圖UnitGraph,從而跟蹤代碼對輸入?yún)?shù)的處理語句。
基于Soot控制流的靜態(tài)代碼檢測算法核心思想如下:
1) 從處理args的函數(shù)作為入口,跟蹤args中保存輸入或輸出路徑的變量被傳遞到的函數(shù)和變量;
2) 根據(jù)變量類型以及對其的相關(guān)處理判斷這些變量是目標(biāo)輸入輸出變量的可能性;
3) 將可能是目標(biāo)變量的作為“污染”變量;
4) 進一步跟蹤,發(fā)現(xiàn)“污染”變量作為參數(shù)的函數(shù),且函數(shù)返回值是InputStream、OutputStream、Reader、Writer及其子類,且函數(shù)調(diào)用是第三方類庫中的函數(shù)或者初始化構(gòu)造函數(shù)時,報警該行;
5) 重復(fù)步驟2)-步驟4),直到算法分析完。
為了實現(xiàn)以上算法,需要利用Soot中的一些基本對象和方法。Scene用來保存整個分析發(fā)生的場景,可以設(shè)置要分析的包含main函數(shù)的類和應(yīng)用類,以及采用過程間還是過程內(nèi)分析。SootClass是裝入Soot中的單個類,而SootMethod是類中的一個方法,Body是存儲SootMethod的實現(xiàn)代碼,Unit是Body中具體的語句,UnitsChain是Body中Units組成的鏈,UnitGraph表示一個具體方法生成的控制流圖,Unit有多種類型。例如定義語句IdentityStmt、調(diào)用語句InvokeStmt、賦值語句AssignStmt以及判斷語句IfStmt、跳轉(zhuǎn)語句GotoStmt等。Local表示臨時變量,F(xiàn)ield是成員變量,兩者都叫作Value。
結(jié)合Soot的基本對象和方法,基于以上核心思想,得到最終的靜態(tài)檢測算法如算法2所示。
算法2基于Soot控制流的靜態(tài)代碼檢測算法
Input: classname,classpath,key, IORegex
Output: JavaSourceCodeLineNum, WarnLevel
MAIN(String,String,String,String)
globalTargetList←Null
//全局變量,用來保存成員變量中屬于目標(biāo)變量的部分
load classes into Scene
//配置分析場景
set whole mode
//設(shè)置為過程間分析模式
methods←sootclass.getMethods
for each method in methods:
if method is Main:
call ANALYSIS(method, paras)
End MAIN
ANALYSIS(SootMethod,Int[])
paraList←Null
//記錄該函數(shù)的調(diào)用參數(shù)變量
localTargetList←Null
//記錄函數(shù)體內(nèi)目標(biāo)變量
taintList←Null
//記錄被key污染的變量
body←get body from method
graph← new UnitGraph(body)
for each unit in graph
switch condition in rule 1
case 1:
get newMethod and newParas
ANALYSIS(newMethod,newParas)
case 2:
add to paraList,globalTargetList, taintList or localTargetList
if returnType in IORegex
print line based on rule 2
End ANALYSIS
輸入數(shù)據(jù)是待分類組件實體的類名、類所在的路徑、命令行參數(shù)args中與輸入或輸出相關(guān)的關(guān)鍵字、需要捕獲的函數(shù)返回值類型對應(yīng)的正則表達式(即輸入輸出流及其子類)。輸出是單機讀寫輸入或輸出文件的Java源代碼所在的行以及該行的危險度級別。算法包括一個主函數(shù)MAIN,完成將類轉(zhuǎn)換成中間代碼的準(zhǔn)備工作,并且獲得類中的所有方法。算法還包括靜態(tài)代碼分析函數(shù)ANALYSIS,該函數(shù)用來分析類中單獨的方法片段,調(diào)用參數(shù)是SootMethod和調(diào)用參數(shù)中需要被跟蹤的參數(shù)位置。ANALYSIS遍歷要分析方法的UnitGraph,按照表1作出相應(yīng)的動作,包括遞歸調(diào)用ANALYSIS方法或者將相關(guān)變量加入四個List中的一個。當(dāng)正在遍歷的unit語句返回值符合IORegex,并且參數(shù)在四個List中時,按照表2給出報警的源代碼行數(shù)和報警級別。其中重點介紹四個List,四個List都是用來記錄與輸入的Key相關(guān)的變量。paraList是用來保存函數(shù)調(diào)用參數(shù)中與key相關(guān)的變量,localTargetList用來記錄某個方法內(nèi)部與key直接相關(guān)的臨時變量,taintList是間接相關(guān)的臨時變量。兩者的區(qū)別是targetList是我們要找的value值所在的變量,而taintList是可能為value值的變量。最后將跨函數(shù)的變量,比如成員變量,存儲在globalTargetList中。
表1跟蹤規(guī)則
表2 報警規(guī)則
參數(shù)函數(shù)報警等級taintList中的變量第三方類庫函數(shù)低(L0)輸入流構(gòu)造函數(shù)中(L1)targetList中的變量第三方類庫函數(shù)中(L1)輸入流構(gòu)造函數(shù)高(L2)paraList中的變量第三方類庫函數(shù)中(L1)輸入流構(gòu)造函數(shù)高(L2)
4實驗驗證
4.1實驗?zāi)康暮蛿?shù)據(jù)選取
實驗是為了驗證基于Soot控制流的靜態(tài)代碼檢測算法的準(zhǔn)確性。使用該算法能夠?qū)z測出開源算法庫中對輸入輸出關(guān)鍵詞單機讀寫的代碼,從而找到代碼中不滿足Haflow要求的代碼行,給出報警。選取機器學(xué)習(xí)領(lǐng)域著名的開源算法Mahout中的例子以及要集成進Haflow的開源文本分析算法進行實驗。
4.2評價標(biāo)準(zhǔn)
采用準(zhǔn)確率(P)、召回率(R)、有效性(E)三者結(jié)合的評價標(biāo)準(zhǔn),定義算法給出的報警語句數(shù)目為NumOfWarn。其中確實判斷正確的語句數(shù)目為NumOfRight,待檢測的類中實際應(yīng)該報警的語句數(shù)目為NumOfShouldWarn。當(dāng)語句被正確報警時,給出的報警等級與實際報警等級相符的語句數(shù)目為NumOfRightLevel,給出評價標(biāo)準(zhǔn)公式如下:
(1)
(2)
(3)
4.3實驗結(jié)果
首先給出兩個測試案例,mahout-examples包中TrainLogistic類是單機處理輸入輸出文件的類[10]。使用該類對本文提到的算法進行測試,定位類中對輸入單機處理的代碼行并且報警。算法得到的結(jié)果和人工審核結(jié)果對比如表3所示,可以看出準(zhǔn)確率75%,召回率100%,有效性67%。
表3 TrainLogistic中輸入處理報警的行
定位類中對輸出單機處理的代碼行并且報警,算法得到的結(jié)果和人工審核結(jié)果對比如表4所示,準(zhǔn)確率75%,召回率100%,有效性100%。
表4 TrainLogistic中輸出處理報警的行
按照以上方法,對mahout-example中的其他以main函數(shù)為入口的主類用該方法進行測試,給出測試結(jié)果如圖7所示。
圖7 mahout-example中部分代碼的實驗結(jié)果
從結(jié)果中可以看出,該算法的召回率一直穩(wěn)定在100%,這就保證了該方法不會漏掉開源代碼中有問題的代碼片段。從圖7中可以看出,前十一個程序都是單機程序,其準(zhǔn)確率平均值為73%,表明找到的語句基本與輸入輸出處理相關(guān);后五個代碼的準(zhǔn)確率為0,這是由于后五個代碼均是MapReduce代碼,并沒有需要修改的代碼。前十一個程序的有效性平均值為91%,表明算法對于認(rèn)為有問題的語句給出的相關(guān)性判斷即報警等級基本正確。利用報警等級來優(yōu)化了算法的準(zhǔn)確率,開發(fā)人員可以優(yōu)先修改報警等級高的語句,大大提高了工作效率。
5結(jié)語
大數(shù)據(jù)分析工具的組件開發(fā)和集成往往非常復(fù)雜,缺少自動化的方法。結(jié)合大數(shù)據(jù)分析工具Haflow,本文提出了一種大數(shù)據(jù)分析組件自動化開發(fā)集成的方法。方法主要包括組件元信息代碼自動生成和開源組件代碼的靜態(tài)檢測兩方面。利用開源Mahout代碼對靜態(tài)檢測算法進行實驗驗證,結(jié)果表明,該算法效果較好,能夠相對準(zhǔn)確地找到開源代碼中需要修改的語句,方便開源組件的集成。在未來的工作中,將進一步考慮利用Soot代碼生成的方法,自動化修改有問題的代碼行,從而進一步提高組件集成的自動化程度。
參考文獻
[1] 趙薇,劉杰,葉丹.基于組件的大數(shù)據(jù)分析服務(wù)平臺[J].計算機科學(xué),2014,41(9):75-79.
[2] Hall M,Frank E,Holmes G,et al.The WEKA data mining software:an update[J].ACM SIGKDD explorations newsletter,2009,11(1):10-18.
[3] Ihaka R,Gentleman R.R:a language for data analysis and graphics[J].Journal of computational and graphical statistics,1996,5(3):299-314.
[4] Bouckaert R R,Frank E,Hall M,et al.WEKA Manual for Version 3-7-8[EB/OL].http://prdownloads.sourceforge.net/weka/WekaManual-3-7-12.pdf.
[5] 黃斌,許舒人,蒲衛(wèi).基于MapReduce的數(shù)據(jù)挖掘平臺設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2013,34(2):495-501.
[6] Vallée-Rai R,Co P,Gagnon E,et al.Soot-a Java bytecode optimization framework[C]//Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research.IBM Press,1999:13.
[7] Einarsson A,Nielsen J D.A survivor’s guide to Java program analysis with soot[EB/OL].http://www.brics.dk/SootGuide/sootsurvivorsguide.pdf.
[8] 李遠(yuǎn)玲,陳華,劉麗.Soot的Java程序控制流分析及圖形化輸出[J].計算機系統(tǒng)應(yīng)用,2009,18(10):88-92.
[9] 佟超,王建新,齊建東.基于形式化規(guī)約的缺陷規(guī)則庫構(gòu)建與檢測方法[J].Computer Engineering and Applications,2014,50(13):66-72,102.
[10] Anil R,Dunning T,Friedman E.Mahout in action[M].Manning,2011.
收稿日期:2015-02-06。國家自然科學(xué)基金項目(61170074,6120 2065);國家科技支撐計劃項目(2015BAH06F01,2012BAH14B02)。陳茜,碩士生,主研領(lǐng)域:大數(shù)據(jù)分析,軟件工程。吳懷林,工程師。馬志柔,工程師。劉杰,副研究員。鐘華,研究員。
中圖分類號TP3
文獻標(biāo)識碼A
DOI:10.3969/j.issn.1000-386x.2016.07.008
AN AUTOMATIC DEVELOPMENT AND INTEGRATION APPROACH FOR BIG DATA ANALYSIS MODULES
Chen Xi1,2Wu Huailin2Ma Zhirou2Liu Jie2Zhong Hua2
1(UniversityofChineseAcademyofSciences,Beijing100049,China)2(InstituteofSoftware,ChineseAcademyofSciences,Beijing100190,China)
AbstractAs the coming of big data era, the need of data analysis is becoming increasingly diverse, this results in the incapability of big data analysis tools to meet the customised data analysis requirements by using its own build-in algorithm libraries, to develop or integrate new algorithm is urgently necessary. But existing big data analysis tools algorithm has high learning cost in development and integration, and makes it difficult to develop and integrate a new one. This paper proposes an approach targeted at the automatic algorithms development and integration for big data analysis tools, the algorithms are integrated into analysis tools as modules. The approach first defines the module model, and then presents the automatic generation flow of the module model, finally it puts the emphasis on analysing the automatic code generation and code detection method of modules, and proposes the metadata-based code generation scheme and the Soot control flow-based static code detection algorithm. As the experiment shows, this approach can complete the automatic development and integration for big data analysis modules.
KeywordsBig data analysisModuleSoot control flow analysisCode generation