江 順, 陳榮宇, 林偉君, 吳麗丹
(1.廣東省農(nóng)業(yè)科學(xué)院農(nóng)業(yè)經(jīng)濟(jì)與信息研究所, 廣東廣州 510640;2.農(nóng)業(yè)農(nóng)村部華南都市農(nóng)業(yè)重點(diǎn)實(shí)驗(yàn)室, 廣東廣州 510640; 3.海豐縣農(nóng)業(yè)科學(xué)研究所, 廣東海豐 516400;4.汕頭市農(nóng)業(yè)科學(xué)研究所, 廣東汕頭 515031)
進(jìn)入21世紀(jì),大數(shù)據(jù)、物聯(lián)網(wǎng)和云計(jì)算技術(shù)推動(dòng)信息技術(shù)和互聯(lián)網(wǎng)進(jìn)一步蓬勃發(fā)展,現(xiàn)階段互聯(lián)網(wǎng)成為了正在發(fā)展中的高效率信息庫和信息交換中心,使人類生產(chǎn)生活方式產(chǎn)生了巨大變革,大數(shù)據(jù)技術(shù)和云計(jì)算技術(shù)是這一階段信息技術(shù)和互聯(lián)網(wǎng)發(fā)展的核心焦點(diǎn)。物聯(lián)網(wǎng)技術(shù)的更新迭代促使萬物互聯(lián)的互聯(lián)網(wǎng)時(shí)代來臨,網(wǎng)絡(luò)數(shù)據(jù)規(guī)模進(jìn)一步膨脹,這些數(shù)據(jù)中大部分為非結(jié)構(gòu)化數(shù)據(jù)。據(jù)IDC的調(diào)查報(bào)告顯示,企業(yè)中80%的數(shù)據(jù)是非結(jié)構(gòu)化數(shù)據(jù)且這些數(shù)據(jù)每年都按指數(shù)增長(zhǎng)60%(該年度數(shù)據(jù)規(guī)模為前1年的1.6倍)。大數(shù)據(jù)系統(tǒng)既是在這樣一個(gè)時(shí)代背景之下誕生,使這些非結(jié)構(gòu)化數(shù)據(jù)被有效管理和利用成為可能。從技術(shù)上看,大數(shù)據(jù)與云計(jì)算的關(guān)系就像一枚硬幣的正反面一樣密不可分,大數(shù)據(jù)必然無法用單臺(tái)的計(jì)算機(jī)進(jìn)行處理,必須采用分布式架構(gòu),它的特色在于對(duì)海量數(shù)據(jù)進(jìn)行分布式數(shù)據(jù)挖掘,但它必須依托云計(jì)算的分布式處理、分布式數(shù)據(jù)庫和云存儲(chǔ)、虛擬化技術(shù)。
隨著物聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算等技術(shù)應(yīng)用領(lǐng)域不斷下沉至社會(huì)生活生產(chǎn)實(shí)踐中,數(shù)字農(nóng)業(yè)也越來越成為現(xiàn)在和未來農(nóng)業(yè)產(chǎn)業(yè)發(fā)展的焦點(diǎn),數(shù)字農(nóng)業(yè)在中國(guó)農(nóng)業(yè)生產(chǎn)中應(yīng)用的不斷加深,促使中國(guó)傳統(tǒng)農(nóng)業(yè)的生產(chǎn)方式發(fā)生重大變革,越來越多粗放的、機(jī)械的、經(jīng)驗(yàn)的生產(chǎn)模式不斷向集約化、智能化、科學(xué)化發(fā)展。如今數(shù)字應(yīng)用已經(jīng)成為工業(yè)生產(chǎn)和社會(huì)生活的主流,而農(nóng)業(yè)生產(chǎn)中數(shù)字化技術(shù)應(yīng)用仍然處于初創(chuàng)期,農(nóng)業(yè)領(lǐng)域可能是信息化和數(shù)字化普及的最后一個(gè)產(chǎn)業(yè)。導(dǎo)致農(nóng)業(yè)領(lǐng)域數(shù)字化技術(shù)的應(yīng)用普及緩慢的原因是多層次的,其中最主要的原因在于中國(guó)農(nóng)村分散的生產(chǎn)經(jīng)營(yíng)模式不利于信息化系統(tǒng)的數(shù)據(jù)資源集中。而隨著農(nóng)村通信基礎(chǔ)設(shè)施的不斷完善、農(nóng)業(yè)物聯(lián)網(wǎng)技術(shù)的逐步成熟,國(guó)家大力推動(dòng)現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)園的建設(shè),農(nóng)業(yè)全產(chǎn)業(yè)鏈的數(shù)據(jù)集成成為可能。鑒于此,筆者在對(duì)大數(shù)據(jù)架構(gòu)的研究基礎(chǔ)上提出一種基于Lambda Architecture大數(shù)據(jù)架構(gòu)的農(nóng)業(yè)云服務(wù)平臺(tái)解決方案。
Lambda 架構(gòu)(Lambda Architecture)是由工程師南森·馬茨(Nathan Marz)根據(jù)他在Backtype和Twitter從事分部式數(shù)據(jù)處理系統(tǒng)工作的經(jīng)驗(yàn)提出的大數(shù)據(jù)處理架構(gòu),其目的是指導(dǎo)用戶充分利用批處理和流式技術(shù)各自優(yōu)點(diǎn),用于實(shí)現(xiàn)復(fù)雜的大數(shù)據(jù)系統(tǒng)。在大數(shù)據(jù)處理系統(tǒng)中,批處理系統(tǒng)(如Hadoop MapReduce)具有較高的可靠性,但數(shù)據(jù)的實(shí)時(shí)性較差;流式處理系統(tǒng)(如Storm)則情況正好相反,數(shù)據(jù)處理延遲低,但可靠性差強(qiáng)人意。Lambda Architecture的目的即為協(xié)調(diào)2種技術(shù)的優(yōu)缺點(diǎn),使得大數(shù)據(jù)處理系統(tǒng)既滿足高可靠性需求,又具有較低的延遲性。Lambda Architecture設(shè)計(jì)主要目的是滿足以下4個(gè)方面的需求:①系統(tǒng)故障或人為錯(cuò)誤不丟數(shù)據(jù);②數(shù)據(jù)分析低延遲;③系統(tǒng)具備線性擴(kuò)展能力;④系統(tǒng)中很容易增加新特性。
Lambda Architecture由批處理層(batch layer)、流式處理層(speed layer)、服務(wù)層(serving layer)組成(圖1)。
圖1 Lambda Architecture組成示意圖Fig.1 Lambda Architecture composition diagram
(1)批處理層。批處理層的主要職責(zé)是保證數(shù)據(jù)處理的準(zhǔn)確性和可靠性,該層將數(shù)據(jù)以原始格式存儲(chǔ)于HDFS上,以保障和加強(qiáng)數(shù)據(jù)系統(tǒng)的可靠性,利用Hadoop MapReduce框架對(duì)數(shù)據(jù)進(jìn)行處理,并保存計(jì)算結(jié)果,經(jīng)該處理過程后的數(shù)據(jù)視圖稱之為批處理視圖(Batch View)。Hadoop MapReduce框架具有優(yōu)秀的魯棒性,運(yùn)行過程中即使出現(xiàn)異常也不會(huì)產(chǎn)生數(shù)據(jù)丟失。這種批處理方式只需要數(shù)據(jù)存儲(chǔ)系統(tǒng)進(jìn)行隨機(jī)讀取、追加寫入操作,不需要處理隨機(jī)寫、加鎖、數(shù)據(jù)一致性等問題,因而較大簡(jiǎn)化了存儲(chǔ)系統(tǒng)的設(shè)計(jì)。但是批處理層的數(shù)據(jù)處理通常有幾小時(shí)到幾天的延遲。
(2)流式處理層。流式處理層的主要職責(zé)是滿足所有實(shí)時(shí)性處理的需求。流式處理層通常基于Storm這樣的流式計(jì)算平臺(tái),通過快速的增量式算法,以分鐘級(jí)、秒級(jí)甚至毫秒級(jí)來讀取、分析、保存數(shù)據(jù)。對(duì)于存儲(chǔ)系統(tǒng),由于需要支持持續(xù)的更新操作,其設(shè)計(jì)要復(fù)雜得多。為了簡(jiǎn)化問題,通常使用劃窗機(jī)制來保存一段時(shí)間的數(shù)據(jù),劃窗的時(shí)間一般和批處理層的數(shù)據(jù)處理一致。流式處理往往使用內(nèi)存計(jì)算,這意味著當(dāng)出現(xiàn)異常(比如升級(jí)或工作節(jié)點(diǎn)異常)時(shí),可能會(huì)導(dǎo)致數(shù)據(jù)的丟失或計(jì)算結(jié)果錯(cuò)誤。然而,Lambda Architecture卻不需要過多考慮這類問題,因?yàn)橄乱淮闻幚碜鳂I(yè)會(huì)再次處理所有數(shù)據(jù)并獲得準(zhǔn)確的結(jié)果。
(3)服務(wù)層。流式處理層的服務(wù)層職責(zé)是將流式處理層輸出數(shù)據(jù)合并至批處理輸出數(shù)據(jù)上,從而得到一份完整的輸出數(shù)據(jù),并保存到諸如HBASE這樣的NoSQL數(shù)據(jù)庫中,以服務(wù)于在線檢索應(yīng)用。在批處理計(jì)算結(jié)果之上結(jié)合少量實(shí)時(shí)數(shù)據(jù),其結(jié)果與完全使用批處理計(jì)算相比,具有很好的近似性。
分布式文件系統(tǒng)(Distributed File System,DFS)是指文件系統(tǒng)管理的物理存儲(chǔ)資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)(可簡(jiǎn)單理解為一臺(tái)計(jì)算機(jī))相連。Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)是指被設(shè)計(jì)成適合運(yùn)行在通用硬件(Commodity Hardware)上的分布式文件系統(tǒng)。HDFS有高容錯(cuò)性(Fault Tolerant)的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的(Low Cost)硬件上。而且它提供高吞吐量(High Throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有超大數(shù)據(jù)集(Large Data Set)的應(yīng)用程序。HDFS放寬了POSIX的要求,這樣可以實(shí)現(xiàn)流的形式訪問(Streaming Access)文件系統(tǒng)中的數(shù)據(jù)。
HDFS的結(jié)構(gòu)。HDFS由4部分組成(圖2):HDFS客戶端(HDFS Client)、名稱節(jié)點(diǎn)(Name Node)、數(shù)據(jù)節(jié)點(diǎn)(Data Node)和輔助名稱節(jié)點(diǎn)(Secondary Name Node)。HDFS是1個(gè)主-從(Mater/Slave)體系結(jié)構(gòu),HDFS集群擁有1個(gè)名稱節(jié)點(diǎn)和一些數(shù)據(jù)節(jié)點(diǎn)。名稱節(jié)點(diǎn)管理文件系統(tǒng)的元數(shù)據(jù),數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)實(shí)際的數(shù)據(jù)。
圖2 HDFS結(jié)構(gòu)示意圖Fig.2 HDFS structure diagram
(1)名稱節(jié)點(diǎn):負(fù)責(zé)管理分布式文件系統(tǒng)的命名空間(Namespace),保存了2個(gè)核心的數(shù)據(jù)結(jié)構(gòu),即鏡像文件(FsImage)和操作日志(EditLog)。鏡像文件用于維護(hù)文件系統(tǒng)樹以及文件樹中所有的文件和文件夾的元數(shù)據(jù)。操作日志文件中記錄了所有針對(duì)文件的創(chuàng)建、刪除、重命名等操作。
(2)HDFS客戶端:提供一系列命令用于管理和訪問HDFS,如啟動(dòng)和關(guān)閉HDFS。用于與數(shù)據(jù)節(jié)點(diǎn)交互,讀取或者寫入數(shù)據(jù);讀取時(shí),要與名稱節(jié)點(diǎn)交互,獲取文件的位置信息;寫入HDFS時(shí),Client將文件切分成多個(gè)的數(shù)據(jù)塊(Block),然后進(jìn)行存儲(chǔ)。
(3)輔助名稱節(jié)點(diǎn):它是用來保存名稱節(jié)點(diǎn)中對(duì)HDFS元數(shù)據(jù)信息的備份,并減少名稱節(jié)點(diǎn)重啟的時(shí)間。輔助名稱節(jié)點(diǎn)一般是單獨(dú)運(yùn)行在1臺(tái)機(jī)器上。
(4)數(shù)據(jù)節(jié)點(diǎn):數(shù)據(jù)節(jié)點(diǎn)是HDFS的工作節(jié)點(diǎn),負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和讀取,會(huì)根據(jù)客戶端或者是名稱節(jié)點(diǎn)的調(diào)度來進(jìn)行數(shù)據(jù)的存儲(chǔ)和檢索,并且向名稱節(jié)點(diǎn)定期發(fā)送自己所存儲(chǔ)的塊的列表。
HDFS的數(shù)據(jù)讀取。HDFS讀取數(shù)據(jù)流程(圖3)如下:
(1)打開HDFS文件。HDFS客戶端首先調(diào)用“DistributedFileSystem類”中的“open方法”打開HDFS文件,底層會(huì)調(diào)用“ClientProtocal類”中的“open方法”,返回一個(gè)用于讀取的“HdfsDataInputStream”對(duì)象。
(2)從名稱節(jié)點(diǎn)獲取數(shù)據(jù)節(jié)點(diǎn)地址。在構(gòu)造“DFSInputStream對(duì)象”的時(shí)候,調(diào)用“ClientPortocal類”中的“getBlockLocations方法”向名稱節(jié)點(diǎn)獲取該文件起始位置數(shù)據(jù)塊信息。名稱節(jié)點(diǎn)返回的數(shù)據(jù)塊的存儲(chǔ)位置是按照與客戶端距離遠(yuǎn)近排序的。所以“DFSInputStream對(duì)象”可以選擇一個(gè)最優(yōu)的數(shù)據(jù)節(jié)點(diǎn),然后與這個(gè)節(jié)點(diǎn)建立數(shù)據(jù)連接讀取數(shù)據(jù)塊。
(3)連接到數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)塊。HDFS客戶端通過調(diào)用“DFSInputStream對(duì)象”從最優(yōu)的數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)塊,數(shù)據(jù)會(huì)以數(shù)據(jù)包(Packet)的形式從數(shù)據(jù)節(jié)點(diǎn)以流式接口傳送到客戶端,當(dāng)達(dá)到一個(gè)數(shù)據(jù)塊末尾的時(shí)候,“DFSInputStream對(duì)象”就會(huì)再次調(diào)用“getBlockLocations方法”獲取下一個(gè)數(shù)據(jù)塊的位置信息,并建立和這個(gè)新的數(shù)據(jù)塊的最優(yōu)節(jié)點(diǎn)之間的連接,然后HDFS繼續(xù)讀取數(shù)據(jù)塊。
(4)HDFS客戶端關(guān)閉輸入流。
圖 3 HDFS讀取數(shù)據(jù)流程 Fig.3 HDFS data reading process
HDFS數(shù)據(jù)寫入。HDFS寫入數(shù)據(jù)流程見圖4:
(1)HDFS 客戶端調(diào)用“DistributedFileSystem類”中的“create()方法”
(2)底層調(diào)用“ClientProtocal類”中的“create()方法”在名稱節(jié)點(diǎn)的文件系統(tǒng)目錄樹中創(chuàng)建一個(gè)文件,并且創(chuàng)建新文件的操作記錄到操作日志(EditLog)中,返回一個(gè)輸出流對(duì)象(HdfsDataOutputStream)。
(3)HDFS 客戶端根據(jù)返回的輸出流對(duì)象調(diào)用“write方法”來寫數(shù)據(jù)。
(4)由于之間創(chuàng)建的新文件是一個(gè)空文件,并沒有申請(qǐng)任何數(shù)據(jù)塊,所以“DFSOutputStream對(duì)象”首先會(huì)調(diào)用“ClientProtocal類”中的“addBlock方法”向名稱節(jié)點(diǎn)申請(qǐng)數(shù)據(jù)塊,數(shù)據(jù)塊的大小可以由用戶自己配置,默認(rèn)為128 M,名稱節(jié)點(diǎn)返回一個(gè)“LocatedBlock對(duì)象”,該對(duì)象保存了該數(shù)據(jù)塊所有數(shù)據(jù)節(jié)點(diǎn)位置信息,然后就可以建立數(shù)據(jù)流管道寫數(shù)據(jù)塊。
(5)建立通向數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)流管道,寫入數(shù)據(jù):建立數(shù)據(jù)流管道之后,HDFS客戶端就可以向數(shù)據(jù)流管道寫數(shù)據(jù)。它會(huì)將數(shù)據(jù)切分成一個(gè)個(gè)的數(shù)據(jù)包(Data Packet),然后通過數(shù)據(jù)流管道發(fā)送到數(shù)據(jù)節(jié)點(diǎn)。
(6)每一個(gè)數(shù)據(jù)包(Data Packet)都有一個(gè)確認(rèn)包(Ack Packet),逆序的通過數(shù)據(jù)流管道回到輸出流。輸出流在確認(rèn)了所有的數(shù)據(jù)節(jié)點(diǎn)已經(jīng)寫入了這個(gè)數(shù)據(jù)包,就會(huì)從對(duì)應(yīng)的緩存隊(duì)列刪除這個(gè)數(shù)據(jù)包。
(7)當(dāng)數(shù)據(jù)節(jié)點(diǎn)成功接收一個(gè)數(shù)據(jù)塊時(shí),數(shù)據(jù)節(jié)點(diǎn)會(huì)通過“DataNodeProtocal類”中的“blockReceivedAndDelete方法”向名稱節(jié)點(diǎn)匯報(bào),名稱節(jié)點(diǎn)會(huì)更新內(nèi)存中數(shù)據(jù)塊和數(shù)據(jù)節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系。
(8)完成操作后,客戶端關(guān)閉輸出流。
圖4 HDFS寫入數(shù)據(jù)流程 Fig.4 HDFS data writing process
HDFS的優(yōu)缺點(diǎn)。HDFS具有鮮明的優(yōu)勢(shì),它兼容廉價(jià)的硬件設(shè)備,支持流數(shù)據(jù)的讀寫和大數(shù)據(jù)集的集成,采用十分簡(jiǎn)單的文件模型,擁有強(qiáng)大的全平臺(tái)性能。但同樣有不容忽視的局限性:HDFS數(shù)據(jù)讀取效率低且速度慢,不適合有低延遲需求的數(shù)據(jù)訪問,且無法高效存儲(chǔ)大量小文件,不支持?jǐn)?shù)據(jù)集的并行處理,即不支持多用戶寫入及任意修改文件。
批處理技術(shù)。MapReduce是面向大數(shù)據(jù)并行處理的計(jì)算模型、框架和平臺(tái),它具有3層隱藏含義:
(1)基于集群的高性能并行計(jì)算平臺(tái)(Cluster Infrastructure)。它允許用市場(chǎng)上普通的商用服務(wù)器構(gòu)成一個(gè)包含數(shù)十、數(shù)百至數(shù)千個(gè)節(jié)點(diǎn)的分布和并行計(jì)算集群。
(2)并行計(jì)算與運(yùn)行軟件框架(Software Framework)。MapReduce提供了一個(gè)龐大但設(shè)計(jì)精良的并行計(jì)算軟件框架,能自動(dòng)完成計(jì)算任務(wù)的并行化處理,自動(dòng)劃分計(jì)算數(shù)據(jù)和計(jì)算任務(wù)。
(3)并行程序設(shè)計(jì)模型與方法(Programming Model & Methodology)。它借助于函數(shù)式程序設(shè)計(jì)語言Lisp的設(shè)計(jì)思想,提供了一種簡(jiǎn)便的并行程序設(shè)計(jì)方法,用Map和Reduce共2個(gè)函數(shù)編程實(shí)現(xiàn)基本的并行計(jì)算任務(wù),提供了抽象的操作和并行編程接口,以簡(jiǎn)單方便地完成大規(guī)模數(shù)據(jù)的編程和計(jì)算處理。
流式計(jì)算技術(shù)。Storm是一種開源的分布式實(shí)時(shí)計(jì)算框架,可以簡(jiǎn)單、可靠的處理大量的數(shù)據(jù)流。Storm有很多使用場(chǎng)景,如實(shí)時(shí)分析、在線機(jī)器學(xué)習(xí)、持續(xù)計(jì)算、分布式遠(yuǎn)程過程調(diào)用(Remote Procedure Call ,RPC)、數(shù)據(jù)抽取轉(zhuǎn)換加載(Extract-Transform-Load,ETL)等。Storm是一個(gè)分布式的、可靠的、容錯(cuò)的數(shù)據(jù)流處理系統(tǒng),Storm支持水平擴(kuò)展,具有高容錯(cuò)性,保證每個(gè)消息都會(huì)得到處理,而且處理速度很快(在1個(gè)小集群中,每個(gè)結(jié)點(diǎn)每秒可以處理數(shù)以百萬計(jì)的消息)。Storm的部署和運(yùn)維都很便捷,而且更為重要的是可以使用任意編程語言來開發(fā)應(yīng)用。
云計(jì)算是一種IT資源的交付和使用模式,指通過網(wǎng)絡(luò)以按需、以擴(kuò)展的方式獲得所需的資源(硬件、平臺(tái)、軟件及服務(wù)等),提供資源的網(wǎng)絡(luò)被稱為“云”。與其說云計(jì)算是一種新的技術(shù)領(lǐng)域,不如說它是一種在業(yè)務(wù)模式方面的創(chuàng)新?!霸啤敝械馁Y源在使用者看來是可以無限擴(kuò)展的,并且可以隨時(shí)獲取,按需使用、隨時(shí)擴(kuò)展、按使用付費(fèi)。公共云是最基礎(chǔ)的服務(wù),多個(gè)客戶可共享一個(gè)服務(wù)提供商的系統(tǒng)資源,他們無須架設(shè)任何設(shè)備及配備管理人員,便可享有專業(yè)的IT服務(wù),這對(duì)于農(nóng)業(yè)經(jīng)營(yíng)主體來說,無疑是一個(gè)降低資金和管理成本的理想軟件架設(shè)方式。公共云還可細(xì)分為3個(gè)類別,包括軟件即服務(wù)(Software-as-a-Service,SaaS)、平臺(tái)即服務(wù)(Platform-as-a-Service, PaaS)、基礎(chǔ)設(shè)施即服務(wù)(Infrastructure-as-a-Service, IaaS)。
SaaS(Software as a Service)應(yīng)用即服務(wù),軟件即服務(wù)也是其服務(wù)的一類,通過互聯(lián)網(wǎng)提供按需軟件付費(fèi)應(yīng)用程序,云計(jì)算提供商托管和管理軟件應(yīng)用程序,并允許其用戶連接到應(yīng)用程序并通過全球互聯(lián)網(wǎng)訪問應(yīng)用程序。在SaaS中從底層的網(wǎng)絡(luò)和存儲(chǔ)設(shè)備到上層的數(shù)據(jù)和應(yīng)用的管理都通過云服務(wù)托管的方式進(jìn)行架設(shè)和管理(圖5),用戶可以從任意位置、通過任意設(shè)備登錄SaaS應(yīng)用程序,由SaaS服務(wù)的提供商進(jìn)行系統(tǒng)的日常管理和更新,用戶無須安裝部署或維護(hù)更新,無論是農(nóng)業(yè)生產(chǎn)企業(yè)和SaaS服務(wù)提供商,都大大降低了成本的投入。SaaS服務(wù)提供商可以隨著使用量的增加提供更多的數(shù)據(jù)存儲(chǔ)能力、計(jì)算能力或網(wǎng)絡(luò)接入能力。
圖 5 云服務(wù)架設(shè)方式對(duì)比[27-28]Fig.5 Comparison of cloud service setup
基于HDFS和NoSQL的多元農(nóng)業(yè)數(shù)據(jù)集成。在農(nóng)業(yè)從原料、加工、生產(chǎn)到銷售的全產(chǎn)業(yè)鏈中會(huì)產(chǎn)生海量類型多樣的數(shù)據(jù),這些是融合了農(nóng)業(yè)的地域性、季節(jié)性、多樣性、周期性等自身特征后產(chǎn)生的來源廣泛、類型多樣、結(jié)構(gòu)復(fù)雜、具有潛在價(jià)值,并難以應(yīng)用通常方法處理和分析的數(shù)據(jù)集合,是典型的大數(shù)據(jù)的特征。農(nóng)業(yè)大數(shù)據(jù)保留了大數(shù)據(jù)規(guī)模巨大(Volume)、類型多樣(Variety)、價(jià)值密度低(Value)、處理速度快(Velocity)、精確度高(Veracity)和復(fù)雜度高(Complexity)等基本特征,并使農(nóng)業(yè)內(nèi)部的信息流得到了延展和深化。
物聯(lián)網(wǎng)、遙感等先進(jìn)技術(shù)的使用使得農(nóng)業(yè)大數(shù)據(jù)的來源更加豐富、結(jié)構(gòu)更加復(fù)雜、類型更加多樣,農(nóng)業(yè)大數(shù)據(jù)按產(chǎn)生的場(chǎng)景可以概括為3種數(shù)據(jù)類別:生產(chǎn)端數(shù)據(jù)、市場(chǎng)端數(shù)據(jù)和知識(shí)庫。按數(shù)據(jù)的組織結(jié)構(gòu)不同又可以分為結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)(Semi-structure Data)和非結(jié)構(gòu)化數(shù)據(jù)(圖6)。
對(duì)于大量的半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)、并發(fā)計(jì)算和擴(kuò)展能力需求,大數(shù)據(jù)系統(tǒng)普遍采用非關(guān)系型數(shù)據(jù)庫(NoSQL)解決方案,如Apache的Hbase分布式數(shù)據(jù)庫系統(tǒng)。大數(shù)據(jù)系統(tǒng)中,結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)/非結(jié)構(gòu)化數(shù)據(jù)有著截然不同的2套處理流程和體系,結(jié)構(gòu)化數(shù)據(jù)一般可以直接存入分布式數(shù)據(jù)庫環(huán)境中,半結(jié)構(gòu)化數(shù)據(jù)/非結(jié)構(gòu)化數(shù)據(jù)則通過2種途徑存入至分布式文件系統(tǒng)或分布式數(shù)據(jù)庫中:對(duì)于能夠序列化的數(shù)據(jù),直接經(jīng)過ETL(抽取、轉(zhuǎn)換、加載)清洗處理后直接存放至數(shù)據(jù)庫中;對(duì)于不能夠序列化的數(shù)據(jù),一般通過數(shù)據(jù)整理后存放至分布式文件系統(tǒng)中。
圖6 農(nóng)業(yè)大數(shù)據(jù)集成示意圖Fig.6 Schematic diagram of agricultural big data integration
基于Lambda Architecture的農(nóng)業(yè)大數(shù)據(jù)架構(gòu)。在由實(shí)際監(jiān)測(cè)、手工錄入或信息采集所產(chǎn)生的數(shù)據(jù)流進(jìn)入系統(tǒng)后,同時(shí)發(fā)往批處理層和流式處理層處理。批處理層以不可變模型離線存儲(chǔ)所有數(shù)據(jù)集,通過在全體數(shù)據(jù)集上不斷重新計(jì)算構(gòu)建查詢所對(duì)應(yīng)的批處理視圖。流式處理層處理增量的實(shí)時(shí)數(shù)據(jù)流,不斷更新查詢所對(duì)應(yīng)的即時(shí)視圖。服務(wù)層合并批處理視圖和即時(shí)視圖中的結(jié)果數(shù)據(jù)集到最終的數(shù)據(jù)集并響應(yīng)用戶的查詢請(qǐng)求(圖7)。
圖7 農(nóng)業(yè)大數(shù)據(jù)服務(wù)架構(gòu)示意圖Fig.7 Schematic diagram of agricultural big data service architecture
系統(tǒng)架構(gòu)設(shè)計(jì)。該研究示例系統(tǒng)從系統(tǒng)底層至系統(tǒng)上層依次為云計(jì)算的硬件系統(tǒng)和虛擬系統(tǒng)、大數(shù)據(jù)的獲取、存儲(chǔ)、查詢計(jì)算、分析、服務(wù)和應(yīng)用業(yè)務(wù)模塊(圖8)。
平臺(tái)應(yīng)用界面。該研究的大數(shù)據(jù)系統(tǒng)架構(gòu)已經(jīng)在廣東省農(nóng)業(yè)生產(chǎn)領(lǐng)域中形成了多套應(yīng)用,涉及的農(nóng)業(yè)細(xì)分行業(yè)包括茶葉產(chǎn)業(yè)、蔬菜產(chǎn)業(yè)、水稻產(chǎn)業(yè)等(圖9、10),通過對(duì)農(nóng)業(yè)資源基礎(chǔ)數(shù)據(jù)、農(nóng)業(yè)生產(chǎn)數(shù)據(jù)、生產(chǎn)經(jīng)營(yíng)主體數(shù)據(jù)、市場(chǎng)信息數(shù)據(jù)、科技服務(wù)數(shù)據(jù)的整合,實(shí)現(xiàn)“一個(gè)平臺(tái),多套系統(tǒng)”的系統(tǒng)集成方式,測(cè)試系統(tǒng)服務(wù)器配置如表1所示。
大數(shù)據(jù)應(yīng)用平臺(tái)在云端共部署數(shù)據(jù)存儲(chǔ)服務(wù)節(jié)點(diǎn)7個(gè),其中1個(gè)主名稱節(jié)點(diǎn)、1個(gè)輔助名稱節(jié)點(diǎn)、5個(gè)大數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)(數(shù)字節(jié)點(diǎn)),均為高性能數(shù)據(jù)計(jì)算配置。應(yīng)用服務(wù)器主要承擔(dān)網(wǎng)絡(luò)接口任務(wù),部署一套Web集群服務(wù)器,架設(shè)nginx服務(wù)框架,承擔(dān)網(wǎng)絡(luò)高并發(fā)處理任務(wù),部署Web服務(wù)器2套,另設(shè)1套redis緩存服務(wù)器。
大數(shù)據(jù)服務(wù)系統(tǒng)目前已在廣東省部分現(xiàn)代農(nóng)業(yè)產(chǎn)業(yè)園部署(圖9~11),以上3個(gè)平臺(tái)基于一套大數(shù)據(jù)云服務(wù)系統(tǒng),由SaaS服務(wù)提供商提供系統(tǒng)的架設(shè)、維護(hù)和升級(jí)服務(wù),在系統(tǒng)的設(shè)計(jì)和開發(fā)過程中,研究和開發(fā)團(tuán)隊(duì)設(shè)計(jì)了全面的訪問控制功能,保證私密生產(chǎn)數(shù)據(jù)的安全性。農(nóng)業(yè)產(chǎn)業(yè)園在資源和產(chǎn)業(yè)方面集中化和規(guī)?;奶攸c(diǎn),使得農(nóng)業(yè)大數(shù)據(jù)的獲取相對(duì)于分散小農(nóng)更具便利性,物聯(lián)網(wǎng)設(shè)施的應(yīng)用也更為普遍,由于生產(chǎn)的集約化和農(nóng)村勞動(dòng)人口的流失,對(duì)農(nóng)業(yè)生產(chǎn)的自動(dòng)化需求也更為迫切,大數(shù)據(jù)系統(tǒng)的部署為農(nóng)業(yè)生產(chǎn)的進(jìn)一步自動(dòng)化提供基礎(chǔ)性的服務(wù)。
數(shù)據(jù)管理視圖。系統(tǒng)數(shù)據(jù)的采集、管理系統(tǒng)界面如圖12所示,數(shù)據(jù)管理視圖主要用于檔案信息和農(nóng)事操作信息等
圖8 農(nóng)業(yè)云服務(wù)平臺(tái)架構(gòu)示意圖Fig.8 Schematic diagram of agricultural cloud service platform architecture
表1 測(cè)試系統(tǒng)服務(wù)器配置Table 1 Test the system server configuration
圖9 農(nóng)業(yè)產(chǎn)業(yè)大數(shù)據(jù)服務(wù)平臺(tái) Fig.9 Agricultural industry big data service platform
需要手動(dòng)輸入的信息錄入和管理,目前大數(shù)據(jù)系統(tǒng)的數(shù)據(jù)管理系統(tǒng)實(shí)現(xiàn)了田塊管理、農(nóng)業(yè)投入品(化肥、農(nóng)藥等)管理、生產(chǎn)批次管理、農(nóng)事計(jì)劃和溯源信息管理等關(guān)鍵的管理功能。
在研究中對(duì)常規(guī)系統(tǒng)和大數(shù)據(jù)系統(tǒng)的集群查詢性能進(jìn)行了對(duì)比試驗(yàn),試驗(yàn)在實(shí)驗(yàn)室虛擬化環(huán)境中運(yùn)行,分別針對(duì)該研究的Hadoop數(shù)據(jù)集群和普通MySQL數(shù)據(jù)集群,試驗(yàn)結(jié)果如圖13所示。從圖13可以看出,當(dāng)數(shù)據(jù)規(guī)模較小時(shí),大數(shù)據(jù)集群效率無法體現(xiàn),甚至還落后于相同硬件配置下的 常規(guī)數(shù)據(jù)集。在300萬條數(shù)據(jù)級(jí)別時(shí),常規(guī)數(shù)據(jù)集與大數(shù)據(jù)集群效率基本持平。在 500 萬條數(shù)據(jù)級(jí)別時(shí),大數(shù)據(jù)集群的效率明顯高于常規(guī)數(shù)據(jù)集,數(shù)據(jù)查詢效率提升超過25%。
圖10 農(nóng)業(yè)產(chǎn)業(yè)大數(shù)據(jù)服務(wù)平臺(tái)Fig.10 Agricultural industry big data service platform
圖11 農(nóng)業(yè)產(chǎn)業(yè)大數(shù)據(jù)服務(wù)平臺(tái)Fig.11 Agricultural industry big data service platform
該研究中的大數(shù)據(jù)架構(gòu)在保障數(shù)據(jù)的不可變性的基礎(chǔ)上做到了數(shù)據(jù)的重新計(jì)算,批處理層保存了原始數(shù)據(jù),可以極大避免數(shù)據(jù)的損失,算法可以同時(shí)分析歷史數(shù)據(jù)和短期實(shí)時(shí)數(shù)據(jù),兼顧數(shù)據(jù)的準(zhǔn)確性和實(shí)時(shí)性,但事實(shí)上大數(shù)據(jù)系統(tǒng)的2個(gè)計(jì)算層進(jìn)行了大量的重復(fù)計(jì)算,從計(jì)算資源角度看,這樣的大數(shù)據(jù)系統(tǒng)架構(gòu)消耗了較多的資源。
大數(shù)據(jù)和云計(jì)算服務(wù)2種焦點(diǎn)技術(shù)的結(jié)合,為農(nóng)業(yè)生產(chǎn)和流通產(chǎn)生了有益的結(jié)果,在云計(jì)算系統(tǒng)中的大數(shù)據(jù)分析有多種優(yōu)勢(shì)。首先,云計(jì)算服務(wù)有助于整合來自眾多來源的數(shù)據(jù),隨著云計(jì)算技術(shù)的進(jìn)步,大數(shù)據(jù)分析得以更加完善;其次,云計(jì)算服務(wù)為農(nóng)業(yè)大數(shù)據(jù)分析提供了靈活的基礎(chǔ)架構(gòu),大大簡(jiǎn)化了大數(shù)據(jù)分析的系統(tǒng)規(guī)模,可以根據(jù)需求進(jìn)行擴(kuò)展,使得管理工作負(fù)載變得容易;最后,云計(jì)算服務(wù)使得用戶無需大規(guī)模的大數(shù)據(jù)資源即可進(jìn)行大數(shù)據(jù)處理,大大降低了涉農(nóng)企業(yè)和組織機(jī)構(gòu)的大數(shù)據(jù)系統(tǒng)運(yùn)營(yíng)成本,為農(nóng)業(yè)發(fā)展帶來巨大的價(jià)值。
在系統(tǒng)的實(shí)際應(yīng)用中,時(shí)常會(huì)出現(xiàn)實(shí)時(shí)與批量計(jì)算結(jié)果不一致引起的數(shù)據(jù)口徑問題,因?yàn)榕幚砗蛯?shí)時(shí)計(jì)算是2個(gè)并行的計(jì)算框架和計(jì)算程序,批處理計(jì)算是整體數(shù)據(jù)計(jì)算框架,實(shí)時(shí)計(jì)算則是局部數(shù)據(jù)計(jì)算,常會(huì)出現(xiàn)某一數(shù)據(jù)在一定時(shí)間后發(fā)生變化的現(xiàn)象。
平臺(tái)已經(jīng)完成技術(shù)集成和整合,在農(nóng)業(yè)大數(shù)據(jù)領(lǐng)域應(yīng)用
圖12 數(shù)據(jù)管理視圖Fig.12 Data management view
圖13 Hadoop數(shù)據(jù)集群與MySQL數(shù)據(jù)集群性能對(duì)比Fig.13 Comparison between Hadoop data clustering and MySQL data clustering
具備應(yīng)用的超前性和技術(shù)的先進(jìn)性,但目前在應(yīng)用上沒有突出的亮點(diǎn),尚處于前端應(yīng)用的缺乏階段,平臺(tái)的進(jìn)一步開發(fā)與研究過程中,應(yīng)當(dāng)挖掘平臺(tái)更深層次的應(yīng)用,實(shí)現(xiàn)技術(shù)的社會(huì)經(jīng)濟(jì)效益。