孫 想,吳華瑞+,李慶學,郝 鵬
(1.北京農(nóng)業(yè)信息技術研究中心,北京 100097;2.國家農(nóng)業(yè)信息化工程技術研究中心, 北京 100097;3.農(nóng)業(yè)部農(nóng)業(yè)信息技術重點開放實驗室, 北京 100097)
大數(shù)據(jù)存儲、處理工具、分析算法等技術研究是當前農(nóng)業(yè)大數(shù)據(jù)技術研究熱點[1-6]。在實際應用中,從云環(huán)境下分布存儲的數(shù)據(jù)節(jié)點中快速獲取需要的數(shù)據(jù),滿足高性能、大容量的農(nóng)業(yè)領域應用大數(shù)據(jù)處理與服務的需求,是一個具有挑戰(zhàn)性的技術問題。我國畜牧業(yè)發(fā)展迅速,在日常管理中畜禽疾病診斷產(chǎn)生了大量的病例知識和數(shù)據(jù),但這些數(shù)據(jù)分散在各個規(guī)模化養(yǎng)殖場經(jīng)營者或畜禽專家手中,難以進行有效的組織、共享和分析[7]。共享診斷病例知識和數(shù)據(jù)能夠解決基層農(nóng)技專家不足,提高畜禽生產(chǎn)疾病診斷效率,降低管理者的經(jīng)營成本,建立面向畜禽疾病診斷的通用大數(shù)據(jù)應用服務模式具有重要現(xiàn)實意義。
Hadoop為大數(shù)據(jù)的處理提供了并行計算的框架,核心技術包括分布式文件系統(tǒng)HDFS(hadoop distributed file system)以及MapReduce并行計算模型。畜禽診斷大數(shù)據(jù)包括豬、牛、羊、禽類等品種信息,畜禽養(yǎng)殖環(huán)境監(jiān)測、育種繁育、疾病診斷與防控、養(yǎng)殖場管理、質(zhì)量追溯管理等信息,這些數(shù)據(jù)可以為文件、圖片、數(shù)據(jù)庫、視頻、GIS、遙感等格式,具有異構(gòu)性、差異性和時空性特征,文件大小從KB級到GB、TB級,大數(shù)據(jù)管理框架需要支撐數(shù)據(jù)的高效存儲、管理以及計算調(diào)度[8,9]。
本文在HDFS的基礎上,對目前的云存儲架構(gòu)進行適應性改進,對應不同的文件類型采取不同的讀取策略,例如牧場遙感影像數(shù)據(jù)比較大,一般采用一次寫入,多次讀取的策略,通過改進數(shù)據(jù)分塊傳輸技術提高存儲平臺對該類數(shù)據(jù)管理與服務的效率。牧場監(jiān)測物聯(lián)網(wǎng)數(shù)據(jù)實時性很強,通常需要對海量的圖片流、視頻流、位置信息等數(shù)據(jù)進行反復的存取,通過分級存儲和負載均衡機制,可增強物聯(lián)網(wǎng)大數(shù)據(jù)的存儲和訪問效率。
農(nóng)業(yè)數(shù)據(jù)云管理框架(圖1)分為4個層次,實現(xiàn)大數(shù)據(jù)資源的高效存儲、組織管理和應用服務。
圖1 大數(shù)據(jù)云管理框架
(1)數(shù)據(jù)資源存儲層是框架的基礎。由分布式存儲節(jié)點組成,節(jié)點服務器管理和運行以DataNode為基礎的物理存儲服務,另外,配備高性能平臺節(jié)點管理和調(diào)度服務器NameNode實現(xiàn)任務調(diào)度和控制。DataNode和NameNode之間通過交互通訊協(xié)議實現(xiàn)心跳信息的檢測和狀態(tài)維護。
(2)基礎管理層是框架的核心,也是影響云存儲功能與性能的關鍵部分,主要作用是在屏蔽分布式文件系統(tǒng)底層實現(xiàn)細節(jié)基礎上進行參數(shù)配置操作,實現(xiàn)資源的描述和拓撲管理。針對數(shù)據(jù)類型的不同,采取不同的組織方式,例如農(nóng)業(yè)影像數(shù)據(jù)由于數(shù)據(jù)較大,一般采用分布式多節(jié)點存儲方式,農(nóng)業(yè)物聯(lián)網(wǎng)數(shù)據(jù)由于實時性很強,一般按照區(qū)域分級設置進行存儲,實現(xiàn)資源的負載均衡。
(3)應用接口層通過多類型應用服務接口開發(fā),為上層畜禽診斷檢索等應用提供數(shù)據(jù)訪問、設備接入等服務,各類接口通過Web Service來實現(xiàn),例如根據(jù)資源大小判斷是否需分塊存儲,大文件的存儲通過分塊副本管理方法來實現(xiàn),而小文件(<64M)通過調(diào)度算法選擇存儲的節(jié)點后直接進行存儲。
(4)訪問層通過WEB網(wǎng)頁、移動終端、智能手機等形式進行畜禽疾病診斷、畜禽生產(chǎn)技術檢索等。
畜禽大數(shù)據(jù)資源不僅包括異構(gòu)分布的生產(chǎn)、經(jīng)營、流通、技術等各類數(shù)據(jù)庫,還包含不同畜禽專家的診斷知識庫、模型庫、疾病診斷病例,這些數(shù)據(jù)專業(yè)領域、時空維度、更新頻率、文件大小都不同,為了提高資源的訪問效率,提出了畜禽大數(shù)據(jù)訪問邏輯架構(gòu)。
數(shù)據(jù)資源訪問邏輯(如圖2)可形式化為服務三元組:
r= (TDescriptor,XIdentifier,SInterface),其中TDescriptor是數(shù)據(jù)資源服務的描述,表示資源內(nèi)容、所屬領域分類;XIdentifier用來標識數(shù)據(jù)資源服務,與元數(shù)據(jù)進行快速匹配提升檢索速度;SInterface用來定義數(shù)據(jù)資源存儲地址和訪問端口。
XIdentifier描述從數(shù)據(jù)存儲層的數(shù)據(jù)文件中抽取的元數(shù)據(jù)。Schema規(guī)定了每種資源都必須有的字段,根據(jù)相應分類的Schema描述。按照不同資源規(guī)范去描述,這一層存儲的是比數(shù)據(jù)抽象程度更高的信息,系統(tǒng)中使用XML文件進行分類管理,并抽取公共屬性存入數(shù)據(jù)庫進行管理。
圖2 資源訪問邏輯
為了提高響應用戶檢索能力,定義R={Ri|Ri包含d個元數(shù)據(jù)描述,1≤i≤m}和用戶某個查詢Q={Q1,Q2,…,Qn},包含n個描述,通過用戶查詢Q,可以在R中檢索出元數(shù)據(jù)描述相互匹配的數(shù)據(jù)記錄。
采用Bloom Filter算法實現(xiàn)資源的快速檢索索引,每個元數(shù)據(jù)描述通過Bloom Filter算法與存儲數(shù)據(jù)進行關聯(lián),每個Map節(jié)點接受一個文件塊分片,并賦予Bloom Filter二進制標簽值寫入索引文件,Reduce節(jié)點合并索引文件相同鍵值的索引內(nèi)容,從而提升數(shù)據(jù)訪問性能。
建立畜禽數(shù)據(jù)資源的分類樹,資源具有唯一類型,即分類T,且對于每一個資源r∈R,都有唯一的類型T(r),T(r)∈T。每個類型數(shù)據(jù)對應一個類型碼,通過與資源元數(shù)據(jù)的對應關系維護資源的唯一性和層次關系。畜禽數(shù)據(jù)資源描述架構(gòu)如圖3所示。
圖3 層次資源分類樹
每種元數(shù)據(jù)分類對應一種元數(shù)據(jù)描述,如數(shù)據(jù)庫資源的元數(shù)據(jù)描述可包括資源名稱、領域分類、資源出處等內(nèi)容,如圖4所示。
元數(shù)據(jù)描述信息使用Schema和XML文件存儲,把描述元數(shù)據(jù)信息的字段、屬性分別用XML語法中的元素和屬性來表示,其中元素包括簡單元素和復合元素,簡單元素表示的是元數(shù)據(jù)的信息,復合元素是由大量簡單元素組成的,即包含著大量元數(shù)據(jù)的信息。屬性表示的是元數(shù)據(jù)的編號,可以通過不同的編號來給元數(shù)據(jù)分類,以確定元數(shù)據(jù)的層次分類結(jié)構(gòu)。元數(shù)據(jù)XML與Schema表示的應用實例如圖5所示。
圖4 元數(shù)據(jù)描述
圖5 元數(shù)據(jù)XML與Schema表示的應用實例
農(nóng)業(yè)云環(huán)境下畜禽疾病診斷大數(shù)據(jù)服務主要包括以下幾個方面[10]:
(1)數(shù)據(jù)資源:根據(jù)診斷服務需求,對畜禽疾病診斷案例數(shù)據(jù)進行整合,形成案例大數(shù)據(jù)資源,供后續(xù)的數(shù)據(jù)檢索和分析計算,所有病例數(shù)據(jù)邏輯管理模型前面已經(jīng)討論。
(2)任務規(guī)劃:根據(jù)診斷服務需求為用戶提供任務規(guī)劃方案T=T1+T2+T3,其中,T1表示數(shù)據(jù)存儲任務;T2代表數(shù)據(jù)索引計算任務,T3則是代表數(shù)據(jù)處理計算任務。
(3)診斷大數(shù)據(jù)檢索和分析算法:基于疾病案例大數(shù)據(jù)的索引方法,實現(xiàn)高效的疾病診斷和防治方法查詢。
畜禽疾病電子案例可由一個四元組表示:CEMR=(分類信息,個體信息,病史,診斷記錄),其中分類信息包括畜禽種類、地點、單位、聯(lián)系信息、養(yǎng)殖方式;個體信息包括品種、豬群類別、出生日期、照片、實時環(huán)境、現(xiàn)場視頻等;病史信息包括畜禽疾病史、用藥史、健康狀態(tài)等信息;診斷記錄包括畜禽疾病的發(fā)病時間、癥狀、化驗單、診斷結(jié)果、治療方案、療效等,圖6給出了一個XML格式的電子案例實例。
圖6 電子案例實例(XML格式)
畜禽疾病電子案例存儲在文件系統(tǒng)中的XML文檔中,與關系數(shù)據(jù)庫的關系型記錄對應存儲系統(tǒng)中的實際數(shù)據(jù)(實時數(shù)據(jù)、癥狀圖片、治療視頻、處方文件),可提供案例數(shù)據(jù)的在線查詢。
采用Bloom Filter算法進行查詢,診斷索引數(shù)據(jù)結(jié)構(gòu)如圖7所示。查詢的癥狀元數(shù)據(jù)描述值包括“糞便臭”、“發(fā)燒”、“糞稀如水”、“不愿站立”。
定義病例在算法中哈希函數(shù)集合h={h1,h2},m值為8。癥狀對應的hash值為h1(糞便臭)=2,h1(發(fā)燒)=
4,h1(糞稀如水)=6,h1(不愿站立)=8,h1作用下病例8比特向量值為01010101;h2(糞便臭)=2,h2(發(fā)燒)=3,h2(糞稀如水)=4,h2(不愿站立)=8,h2作用下病例8比特向量值為01110001;癥狀Bloom Filter二進制標簽值為01110101。
豬病診斷關鍵因素之一生豬個體的所屬單位和生豬編號。元數(shù)據(jù)描述文件中記錄了診斷記錄編號與生豬個體的所屬單位和生豬編號的映射關系,用于檢索過程中快速過濾不相符合的診斷記錄。
圖7 診斷索引數(shù)據(jù)結(jié)構(gòu)
豬病電子病歷索引基于Hadoop的MapReduce建立,云環(huán)境下的診斷處理服務由在線分布式查詢處理集群完成,該集群主要由負載均衡器,分發(fā)、搜索和分析虛擬機服務節(jié)點構(gòu)成[11,12]。
診斷流程如圖8所示,分析過程如下:
(1)對病歷大數(shù)據(jù)索引文件進行限定大小切片處理和檢索服務器分布式部屬;
(2)負載均衡器根據(jù)病豬癥狀選擇的“糞便臭”、“糞稀如水”等查詢請求,發(fā)送至分發(fā)器進行檢索;
(3)分發(fā)器接收到查詢請求后,分發(fā)至服務器集合中的檢索節(jié)點服務器,經(jīng)過限定大小切片處理后的服務器在內(nèi)存中進行檢索病歷數(shù)據(jù)匹配,并將結(jié)果反饋給分發(fā)器;
(4)分發(fā)器將各節(jié)點服務器反饋的病歷數(shù)據(jù)進行整合,并發(fā)送給病例數(shù)據(jù)分析器節(jié)點服務器;
圖8 診斷流程
(5)病例數(shù)據(jù)分析器根據(jù)與豬場管理人員的交互信息進行診斷。
通過對病例大數(shù)據(jù)文件進行限定大小切片處理,使其小于服務器內(nèi)存,便于在內(nèi)存中執(zhí)行大數(shù)據(jù)的分析處理,有效提高了大數(shù)據(jù)并發(fā)處理效率。本文采用“疾病-癥狀”概念集合計算進行診斷。
疾病集合DIS={胃腸炎,急性副傷寒,砷中毒}
癥狀集合SYM={糞便臭,糞稀如水,發(fā)燒,不愿站,皮膚發(fā)紺,流涎,體溫低,興奮不安}
概念集合:“糞便臭,糞稀如水”是3種疾病在本集合中的共有癥狀;“發(fā)燒”是胃腸炎和急性副傷寒在本集合中的共有癥狀;“不愿站立”是胃腸炎在本集合中的個性癥狀;“皮膚發(fā)紺”是急性副傷寒在本集合中的個性癥狀;“流涎,體溫低,興奮不安”是急性副傷寒在本集合中的個性癥狀。
根據(jù)特征值與查詢概念進行逐層交互診斷后,最終獲得診斷結(jié)果,見表1。
本文搭建了存儲和在線服務集群組成的應用環(huán)境,并在綠云格平臺中得到應用。大數(shù)據(jù)集群使用hadoop-2.7.3 + spark-1.6.2搭建,集群包括一個北京主節(jié)點和天津、山東、河北、湖南、浙江等8個從節(jié)點,存儲了XML文件格式的200余個畜禽疾病病歷數(shù)據(jù),以及豬場空間分布數(shù)據(jù)、豬舍現(xiàn)場環(huán)境監(jiān)測、疾病癥狀圖片、現(xiàn)場監(jiān)控視頻等數(shù)據(jù),在線診斷服務包括分發(fā)器、數(shù)據(jù)分析器和分布式搜索器等集群調(diào)用Hadoop的MapReduce和Lucene接口實現(xiàn)索引建立和檢索。
表1 “疾病-病癥”概念集合對應表
平臺用戶通過錄入和交互疾病癥狀實現(xiàn)畜禽疾病智能診斷。如圖9豬場技術員進行豬病診斷,根據(jù)“糞便臭”,“糞稀如水”系統(tǒng)推斷其可能患有“胃腸炎”、“急性副傷寒”、“砷中毒”、“慢性副傷寒”、“仔豬黃痢”、“仔豬白痢”、“急性豬肺疫”;根據(jù)病豬個體信息的豬群類別排除患有“仔豬黃痢”、“仔豬白痢”兩種疾??;根據(jù)病豬“體溫升高”癥狀排除患有“砷中毒”疾病;根據(jù)病豬沒有“呼吸困難”癥狀排除患有“急性豬肺疫”、“急性副傷寒”、“慢性副傷寒”疾??;最終確定該病豬所患疾病為“胃腸炎”。診斷過程中,每個疾病都會外鏈該病的電子病歷、癥狀圖片,豬場技術員可打開病歷和癥狀圖片進行瀏覽對照,從而提高了豬病診斷的準確率。
本文為畜禽疾病診斷提供了一個基于云服務架構(gòu)的智能服務應用方法,同時也提供了一個大數(shù)據(jù)和云計算技術在畜禽領域診斷服務中的應用模式。該應用模式圍繞云環(huán)境下畜禽疾病診斷,在云環(huán)境下給出了畜禽大數(shù)據(jù)管理和邏輯訪問框架、畜禽數(shù)據(jù)資源描述分類與元數(shù)據(jù)描述模型和畜禽疾病診斷數(shù)據(jù)服務方法,有效利用了云環(huán)境下畜禽疾病診斷相關大數(shù)據(jù)進行交互式的診斷服務,提高了診斷準確度,幫助用戶獲得到更多有意義的決策支持。本文為大數(shù)據(jù)資源和知識的協(xié)同服務提供了可參考的技術方法,突破了傳統(tǒng)的智能系統(tǒng)數(shù)據(jù)和知識資源的局限性,具有較高的實用應用價值。
圖9 診斷應用
隨著本系統(tǒng)方法的不斷應用,下一步將對診斷服務的高并發(fā)的在線大數(shù)據(jù)處理與分析效率進行提升,滿足當畜禽病歷索引文件規(guī)模巨大,且用戶的訪問數(shù)量不斷增加時數(shù)據(jù)處理性能問題。