饒 靜
(重慶青年職業技術學院,重慶 400712)
農經云最早是貴州省農村綜合經濟信息中心建立的大數據服務平臺,是貴州實施“云上貴州”戰略的重要組成部分[1]。農經云的主要服務對象是“農業、農村、農民”的“三農”經濟發展,用人工智能、大數據和互聯網為農村農業服務。農經云數據庫包括了農村企業、農業產品、市場銷售,農業氣象水文、農村勞動力等多領域多產業的大數據信息,能夠提供海量農村大數據查詢、綜合化農村金融服務、鄉村旅游大數據、農業園區導航、新技術新產品等農技服務,還打造了商業化的農村電子商務平臺和便民服務平臺。包含了100 多萬涉農企業用戶、電商和農村消費者信息;20 多萬條農村服務社、市場價格、氣象和產業連接等采集數據,并實現了實時的數據監測;更有8 000 多萬條農產品、市場行情和氣象水文歷史數據,共同構成了農經云的大數據庫[2]。
貴州是僅次于云南的第二大野生食用菌省份。農經云的建立,也為貴州打開了一個巨大的市場空間,但同時,市場競爭也十分激烈,借助互聯網發展的大潮,近年來各種食用菌電商平臺也不斷涌現,除了淘寶、京東等大型綜合性電商平臺外,還有專業的中國食用菌電商平臺、易菇商城等[3]。各平臺由于數據類型和交易方式的差別,訂單內容和形式各有不同,平臺之間的訂單信息并不能共享。食用菌賣家需要逐一在這些平臺上查看、核對訂單內容、選擇物流方式和交易支付渠道,這對食用菌賣家來說無形中增加了很大的工作量,不同平臺之間的信息不能互通,還造成了訂單統計匯總工作的不便,多平臺多訂單的結算和數據統計十分困難[4]。因此,有必要設計一個食用菌電子商務多訂單的整合系統,將不同平臺上的訂單資源進行整合,借助農經云的大數據平臺,簡化多平臺多訂單業務的操作過程,減少訂單管理步驟,提高訂單的管理效率。
整合訂單系統的總體架構如圖1 所示。
如圖1 所示,根據食用菌電商平臺的訂單整合業務需求及農村電商特點[5],對平臺采用分層模塊化體系建設,整合訂單系統采用松耦合的架構設計,各模塊之間通過元數據的共享和交互,來驅動數據的存儲與計算。實現大數據平臺海量、多源、異構數據的采集、離線處理和實時計算等功能。系統總體架構由基礎數據源層、數據采集層、數據存儲層、計算層和應用層組成。各層間均采用模塊化設計,通過數據接口來實現各模塊和外部系統的集成。
訂單系統采用全分布式模式搭建,由4 個節點構成即1 臺作為Master 主節點,3 臺作為Slave 從節點,負責數據存儲;各節點軟件環境配置如表1 所示。
由表1 可知,食用菌電商平臺整合訂單系統采用開源的Hadoop 分布式計算框架作為基礎設施,Zookeeper 作為資源協調管理器,HDFS 作為分布式文件系統,HBase 作為分布式數據庫,Flume、Kafka、Sqoop 作為數據采集工具,并安裝部署Spark 集群。
食用菌電商平臺整合訂單系統基于Hadoop 平臺架構完成分布式模式搭建,主要步驟如下。

