王 軍,劉文化,于偉東
紡織裝備企業(yè)重點提升產品的自動化、數字化、網絡化和智能化水平[1]。目前隨著傳統(tǒng)的紡織工藝進行知識融合與知識重用,上百個工藝參數的逐步進行優(yōu)化[2],生產過程出現了“數據豐富而知識貧乏”的現象逐步獲得有效解決,但隨之而來的則是企業(yè)的集成信息系統(tǒng)尤其是生產制造系統(tǒng)每天獲取的數據隨著應用精度的提高呈幾何級遞增,因此在如何分發(fā)、存儲、管理和共享這些海量數據已成為亟待解決的問題。本文在研究Hadoop框架的基礎上,提出一種基于Hadoop 的海量紡織生產數據的存儲管理體系。
紡織品的生產鏈是從原材料如羊毛、棉花的養(yǎng)殖開始的,一般要經過原料初加工、前紡準備、后紡、織布、染整等幾大工序,工藝流程長,各類工藝過程既有纖維材料成形方式的不同,也有為得到不同性能和質量指標的半成品或成品所采用加工方法的差別,這其中包括材料位移過程、流體動力學過程、物質熱交換過程、化學反應過程,以及借助于工藝設備順序或并列完成工藝操作的過程等[3]。紡織品加工過程的數據主要體現在:工藝過程的動態(tài)性和數據的多樣性。紡織品加工過程中各種質量控制指標處于不斷變化的動態(tài)過程中,數據類型存在多樣性,既有數值型,也有非數值型[5]。同時由于大量數據產生的時間和環(huán)節(jié)不一致,數據分布比較分散;所以分布式的數據組織管理成為一種必要手段。
目前大多數紡織企業(yè)的生產制造層面的制造執(zhí)行系統(tǒng)(MES)、自動監(jiān)測和動態(tài)精細化管理系統(tǒng),企業(yè)資源計劃系統(tǒng)(ERP)等集成應用系統(tǒng)仍然采用傳統(tǒng)的分布式數據庫架構存儲和管理數據,需要耗費昂貴得計算資源,其效率并不高,且系統(tǒng)的存儲能力受制于所依賴的數據庫管理系統(tǒng)的能力,對于如何把大批量數據分割、計算合理分配都需要冗長的程序執(zhí)行才能實現。
Hadoop是Apache開源組織的一個分布式計算框架,可以在大量廉價的硬件設備組成的集群上運行應用程序,構建一個具有高可靠性和良好擴展性的并行分布式系統(tǒng),Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)、MapReduce編程模型和HBase分布式數據庫是其三大核心技術[4]。
MapReduce是一種線形的可伸縮編程模型,包括Map函數和Reduce函數。這些函數無視數據的大小或者他們正在使用的集群的特性。關系型數據庫管理系統(tǒng)往往使用于數據集索引已經被建立的查詢和更新。MapReduce適合處理需要分析整個數據集的問題,尤其是自主或及時地分析。而生產過程中的數據往往是隨時更新,并且數據量大,需要實時得到處理結果。MapReduce滿足了數據被一次寫入和多次讀取的需求,同時對與半結構化的數據非常有效。關系型數據庫則相對更適合持續(xù)更新的數據集,即寫入的數據不斷變化,但輸入的數據要符合特定的預定義模式。另外,MapReduce還有支持PB級的數據量、支持數據結構的動態(tài)模式、進行高速流讀寫等優(yōu)點。
HDF是為流式數據訪問模式存儲超大文件而設計的文件系統(tǒng)。目前已經有Hadoop集群存儲PB級的數據量。HDFS是建立在一次寫入,多次讀取模式是最高效的思想上[7]。一個數據集由數據源直接生成或者復制獲得,而后進行相關的數據分析,所以為分析提供的數據集的讀取比第一條記錄讀取的延遲更重要。因此,HDFS建立了流式數據訪問機制。
HBase是一種構建在HDFS之上的分布式、面向列的存儲系統(tǒng)。適合于需要實時讀寫、隨即訪問超大數據集的情況。HBase通過線形方式從下到上增加節(jié)點來進行擴展。HBase自動把表橫向切分為不同區(qū)域,每個區(qū)域包含表所有行的一個子集。初始表只包含單個區(qū)域,但隨著區(qū)域擴大到超過設置的閥值,便以行為分界線,劃分成大小差不多的兩個新區(qū)域。因此對于任何一個服務器,再大的表都可以由服務器集群來處理。
根據紡織生產過程產生的數據及數據的使用需求[6],源數據層主要功能是數據的獲取存儲,數據處理層主要實現數據的并行加載存儲,數據存儲層主要實現為數據應用展現所需數據的存儲。在該架構中通過使用HDFS存儲海量源數據,通過MapReduce處理這些海量源數據,用HBase分布式數據庫存儲處理后生產數據。通過三個層面的數據流轉從而設計實現紡織海量生產數據的存儲系統(tǒng).具體實現結構如圖1。
在從生產過程中采集數據后如圖2為Client對HDFS讀寫數據體系。

