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

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