段軍 張翔
摘 要: 分析了煤礦企業(yè)備件儲(chǔ)備定額的構(gòu)成以及計(jì)算過程中存在的不足,針對原來基于串行處理技術(shù)的備件消耗量預(yù)測方法執(zhí)行效率低,傳統(tǒng)的并行計(jì)算模式關(guān)于節(jié)點(diǎn)失效和負(fù)載均衡問題沒有好的解決方案,提出了基于Hadoop平臺(tái)實(shí)現(xiàn)備件消耗量預(yù)測的設(shè)計(jì)方法,對概率統(tǒng)計(jì)分析方法進(jìn)行改進(jìn),并給出其在Hadoop平臺(tái)的MapReduce編程模型上的執(zhí)行流程。在Hadoop平臺(tái)上對改進(jìn)的備件預(yù)測方法進(jìn)行測試,并與傳統(tǒng)的方法進(jìn)行對比,結(jié)果證明,改進(jìn)后的方法時(shí)間耗費(fèi)小,可擴(kuò)展性高。
關(guān)鍵詞: Hadoop; 備件; 概率統(tǒng)計(jì)分析法; MapReduce
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)05-10-04
Abstract: The composition of reserving quota in the coal mining enterprises and the deficiency existing in the calculation of minimum storage process are analyzed. The original spare parts consumption prediction method based on serial processing execution efficiency is low. The traditional parallel computing mode cannot handle node failure and it is also difficult to deal with issues such as load balancing. The spare parts consumption forecast based on the Hadoop platform is proposed, probability and statistics analysis method has been improved. The implementation process of the improved algorithm based on the MapReduce programming model is given. The improved spare part prediction method is tested on Hadoop platform and compared with the traditional method. The experimental results show that the improved method is less time consuming, and higher extensibility.
Key words: Hadoop; the spare parts; probability and statistics analysis; MapReduce
0 引言
某煤礦集團(tuán)公司成功引進(jìn)了SAP公司的ERP(Enterprise Resource Planning)系統(tǒng),ERP系統(tǒng)的使用給企業(yè)帶來了先進(jìn)的管理理念,建成了完整的企業(yè)資原管理體系和高效、便捷的信息技術(shù)平臺(tái)。但是,其ERP系統(tǒng)里分析和計(jì)算備件儲(chǔ)備定額的功能側(cè)重于機(jī)械制造等備件消耗規(guī)律性較強(qiáng)的行業(yè),對于煤礦企業(yè)這類備件消耗隨需求變化的行業(yè)起不到應(yīng)有的作用,所以我們?yōu)榇碎_發(fā)了備件儲(chǔ)備定額系統(tǒng)來對備件信息進(jìn)行管理,協(xié)助業(yè)務(wù)人員制定備件采購計(jì)劃,自動(dòng)提示所需訂貨的備件等。
但是,隨著系統(tǒng)的使用,一些問題也緊跟著暴露出來。如儲(chǔ)備定額系統(tǒng)對于日常少量備件做消耗量預(yù)測可以在較短的時(shí)間內(nèi)很好地完成,但在年中需要為下半年作訂購計(jì)劃或?yàn)閬砟曛贫ㄓ嗁徲?jì)劃的時(shí)候,因?yàn)槠鋫浼忑嫶螅ìF(xiàn)常用備件有29萬多種,歷史出入庫存記錄數(shù)據(jù)更多),做消耗量預(yù)測時(shí)花費(fèi)時(shí)間很長;而隨著Hadoop云計(jì)算平臺(tái)在各個(gè)領(lǐng)域的運(yùn)用很好地證明了其對海量數(shù)據(jù)的存儲(chǔ)能力和并行計(jì)算能力,為大量備件的消耗量預(yù)測提供了一種新的解決方式。將Hadoop平臺(tái)技術(shù)與煤礦企業(yè)備件儲(chǔ)備定額并行化研究結(jié)合起來是一種很新穎的想法,目前還處于探索階段,也是本文主要研究的內(nèi)容,我們將研究如何解決煤礦企業(yè)備件管理所面臨的難題。
1 基于Hadoop的備件消耗預(yù)測系統(tǒng)框架
利用云計(jì)算平臺(tái)實(shí)現(xiàn)備件消耗預(yù)測,可解決大數(shù)據(jù)集運(yùn)算和存儲(chǔ),并能夠保證系統(tǒng)的可擴(kuò)展性。國際與國內(nèi)已經(jīng)有一些學(xué)者在云計(jì)算平臺(tái)的利用上進(jìn)行了相關(guān)的研究和應(yīng)用,如利用開源云計(jì)算平臺(tái)Hadoop進(jìn)行海量數(shù)據(jù)分析研究[6],在電力行業(yè)進(jìn)行的海量數(shù)據(jù)存儲(chǔ)和安全性研究[7],在數(shù)據(jù)挖掘方面利用Hadoop平臺(tái)進(jìn)行的研究等。借鑒這些研究,筆者在開源云平臺(tái)Hadoop上進(jìn)行備件消耗預(yù)測的研究,其系統(tǒng)架構(gòu)如圖1所示,主要包括數(shù)據(jù)收集模塊、數(shù)據(jù)預(yù)處理模塊和概率統(tǒng)計(jì)分析模塊。
1.1 數(shù)據(jù)采集模塊
系統(tǒng)按需要輸入日期,調(diào)用PI將某大型煤炭集團(tuán)SAP系統(tǒng)中備件的相關(guān)數(shù)據(jù),如備件出庫與入庫量、備件信息、各個(gè)庫存點(diǎn)備件庫存等,這些信息被傳送到本地?cái)?shù)據(jù)庫中可用于分析、計(jì)算。數(shù)據(jù)獲取時(shí),系統(tǒng)通過觸發(fā)接口到PI的Web Service,并向PI傳遞日期(年月),PI傳遞到SAP系統(tǒng)中實(shí)時(shí)計(jì)算庫存、計(jì)劃量、未清訂單以及出入庫量,PI調(diào)用定額系統(tǒng)的Web Services完成數(shù)據(jù)的同步傳輸。
1.2 數(shù)據(jù)預(yù)處理模塊
獲取到備件相關(guān)數(shù)據(jù)后,需要對所獲得的數(shù)據(jù)進(jìn)行數(shù)據(jù)整理和統(tǒng)計(jì)、頻數(shù)分析,以及裕度系數(shù)計(jì)算。具體方法如下。
⑴ 備件出入庫數(shù)據(jù)整理,即根據(jù)備件基本信息和大量備件出入庫信息,選擇出某備件兩年的消耗數(shù)據(jù)(以月為單位),插入到Oracle數(shù)據(jù)庫的備件整理表中。
⑵ 查詢Oracle數(shù)據(jù)庫備件整理表中某備件兩年內(nèi)的消耗數(shù)據(jù),通過對其分析,進(jìn)行選擇性分組,把每組的組中值,頻率,以及備件號(hào)插入到Oracle數(shù)據(jù)庫的備件頻制表中。
⑶ 把頻制表中的記錄根據(jù)備件號(hào),分別把頻率值和組中值插入到
⑷ 建立基于資金占用和關(guān)鍵性的備件評(píng)估數(shù)學(xué)模型,得到用來彌補(bǔ)預(yù)測偏差的裕度系數(shù)k,根據(jù)備件號(hào)插入到Oracle數(shù)據(jù)庫備件本信息表中。
1.3 概率統(tǒng)計(jì)分析模塊
筆者利用開源的Hadoop云計(jì)算平臺(tái)對備件消耗量預(yù)測算法(概率統(tǒng)計(jì)分析法)進(jìn)行MapReduce并行化設(shè)計(jì),并在Hadoop平臺(tái)上實(shí)現(xiàn)MapRedece化備件消耗量預(yù)測算法,利用該算法計(jì)算備件的平均月消耗量。根據(jù)備件的平均月消耗量可以得到訂貨周期內(nèi)的預(yù)測消耗量。概率統(tǒng)計(jì)分析法描述如下[11-12]。
⑴ 收集數(shù)據(jù)。概率統(tǒng)計(jì)分析法對數(shù)據(jù)的要求很低,只需對消耗量進(jìn)行定期統(tǒng)計(jì)。這對企業(yè)而言較為方便。
⑵ 對數(shù)據(jù)進(jìn)行整理,編制頻數(shù)表。
⑶ 計(jì)算平均消耗量。
2.1 Hadoop平臺(tái)簡介
Hadoop是一個(gè)由Apache軟件基金會(huì)開發(fā)的開源分布式云計(jì)算平臺(tái),大數(shù)據(jù)的存儲(chǔ)和分布式處理能力顯著。Hadoop已經(jīng)成為包含許多項(xiàng)目的集合,核心包括Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)和MapReduce分布式計(jì)算模型(Google MapReduce的開源實(shí)現(xiàn)),Hadoop分布式基礎(chǔ)架構(gòu)的底層細(xì)節(jié)對用戶來說是透明的。HDFS的高容錯(cuò)、高伸縮等特性使得用戶在廉價(jià)、低配的硬件上部署Hadoop成為可能;MapReduce分布式編程模型使開發(fā)并行應(yīng)用程序更加簡單,開發(fā)者不必了解分布式系統(tǒng)底層細(xì)節(jié)。用戶可以利用Hadoop方便的架構(gòu)資源,搭建自己的工作集群,充分利用搭建集群的計(jì)算和存儲(chǔ)能力,解決海量數(shù)據(jù)的存儲(chǔ)和運(yùn)算問題[4]。
Hadoop在分布式存儲(chǔ)和分布式計(jì)算方面有著非凡的能力2.2 概率統(tǒng)計(jì)分析法MapReduce化分析和設(shè)計(jì)
根據(jù)MapReduce的計(jì)算框架,大致可以分為兩個(gè)階段:Map階段和Reduce階段。
Map階段:需要處理的輸入數(shù)據(jù)會(huì)被MapReduce框架提供的函數(shù)InputFormat分割成大小一定的片段Splits。MapReduce計(jì)算框架會(huì)根據(jù)被分割的分塊的數(shù)量來創(chuàng)建等量的Map任務(wù),同時(shí)將每個(gè)Splits片段進(jìn)一步分解為
Reduce階段:根據(jù)MapReduce計(jì)算框架,把不同Mapper接收到的數(shù)據(jù)整合,進(jìn)行排序處理,同時(shí)調(diào)用用戶編寫的reduce函數(shù)進(jìn)行處理。
將概率統(tǒng)計(jì)分析法中平均月消耗量的計(jì)算轉(zhuǎn)換成矩陣相乘的形式,構(gòu)建MapReduce算法,將數(shù)據(jù)解析整理放在Map階段,運(yùn)算放在Reduce階段執(zhí)行。
以下給出算法的步驟。
⑴ 備件處理信息的存儲(chǔ)。針對Hadoop平臺(tái)的MapReduce計(jì)算框架,把待處理備件信息按備件號(hào)、行、列、組中值、頻率分為兩個(gè)文件,存儲(chǔ)在Hadoop分布式文件系統(tǒng)HDFS中。
⑵ 在Map函數(shù)中,同時(shí)遍歷兩個(gè)文件,進(jìn)行解析整理操作,形成輸入鍵值對,并對鍵值對進(jìn)行處理,構(gòu)造輸出鍵值對Key/value。
⑶ 中間結(jié)果處理,對Map函數(shù)輸出的鍵值對進(jìn)行整合處理,把Key值相同的Value合并到一起,形成一個(gè)新的鍵值對輸出列表,傳遞給Reduce函數(shù)。
⑷ 在Reduce函數(shù)中,遍歷輸入的鍵值對列表,進(jìn)行乘積和累加運(yùn)算,得到最終結(jié)果。
2.3 Hadoop平臺(tái)實(shí)現(xiàn)概率統(tǒng)計(jì)分析法
基于上述MapReduce化概率統(tǒng)計(jì)分析法的描述,下面介紹該算法在Hadoop平臺(tái)的MapReduce計(jì)算框架的具體執(zhí)行流程:
⑴ 將測試樣本備件消耗量頻數(shù)表,按照{(diào)備件編碼、行、組中值}、{備件編碼、列、頻率}的形式存儲(chǔ)在Hadoop分布式文件系統(tǒng)HDFS中,由SequenceFile類進(jìn)行存儲(chǔ)工作。其中i代表矩陣中的行值,j代表矩陣中的列值。
⑵ Map函數(shù)讀取HDFS中兩個(gè)文件,以[key,value]的形式輸入每一項(xiàng)數(shù)據(jù)。Key是文件中行偏移量,但是在map階段的計(jì)算中我們用不到這個(gè)值,所以可以忽略。Value是存儲(chǔ)文件的每行的數(shù)據(jù)。Map函數(shù)是對輸入鍵值對的值進(jìn)行解析,通過遍歷文件中每一行,分別截取備件編碼、行號(hào)、列號(hào)、組中值和頻率,以備件編碼為Key,(行號(hào)#組中值)、(列號(hào)#頻率)為value的輸出鍵值對。
⑶ MapReduce計(jì)算框架根據(jù)用戶自定義的函數(shù)將Map函數(shù)產(chǎn)生的中間結(jié)果進(jìn)行排序整合處理,形成一個(gè)備件編碼相同的value列表。以此作為Reduce函數(shù)的輸入。
⑷ Reduce函數(shù)階段,對輸入列表中的值進(jìn)行遍歷,進(jìn)行result+=valA[i]*valB[j]運(yùn)算。圖3展示了整個(gè)MapReduce的計(jì)算執(zhí)行過程。
MapReduce化設(shè)計(jì)的概率統(tǒng)計(jì)分析法算法,在解決節(jié)點(diǎn)失效和負(fù)載不易均衡這兩個(gè)問題上也取得了不錯(cuò)的效果。
一是在Hadoop集群中,如果其中某一臺(tái)計(jì)算機(jī)發(fā)生故障從而停止工作,那么被這臺(tái)計(jì)算機(jī)上運(yùn)行的計(jì)算任務(wù)會(huì)被轉(zhuǎn)移交接給集群中沒有任務(wù)處理而處于空閑狀態(tài)的計(jì)算機(jī)處理。
二是Hadoop上處理的任務(wù)塊數(shù)可以變動(dòng),不論計(jì)算任務(wù)的大小,可以通過更改配置文件的手段來設(shè)定每個(gè)Map數(shù)據(jù)塊的大小,以使所處理的任務(wù)塊數(shù)遠(yuǎn)大于集群中計(jì)算機(jī)的節(jié)點(diǎn)數(shù),這樣,寶貴的計(jì)算資源就不會(huì)被浪費(fèi),也可以達(dá)到負(fù)載均衡的目的。
3 實(shí)驗(yàn)結(jié)果與分析
3.1 實(shí)驗(yàn)環(huán)境
本實(shí)驗(yàn)選取三臺(tái)計(jì)算機(jī)搭建Hadoop平臺(tái),計(jì)算機(jī)系統(tǒng)采用 Ubuntu Linux 10.10,Hadoop版本選用Hadoop—1.1.2,一臺(tái)機(jī)器作為Master和JobTracker服務(wù)節(jié)點(diǎn)3.2 實(shí)驗(yàn)數(shù)據(jù)選取
選取某大型煤炭集團(tuán)備件消耗記錄為實(shí)驗(yàn)數(shù)據(jù),實(shí)驗(yàn)數(shù)據(jù)分為Bjdb1、Bjdb2、Bjdb3和Bjdb4四個(gè)大小不同的數(shù)據(jù)集,它們的大小分別為:1000、10000、100000和1000000條備件消耗記錄。每組的消耗記錄分別由備件的編號(hào)、組中值、頻率組成。
3.3 實(shí)驗(yàn)結(jié)果及分析
實(shí)驗(yàn)內(nèi)容為:分別采用上面選定的大小不同的四個(gè)數(shù)據(jù)集,比較C/S模式和hadoop平臺(tái)的MapReduce模式下的備件預(yù)測消耗量的計(jì)算,即概率統(tǒng)計(jì)分析算法的實(shí)現(xiàn)所需要的時(shí)間。實(shí)驗(yàn)的硬件環(huán)境是在實(shí)驗(yàn)室局域網(wǎng)內(nèi)的PC機(jī)上。
在上述實(shí)驗(yàn)中,數(shù)據(jù)的規(guī)模是逐漸增長的,實(shí)驗(yàn)情況如表3所示(T1為C/S模式單機(jī)上運(yùn)行串行算法所用時(shí)間;T2為運(yùn)行MapReduce化設(shè)計(jì)的算法所用時(shí)間)。
c/s模式處理數(shù)據(jù)所用時(shí)間的消耗增長較快,呈線性增長直到100萬條數(shù)據(jù)集時(shí)機(jī)器宕機(jī)。而MapReduce并行計(jì)算方式處理數(shù)據(jù)的時(shí)間消耗隨著數(shù)據(jù)集的增長緩慢增長,最終完成100萬條記錄運(yùn)算所需的時(shí)間開銷很小。在測試數(shù)據(jù)集較小的情況下,MapReduce化設(shè)計(jì)的并行計(jì)算方式的時(shí)間性比不上C/S模式,C/S模式在小數(shù)據(jù)量時(shí)機(jī)器性能尚能滿足計(jì)算要求,機(jī)器內(nèi)的通信要比機(jī)器間的通信節(jié)省時(shí)間,master節(jié)點(diǎn)和slave節(jié)點(diǎn)通信、slave節(jié)點(diǎn)并發(fā)處理數(shù)據(jù)會(huì)比C/S模式耗費(fèi)時(shí)間,所以C/S模式下所消耗的時(shí)間要比MapReduce模式下少。而當(dāng)數(shù)據(jù)量逐漸增大時(shí),C/S模式下的單機(jī)運(yùn)算要遠(yuǎn)遠(yuǎn)遜色于Hadoop集群的強(qiáng)大計(jì)算能力,C/S模式要想獲得與Hadoop集群相應(yīng)的能力就要增加硬件性能。由此可知,Hadoop集群不適合小數(shù)據(jù)量的處理,而更適合處理大數(shù)據(jù)量的計(jì)算。
4 結(jié)束語
本文對于煤礦企業(yè)備件儲(chǔ)備定額系統(tǒng)在備件預(yù)測消耗量的計(jì)算上做了改進(jìn),提出基于Hadoop 平臺(tái)對備件消耗量預(yù)測進(jìn)行MapReduce化設(shè)計(jì),并在Hadoop平臺(tái)上實(shí)現(xiàn)MapReduce化備件消耗量預(yù)測算法。從實(shí)驗(yàn)結(jié)果可以看出,在處理大規(guī)模數(shù)據(jù)集時(shí),基于 Hadoop 平臺(tái)改進(jìn)的預(yù)測消耗量算法執(zhí)行效率上有較好的表現(xiàn),而且基于Hadoop的計(jì)算具有更加好的移植性和容錯(cuò)性。下一步,筆者將嘗試Oracle數(shù)據(jù)庫和Hadoop平臺(tái)的連接處理,不用從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),直接以數(shù)據(jù)庫中的待處理表為輸入MapReduce并行化模型中Map階段的輸入,Reduce階段輸出結(jié)果直接寫入到數(shù)據(jù)庫相關(guān)表中,使得執(zhí)行效率進(jìn)一步提升。
參考文獻(xiàn):
[1] 王意潔,孫偉東,周松.云計(jì)算環(huán)境下的分布存儲(chǔ)關(guān)鍵技術(shù)[J].軟件學(xué)
報(bào),2012.23(4):962-986
[2] 劉鵬.云計(jì)算[M].電子工業(yè)出版社,2010.
[3] 維基百科.云計(jì)算[EB/OL].http://zh.wikipedia.org/wiki/云計(jì)算,
2011.10.23.
[4] 劉鵬.實(shí)戰(zhàn)Hadoop——開啟通向云計(jì)算的捷徑[M].電子工業(yè)出版
社,2011.
[5] Michael Armbrust.Above the clouds: A Berkeley View of Cloud
Computing[EB/OL].http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf,2009.2.10.
[6] 王敬昌.基于Hadoop分布式計(jì)算架構(gòu)的海量數(shù)據(jù)分析[J].數(shù)字技術(shù)
與應(yīng)用,2010.7.
[7] 朱珠.基于Hadoop的海量數(shù)據(jù)處理模型研究和應(yīng)用[D].北京郵電大
學(xué),2008.
[8] 張少敏,李曉強(qiáng),王保義.基于Hadoop的智能電網(wǎng)數(shù)據(jù)安全存儲(chǔ)設(shè)計(jì)[J].
電力系統(tǒng)保護(hù)與控制,2013.41(14):136-140
[9] 胡志剛,梁曉楊.基于Hadoop的海量網(wǎng)格數(shù)據(jù)建模[J].計(jì)算機(jī)系統(tǒng)應(yīng)
用,2010.19(10):191-194
[10] 余楚禮.基于Hadoop的并行關(guān)聯(lián)規(guī)則算法研究[D].天津理工大學(xué),
2011.
[11] 段軍,郭穎.煤礦企業(yè)備件儲(chǔ)備定額的研究[J].煤礦機(jī)械,2011.32
(11):70-72
[12] 郭穎.煤礦企業(yè)備件動(dòng)態(tài)儲(chǔ)備定額管理系統(tǒng)的研究[D].內(nèi)蒙古科技
大學(xué),2011.
[13] 謝娟,何嘉鵬,張葉,閻麗萍.基于C#地鐵站安全疏散模糊綜合評(píng)價(jià)
系統(tǒng)的開發(fā)與應(yīng)用[J].南京工業(yè)大學(xué)學(xué)報(bào),2007.29(6):28-31
[14] 李玲,任青,付園,陳鶴,梅圣民.基于Hadoop的社交網(wǎng)絡(luò)服務(wù)推薦
算法[J].吉林大學(xué)學(xué)報(bào),2013.31(4):359-364