圖2 Client對HDFS讀寫數據體系
HDFS Client通過調用FileSystem對象的open()來讀取文件[4]。Distributed Filesystem通過使用RPC來調用Name Node,以確定文件開頭部分的塊位置。對于每一個塊,Name Node返回具有該塊副本的數據節(jié)點。Distributed Filesystem返回一個FSData InputStream對象給Client讀取數據。FSdata Input-Stream轉而包裝一個DFSInputStream對象。Client對這個輸入流調用read()。存儲著文件開頭部分的塊的數據節(jié)點地址的DFSInputStream隨即與這些塊最近的數據節(jié)點相連接。通過在數據流中反復調用read(),數據會從不同的數據節(jié)點(如圖中的四個數據節(jié)點)返回客戶端。到達塊的末端時,DFSInputStream會close()與數據節(jié)點間的聯系,然后為下一個塊找到最佳的數據節(jié)點。Client從流中讀取data block是按照DFSInputStream與不同的數據節(jié)點的新連接順序讀取的,一旦Client讀取完成,就對File System輸入流調用close()。在整個過程中,Client只需要讀取一個連續(xù)的流即可獲得整體的需要分析的數據集。依次過程,Client對HDFS寫入數據到各個Data Node。
MapReduce的工作分為兩個階段:map階段和reduce階段。每個階段都有鍵/值對作為輸入和輸出,其類型可以支持自定義。在此階段定義了兩個函數:map函數和reduce函數。map函數負責把單任務分解為多任務,reduce函數負責把分解后多任務的處理結果匯總起來,根據需求得到需要的結果。將HDFS中的數據根據處理能力分解成小數據集,然后進行map并行操作,map函數輸入的是前一階段Client寫入到HDFS 各個Data Node中的數據。map函數的處理的輸出結果先由MapReduce框架處理,經過combine后發(fā)送給reduce函數。reduce函數根據需求如根據鍵來對

圖3 MapReduce數據流模型
由于紡織生產過程中產生的數據由結構化的數據、半結構畫化、非結構化的數據,并且多數為半結構化的數據。所以在此階段用MapReduce輸入的鍵和值并不是數據固有屬性的特點,根據分析來選擇其鍵值在處理時間內解釋數據非常有效。同時,MapReduce通過一個JobTracker的調度和管理及監(jiān)控任務的運行,通過多個TaskTracker來執(zhí)行任務,有效提高系統(tǒng)執(zhí)行能力。
通過MapReduce模型輸出的數據被存儲在HBase分布式存儲系統(tǒng)中。HBase由一個主節(jié)點和多個服務器從節(jié)點組成。主節(jié)點負責分配區(qū)域給已經注冊的服務器從節(jié)點,從節(jié)點故障處理;從節(jié)點負責響應Client的讀寫請求,同時也負責通知主節(jié)點從節(jié)點的分裂、衍生信息。HBase通過HDFS的API進行數據維護。在紡織海量生產數據的HBase的表中,行是經過排序的,并且列可以被客戶端隨時增加的。該系統(tǒng)可以容納寬的、稀疏的表而不增加開銷。紡織海量生產數據存儲系統(tǒng)中將行輸入數據write()或copy()到HDFS上,同時運行MapReduce讀取輸入數據并寫到Hbase,所有需要的數據全部讀入后再寫入所有節(jié)點上。隨著寫入數據的增加和表的劃分,數據將被分布的不同的從節(jié)點上。
該系統(tǒng)根據紡織生產過程的不同特點通過Hadoop實現了紡織海量生產數據的存儲。通過HDFS實現了數據的一次寫入,多次讀取;通過MapReduce實現了充分的并行性,將作業(yè)有效分布到數據上;通過HBase實現了隨著表空間增長的自動分區(qū)、區(qū)域自動平衡、訪問數據在毫秒范圍內的應用。運行表明,系統(tǒng)安全可靠、易維護、具有良好的可擴展性。但該系統(tǒng)中也存在不足及待完善的地方:Name Node的擴展性問題,MapReduce數據流中I/O性能優(yōu)化問題,MapReduce執(zhí)行、調度有待進一步提高,這一系列問題未進一步的研究提供指引。
[1]紡織工業(yè)“十二五”發(fā)展規(guī)劃 2012年1月
[2]于偉東,楊建國.紡織工業(yè)中的虛擬加工技術與模式.紡織導報,7,10-16,22(2005)
[3]劉貴.精毛紡織品虛擬加工中的預報與反演模型研究[博士論文].上海:東華大學,2010
[4]曾大聃,周傲英譯.Hadoop權威指南(中文版).清華大學出版社,2010.5
[5]殷祥剛,項前、呂志軍,于偉東.基于智能技術的精毛紡織品全程虛擬加工系統(tǒng).西安工程大學學報,22(4),407-411(2008)Hadoop.http://hadoop.apache.org/