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