王 軍,劉文化,于偉東
紡織裝備企業(yè)重點提升產(chǎn)品的自動化、數(shù)字化、網(wǎng)絡(luò)化和智能化水平[1]。目前隨著傳統(tǒng)的紡織工藝進(jìn)行知識融合與知識重用,上百個工藝參數(shù)的逐步進(jìn)行優(yōu)化[2],生產(chǎn)過程出現(xiàn)了“數(shù)據(jù)豐富而知識貧乏”的現(xiàn)象逐步獲得有效解決,但隨之而來的則是企業(yè)的集成信息系統(tǒng)尤其是生產(chǎn)制造系統(tǒng)每天獲取的數(shù)據(jù)隨著應(yīng)用精度的提高呈幾何級遞增,因此在如何分發(fā)、存儲、管理和共享這些海量數(shù)據(jù)已成為亟待解決的問題。本文在研究Hadoop框架的基礎(chǔ)上,提出一種基于Hadoop 的海量紡織生產(chǎn)數(shù)據(jù)的存儲管理體系。
紡織品的生產(chǎn)鏈?zhǔn)菑脑牧先缪蛎⒚藁ǖ酿B(yǎng)殖開始的,一般要經(jīng)過原料初加工、前紡準(zhǔn)備、后紡、織布、染整等幾大工序,工藝流程長,各類工藝過程既有纖維材料成形方式的不同,也有為得到不同性能和質(zhì)量指標(biāo)的半成品或成品所采用加工方法的差別,這其中包括材料位移過程、流體動力學(xué)過程、物質(zhì)熱交換過程、化學(xué)反應(yīng)過程,以及借助于工藝設(shè)備順序或并列完成工藝操作的過程等[3]。紡織品加工過程的數(shù)據(jù)主要體現(xiàn)在:工藝過程的動態(tài)性和數(shù)據(jù)的多樣性。紡織品加工過程中各種質(zhì)量控制指標(biāo)處于不斷變化的動態(tài)過程中,數(shù)據(jù)類型存在多樣性,既有數(shù)值型,也有非數(shù)值型[5]。同時由于大量數(shù)據(jù)產(chǎn)生的時間和環(huán)節(jié)不一致,數(shù)據(jù)分布比較分散;所以分布式的數(shù)據(jù)組織管理成為一種必要手段。
目前大多數(shù)紡織企業(yè)的生產(chǎn)制造層面的制造執(zhí)行系統(tǒng)(MES)、自動監(jiān)測和動態(tài)精細(xì)化管理系統(tǒng),企業(yè)資源計劃系統(tǒng)(ERP)等集成應(yīng)用系統(tǒng)仍然采用傳統(tǒng)的分布式數(shù)據(jù)庫架構(gòu)存儲和管理數(shù)據(jù),需要耗費昂貴得計算資源,其效率并不高,且系統(tǒng)的存儲能力受制于所依賴的數(shù)據(jù)庫管理系統(tǒng)的能力,對于如何把大批量數(shù)據(jù)分割、計算合理分配都需要冗長的程序執(zhí)行才能實現(xiàn)。
Hadoop是Apache開源組織的一個分布式計算框架,可以在大量廉價的硬件設(shè)備組成的集群上運行應(yīng)用程序,構(gòu)建一個具有高可靠性和良好擴(kuò)展性的并行分布式系統(tǒng),Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)、MapReduce編程模型和HBase分布式數(shù)據(jù)庫是其三大核心技術(shù)[4]。
MapReduce是一種線形的可伸縮編程模型,包括Map函數(shù)和Reduce函數(shù)。這些函數(shù)無視數(shù)據(jù)的大小或者他們正在使用的集群的特性。關(guān)系型數(shù)據(jù)庫管理系統(tǒng)往往使用于數(shù)據(jù)集索引已經(jīng)被建立的查詢和更新。MapReduce適合處理需要分析整個數(shù)據(jù)集的問題,尤其是自主或及時地分析。而生產(chǎn)過程中的數(shù)據(jù)往往是隨時更新,并且數(shù)據(jù)量大,需要實時得到處理結(jié)果。MapReduce滿足了數(shù)據(jù)被一次寫入和多次讀取的需求,同時對與半結(jié)構(gòu)化的數(shù)據(jù)非常有效。關(guān)系型數(shù)據(jù)庫則相對更適合持續(xù)更新的數(shù)據(jù)集,即寫入的數(shù)據(jù)不斷變化,但輸入的數(shù)據(jù)要符合特定的預(yù)定義模式。另外,MapReduce還有支持PB級的數(shù)據(jù)量、支持?jǐn)?shù)據(jù)結(jié)構(gòu)的動態(tài)模式、進(jìn)行高速流讀寫等優(yōu)點。
HDF是為流式數(shù)據(jù)訪問模式存儲超大文件而設(shè)計的文件系統(tǒng)。目前已經(jīng)有Hadoop集群存儲PB級的數(shù)據(jù)量。HDFS是建立在一次寫入,多次讀取模式是最高效的思想上[7]。一個數(shù)據(jù)集由數(shù)據(jù)源直接生成或者復(fù)制獲得,而后進(jìn)行相關(guān)的數(shù)據(jù)分析,所以為分析提供的數(shù)據(jù)集的讀取比第一條記錄讀取的延遲更重要。因此,HDFS建立了流式數(shù)據(jù)訪問機(jī)制。
HBase是一種構(gòu)建在HDFS之上的分布式、面向列的存儲系統(tǒng)。適合于需要實時讀寫、隨即訪問超大數(shù)據(jù)集的情況。HBase通過線形方式從下到上增加節(jié)點來進(jìn)行擴(kuò)展。HBase自動把表橫向切分為不同區(qū)域,每個區(qū)域包含表所有行的一個子集。初始表只包含單個區(qū)域,但隨著區(qū)域擴(kuò)大到超過設(shè)置的閥值,便以行為分界線,劃分成大小差不多的兩個新區(qū)域。因此對于任何一個服務(wù)器,再大的表都可以由服務(wù)器集群來處理。
根據(jù)紡織生產(chǎn)過程產(chǎn)生的數(shù)據(jù)及數(shù)據(jù)的使用需求[6],源數(shù)據(jù)層主要功能是數(shù)據(jù)的獲取存儲,數(shù)據(jù)處理層主要實現(xiàn)數(shù)據(jù)的并行加載存儲,數(shù)據(jù)存儲層主要實現(xiàn)為數(shù)據(jù)應(yīng)用展現(xiàn)所需數(shù)據(jù)的存儲。在該架構(gòu)中通過使用HDFS存儲海量源數(shù)據(jù),通過MapReduce處理這些海量源數(shù)據(jù),用HBase分布式數(shù)據(jù)庫存儲處理后生產(chǎn)數(shù)據(jù)。通過三個層面的數(shù)據(jù)流轉(zhuǎn)從而設(shè)計實現(xiàn)紡織海量生產(chǎn)數(shù)據(jù)的存儲系統(tǒng).具體實現(xiàn)結(jié)構(gòu)如圖1。
在從生產(chǎn)過程中采集數(shù)據(jù)后如圖2為Client對HDFS讀寫數(shù)據(jù)體系。
圖2 Client對HDFS讀寫數(shù)據(jù)體系
HDFS Client通過調(diào)用FileSystem對象的open()來讀取文件[4]。Distributed Filesystem通過使用RPC來調(diào)用Name Node,以確定文件開頭部分的塊位置。對于每一個塊,Name Node返回具有該塊副本的數(shù)據(jù)節(jié)點。Distributed Filesystem返回一個FSData InputStream對象給Client讀取數(shù)據(jù)。FSdata Input-Stream轉(zhuǎn)而包裝一個DFSInputStream對象。Client對這個輸入流調(diào)用read()。存儲著文件開頭部分的塊的數(shù)據(jù)節(jié)點地址的DFSInputStream隨即與這些塊最近的數(shù)據(jù)節(jié)點相連接。通過在數(shù)據(jù)流中反復(fù)調(diào)用read(),數(shù)據(jù)會從不同的數(shù)據(jù)節(jié)點(如圖中的四個數(shù)據(jù)節(jié)點)返回客戶端。到達(dá)塊的末端時,DFSInputStream會close()與數(shù)據(jù)節(jié)點間的聯(lián)系,然后為下一個塊找到最佳的數(shù)據(jù)節(jié)點。Client從流中讀取data block是按照DFSInputStream與不同的數(shù)據(jù)節(jié)點的新連接順序讀取的,一旦Client讀取完成,就對File System輸入流調(diào)用close()。在整個過程中,Client只需要讀取一個連續(xù)的流即可獲得整體的需要分析的數(shù)據(jù)集。依次過程,Client對HDFS寫入數(shù)據(jù)到各個Data Node。
MapReduce的工作分為兩個階段:map階段和reduce階段。每個階段都有鍵/值對作為輸入和輸出,其類型可以支持自定義。在此階段定義了兩個函數(shù):map函數(shù)和reduce函數(shù)。map函數(shù)負(fù)責(zé)把單任務(wù)分解為多任務(wù),reduce函數(shù)負(fù)責(zé)把分解后多任務(wù)的處理結(jié)果匯總起來,根據(jù)需求得到需要的結(jié)果。將HDFS中的數(shù)據(jù)根據(jù)處理能力分解成小數(shù)據(jù)集,然后進(jìn)行map并行操作,map函數(shù)輸入的是前一階段Client寫入到HDFS 各個Data Node中的數(shù)據(jù)。map函數(shù)的處理的輸出結(jié)果先由MapReduce框架處理,經(jīng)過combine后發(fā)送給reduce函數(shù)。reduce函數(shù)根據(jù)需求如根據(jù)鍵來對
圖3 MapReduce數(shù)據(jù)流模型
由于紡織生產(chǎn)過程中產(chǎn)生的數(shù)據(jù)由結(jié)構(gòu)化的數(shù)據(jù)、半結(jié)構(gòu)畫化、非結(jié)構(gòu)化的數(shù)據(jù),并且多數(shù)為半結(jié)構(gòu)化的數(shù)據(jù)。所以在此階段用MapReduce輸入的鍵和值并不是數(shù)據(jù)固有屬性的特點,根據(jù)分析來選擇其鍵值在處理時間內(nèi)解釋數(shù)據(jù)非常有效。同時,MapReduce通過一個JobTracker的調(diào)度和管理及監(jiān)控任務(wù)的運行,通過多個TaskTracker來執(zhí)行任務(wù),有效提高系統(tǒng)執(zhí)行能力。
通過MapReduce模型輸出的數(shù)據(jù)被存儲在HBase分布式存儲系統(tǒng)中。HBase由一個主節(jié)點和多個服務(wù)器從節(jié)點組成。主節(jié)點負(fù)責(zé)分配區(qū)域給已經(jīng)注冊的服務(wù)器從節(jié)點,從節(jié)點故障處理;從節(jié)點負(fù)責(zé)響應(yīng)Client的讀寫請求,同時也負(fù)責(zé)通知主節(jié)點從節(jié)點的分裂、衍生信息。HBase通過HDFS的API進(jìn)行數(shù)據(jù)維護(hù)。在紡織海量生產(chǎn)數(shù)據(jù)的HBase的表中,行是經(jīng)過排序的,并且列可以被客戶端隨時增加的。該系統(tǒng)可以容納寬的、稀疏的表而不增加開銷。紡織海量生產(chǎn)數(shù)據(jù)存儲系統(tǒng)中將行輸入數(shù)據(jù)write()或copy()到HDFS上,同時運行MapReduce讀取輸入數(shù)據(jù)并寫到Hbase,所有需要的數(shù)據(jù)全部讀入后再寫入所有節(jié)點上。隨著寫入數(shù)據(jù)的增加和表的劃分,數(shù)據(jù)將被分布的不同的從節(jié)點上。
該系統(tǒng)根據(jù)紡織生產(chǎn)過程的不同特點通過Hadoop實現(xiàn)了紡織海量生產(chǎn)數(shù)據(jù)的存儲。通過HDFS實現(xiàn)了數(shù)據(jù)的一次寫入,多次讀??;通過MapReduce實現(xiàn)了充分的并行性,將作業(yè)有效分布到數(shù)據(jù)上;通過HBase實現(xiàn)了隨著表空間增長的自動分區(qū)、區(qū)域自動平衡、訪問數(shù)據(jù)在毫秒范圍內(nèi)的應(yīng)用。運行表明,系統(tǒng)安全可靠、易維護(hù)、具有良好的可擴(kuò)展性。但該系統(tǒng)中也存在不足及待完善的地方:Name Node的擴(kuò)展性問題,MapReduce數(shù)據(jù)流中I/O性能優(yōu)化問題,MapReduce執(zhí)行、調(diào)度有待進(jìn)一步提高,這一系列問題未進(jìn)一步的研究提供指引。
[1]紡織工業(yè)“十二五”發(fā)展規(guī)劃 2012年1月
[2]于偉東,楊建國.紡織工業(yè)中的虛擬加工技術(shù)與模式.紡織導(dǎo)報,7,10-16,22(2005)
[3]劉貴.精毛紡織品虛擬加工中的預(yù)報與反演模型研究[博士論文].上海:東華大學(xué),2010
[4]曾大聃,周傲英譯.Hadoop權(quán)威指南(中文版).清華大學(xué)出版社,2010.5
[5]殷祥剛,項前、呂志軍,于偉東.基于智能技術(shù)的精毛紡織品全程虛擬加工系統(tǒng).西安工程大學(xué)學(xué)報,22(4),407-411(2008)Hadoop.http://hadoop.apache.org/