表1 食用菌電商平臺整合訂單系統集群軟件環境配置Tab.1 Configuration of software environment of order system cluster of edible fungi e-commerce platform integration
Hadoop 和大多數Hadoop 生態都需要通過java來運行,因此在配置環境前要安裝java,并配置環境變量。
首先下載JDK。
$sudo apt-get install openjdk-7-jre openjdk-7-jdk
下載完成后配置環境變量,在配置文件~/.bashrc中追加。
export JAVA_HOME=/usr/lib/jvm/java-7-openjdkamd64
下載好Hadoop 壓縮包后,將其解壓至/usr/local 中。
$ sudo tar -zxf ~/下載/hadoop-2.9.2.tar.gz -C /usr/local
配置對應節點名稱和IP 地址,修改配置文件/etc/hosts;配置完成后,測試節點間能否互相通信,確保節點間已建立網絡通信。
各節點之間通過SSH 來進行通信,Master 節點需要向各節點分發命令。SSH 每次通信時都要輸入密碼驗證,對集群來說很不方便,因此需要配置節點間的免密鑰登陸。
首先在Master 節點生成公鑰,在Master 節點的終端中執行。
$ cd ~/.ssh
$ cat ./id_rsa.pub >> ./authorized_keys
接著將公鑰發送到各節點,以Slave1 為例。
$scp~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
輸入密碼后,會提示完成傳輸,然后在各從節點上,將ssh 公匙加入授權。
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
其余節點依據Slave1 的方式進行配置,所有節點完后此配置后,在Master 節點上便可以無密碼SSH 到各個Slave 節點。
為了實現Hadoop 分布式模式,需要對以下文件進行相應的配置,具體配置過程略,僅給出各文件配置的說明。
slaves 文件: slaves 文件保存的是作為Datanode的主機名,每行一個。本系統中,讓Master 節點只作為Namenode,因此在slaves 文件添加三行。slave1、slave2、slave3。
core-site.xml 文件:主要配置Namenode 節點的地址和Hadoop 臨時文件的存儲路徑,在本系統中,臨時文件存儲于/usr/local/hadoop/tmp 文件夾中。
hdfs-site.xml 文件:主要設置HDFS 中文件備份的數量,實現數據安全,本系統配置為3,即每一個塊在分布式集群中備份3 份。
mapred-site.xml 文件:主要配置MapReduce 任務調度框架,任務監聽服務地址和端口。
yarn-site.xml:配置yarn 資源管理器所在的節點。
文件配置完成后,進行節點部署,將Master 節點上的/usr/local/hadoop 文件夾復制到各個節點上,以Slave1 節點為例。
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在slave 節點上,解壓文件夾,并進行授權。
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop /usr/local/hadoop
安裝完成后,在Master 節點上執行Namenode格式化。
$ hdfs namenode -format
最后測試是否安裝成功,啟動Hadoop 集群。
$ start-all.sh
分別在Master 節點和Slave 節點執行jps 命令來查看各個節點中的進程,測試啟動成功即可。
農經云的訂單大數據來源于多個電商平臺,數據的格式和類型各不相同,因此整合后的訂單系統需要支持異源、異構數據的采集。對特定的采集場景,應制定不同的采集方式。訂單整合需要采集的數據主要來源分為3 個部分,業務數據、服務器中日志文件以及來自農經云大數據系統的第三方數據庫;業務數據一般為結構化數據,如客戶、訂單數據等;日志文件中主要包含交易、支付、渠道等信息。
其中訂單需要采集的數據主要包括訂單的生成、訂單審核、訂單出庫、訂單發貨、訂單變更、訂單取消、退換貨等。而整合訂單系統對訂單的管理數據有:所有訂單的待付款,待發貨、已發貨、已完成、已取消等狀態,還有查詢搜索的訂單信息等。
從數據采集的類型上來說,訂單數據采集系統分為2 個部分,實時數據采集和離線數據采集。
實時數據采集。農經云的數據庫需要對連續的訂單業務、客戶服務進行實時數據分析,傳統的數據采集方式已經無法滿足訂單業務的需要。因此,需要進行實時訂單數據采集,提供自動化的訂單數據關聯和業務解析。主要方法是設置業務埋點,當訂單整合系統產生新日志文件時,利用Flume 進行收集,然后通過Kafka 將上游的數據攔截,接著根據業務場景進行對應的處理(例如去重、去噪、中間計算等),最后寫入到對應的數據存儲介質中或者接入流式數據處理框架中,實現數據的實時分析。該過程是流式的處理方式,能滿足每秒數百MB 的日志數據采集和傳輸需求。
離線數據采集。農經云大數據平臺的訂單離線數據采集,主要解決的是不同電商平臺之間的歷史訂單數據導入導出業務,使數據變成整合訂單模式。如訂單數據采用T+1 的數據加工模式,獲取到前一天的訂單歷史數據時,將各系統關系型數據庫中的數據通過Sqoop 工具保存到大數據平臺中的HBase、HDFS 中,為后續的批處理或者交互式訂單查詢提供數據基礎。
系統的訂單數據主要來自多個電商平臺的訂單數據。訂單數據采集主要分為實時數據采集和離線數據采集,其結構如圖2 所示。
由圖2 可知,采集數據類型主要包括訂單日志數據、用戶訂單行為數據、訂單業務數據和訂單狀態數據。實時數據采集采用Flume + Kafka 的模式,Flume 安裝在每個有日志產生的服務器上,監控相應的文件目錄,當產生新日志時,Flume 組件會自動捕獲新文件,然后將文件輸送到Kafka 指定的主題中,完成實時數據的采集,后續將數據輸送到農經云的HBase 等No SQL 數據庫上或者接入流式處理框架,實現數據的實時查詢或處理。離線數據采集則是通過各系統的數據接口獲取相關數據,對數據進行處理后存儲到農經云的關系型數據庫(如Oracle、SQL Server 數據庫) 中,最后通過Sqoop 工具將其數據導入分布式文件系統當中。
實時數據采集所用的框架是Flume + Kafka,將產生的數據收集到Kafka 隊列中,然后同步到HDFS中。實時數據采集流程圖如圖3 所示。
由圖3 可知,Flume 是一個分布式的海量日志聚合系統,支持在系統中定制各類數據發送方。本系統中,Flume 負責監控整個文件目錄或者某一個特定文件,產生新日志文件時,Flume 獲取到日志文件的數據,將數據封裝為event 對象。從scour 中獲取的數據會先封裝為event,然后發送到channel,sink 從channel 拿event 消費。在本系統中sink 對象是Kafka,因此數據上傳到了Kafka 的topic 分區。最后數據同步到HBase 中,或者在框架后接入Storm 等流式實時處理技術。
數據的離線采集采用關系數據庫導入/導出工具Sqoop,它可以直接從RDBMS(關系型數據庫管理系統) 中讀取模式信息,自動執行大部分數據傳輸過程,然后使用MapReduce 將數據導入Hadoop。本系統的離線數據主要通過Sqoop 將訂單業務數據庫中的數據導入到HDFS 或HBase 中。
目前,貴州的農經云已建立了大量農產品交易和市場監控、農村電子商務等數十個應用服務系統,并完成了這些應用系統的云端遷移和數據整理工作。對于眾多的食用菌電商來說,有一個整合的大數據平臺,將分散的訂單資源進行整合,實現訂單數據的自動采集、分類、查詢和統計,對電商平臺來說意義重大。借助農經云的大數據管理平臺對多電商多訂單數據進行整合,也是企業適應復雜多變市場環境的正確選擇。