饒 靜
(重慶青年職業(yè)技術學院,重慶 400712)
農(nóng)經(jīng)云最早是貴州省農(nóng)村綜合經(jīng)濟信息中心建立的大數(shù)據(jù)服務平臺,是貴州實施“云上貴州”戰(zhàn)略的重要組成部分[1]。農(nóng)經(jīng)云的主要服務對象是“農(nóng)業(yè)、農(nóng)村、農(nóng)民”的“三農(nóng)”經(jīng)濟發(fā)展,用人工智能、大數(shù)據(jù)和互聯(lián)網(wǎng)為農(nóng)村農(nóng)業(yè)服務。農(nóng)經(jīng)云數(shù)據(jù)庫包括了農(nóng)村企業(yè)、農(nóng)業(yè)產(chǎn)品、市場銷售,農(nóng)業(yè)氣象水文、農(nóng)村勞動力等多領域多產(chǎn)業(yè)的大數(shù)據(jù)信息,能夠提供海量農(nóng)村大數(shù)據(jù)查詢、綜合化農(nóng)村金融服務、鄉(xiāng)村旅游大數(shù)據(jù)、農(nóng)業(yè)園區(qū)導航、新技術新產(chǎn)品等農(nóng)技服務,還打造了商業(yè)化的農(nóng)村電子商務平臺和便民服務平臺。包含了100 多萬涉農(nóng)企業(yè)用戶、電商和農(nóng)村消費者信息;20 多萬條農(nóng)村服務社、市場價格、氣象和產(chǎn)業(yè)連接等采集數(shù)據(jù),并實現(xiàn)了實時的數(shù)據(jù)監(jiān)測;更有8 000 多萬條農(nóng)產(chǎn)品、市場行情和氣象水文歷史數(shù)據(jù),共同構成了農(nóng)經(jīng)云的大數(shù)據(jù)庫[2]。
貴州是僅次于云南的第二大野生食用菌省份。農(nóng)經(jīng)云的建立,也為貴州打開了一個巨大的市場空間,但同時,市場競爭也十分激烈,借助互聯(lián)網(wǎng)發(fā)展的大潮,近年來各種食用菌電商平臺也不斷涌現(xiàn),除了淘寶、京東等大型綜合性電商平臺外,還有專業(yè)的中國食用菌電商平臺、易菇商城等[3]。各平臺由于數(shù)據(jù)類型和交易方式的差別,訂單內(nèi)容和形式各有不同,平臺之間的訂單信息并不能共享。食用菌賣家需要逐一在這些平臺上查看、核對訂單內(nèi)容、選擇物流方式和交易支付渠道,這對食用菌賣家來說無形中增加了很大的工作量,不同平臺之間的信息不能互通,還造成了訂單統(tǒng)計匯總工作的不便,多平臺多訂單的結(jié)算和數(shù)據(jù)統(tǒng)計十分困難[4]。因此,有必要設計一個食用菌電子商務多訂單的整合系統(tǒng),將不同平臺上的訂單資源進行整合,借助農(nóng)經(jīng)云的大數(shù)據(jù)平臺,簡化多平臺多訂單業(yè)務的操作過程,減少訂單管理步驟,提高訂單的管理效率。
整合訂單系統(tǒng)的總體架構如圖1 所示。
如圖1 所示,根據(jù)食用菌電商平臺的訂單整合業(yè)務需求及農(nóng)村電商特點[5],對平臺采用分層模塊化體系建設,整合訂單系統(tǒng)采用松耦合的架構設計,各模塊之間通過元數(shù)據(jù)的共享和交互,來驅(qū)動數(shù)據(jù)的存儲與計算。實現(xiàn)大數(shù)據(jù)平臺海量、多源、異構數(shù)據(jù)的采集、離線處理和實時計算等功能。系統(tǒng)總體架構由基礎數(shù)據(jù)源層、數(shù)據(jù)采集層、數(shù)據(jù)存儲層、計算層和應用層組成。各層間均采用模塊化設計,通過數(shù)據(jù)接口來實現(xiàn)各模塊和外部系統(tǒng)的集成。
訂單系統(tǒng)采用全分布式模式搭建,由4 個節(jié)點構成即1 臺作為Master 主節(jié)點,3 臺作為Slave 從節(jié)點,負責數(shù)據(jù)存儲;各節(jié)點軟件環(huán)境配置如表1 所示。
由表1 可知,食用菌電商平臺整合訂單系統(tǒng)采用開源的Hadoop 分布式計算框架作為基礎設施,Zookeeper 作為資源協(xié)調(diào)管理器,HDFS 作為分布式文件系統(tǒng),HBase 作為分布式數(shù)據(jù)庫,F(xiàn)lume、Kafka、Sqoop 作為數(shù)據(jù)采集工具,并安裝部署Spark 集群。
食用菌電商平臺整合訂單系統(tǒng)基于Hadoop 平臺架構完成分布式模式搭建,主要步驟如下。
表1 食用菌電商平臺整合訂單系統(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來運行,因此在配置環(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
配置對應節(jié)點名稱和IP 地址,修改配置文件/etc/hosts;配置完成后,測試節(jié)點間能否互相通信,確保節(jié)點間已建立網(wǎng)絡通信。
各節(jié)點之間通過SSH 來進行通信,Master 節(jié)點需要向各節(jié)點分發(fā)命令。SSH 每次通信時都要輸入密碼驗證,對集群來說很不方便,因此需要配置節(jié)點間的免密鑰登陸。
首先在Master 節(jié)點生成公鑰,在Master 節(jié)點的終端中執(zhí)行。
$ cd ~/.ssh
$ cat ./id_rsa.pub >> ./authorized_keys
接著將公鑰發(fā)送到各節(jié)點,以Slave1 為例。
$scp~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
輸入密碼后,會提示完成傳輸,然后在各從節(jié)點上,將ssh 公匙加入授權。
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
其余節(jié)點依據(jù)Slave1 的方式進行配置,所有節(jié)點完后此配置后,在Master 節(jié)點上便可以無密碼SSH 到各個Slave 節(jié)點。
為了實現(xiàn)Hadoop 分布式模式,需要對以下文件進行相應的配置,具體配置過程略,僅給出各文件配置的說明。
slaves 文件: slaves 文件保存的是作為Datanode的主機名,每行一個。本系統(tǒng)中,讓Master 節(jié)點只作為Namenode,因此在slaves 文件添加三行。slave1、slave2、slave3。
core-site.xml 文件:主要配置Namenode 節(jié)點的地址和Hadoop 臨時文件的存儲路徑,在本系統(tǒng)中,臨時文件存儲于/usr/local/hadoop/tmp 文件夾中。
hdfs-site.xml 文件:主要設置HDFS 中文件備份的數(shù)量,實現(xiàn)數(shù)據(jù)安全,本系統(tǒng)配置為3,即每一個塊在分布式集群中備份3 份。
mapred-site.xml 文件:主要配置MapReduce 任務調(diào)度框架,任務監(jiān)聽服務地址和端口。
yarn-site.xml:配置yarn 資源管理器所在的節(jié)點。
文件配置完成后,進行節(jié)點部署,將Master 節(jié)點上的/usr/local/hadoop 文件夾復制到各個節(jié)點上,以Slave1 節(jié)點為例。
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在slave 節(jié)點上,解壓文件夾,并進行授權。
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop /usr/local/hadoop
安裝完成后,在Master 節(jié)點上執(zhí)行Namenode格式化。
$ hdfs namenode -format
最后測試是否安裝成功,啟動Hadoop 集群。
$ start-all.sh
分別在Master 節(jié)點和Slave 節(jié)點執(zhí)行jps 命令來查看各個節(jié)點中的進程,測試啟動成功即可。
農(nóng)經(jīng)云的訂單大數(shù)據(jù)來源于多個電商平臺,數(shù)據(jù)的格式和類型各不相同,因此整合后的訂單系統(tǒng)需要支持異源、異構數(shù)據(jù)的采集。對特定的采集場景,應制定不同的采集方式。訂單整合需要采集的數(shù)據(jù)主要來源分為3 個部分,業(yè)務數(shù)據(jù)、服務器中日志文件以及來自農(nóng)經(jīng)云大數(shù)據(jù)系統(tǒng)的第三方數(shù)據(jù)庫;業(yè)務數(shù)據(jù)一般為結(jié)構化數(shù)據(jù),如客戶、訂單數(shù)據(jù)等;日志文件中主要包含交易、支付、渠道等信息。
其中訂單需要采集的數(shù)據(jù)主要包括訂單的生成、訂單審核、訂單出庫、訂單發(fā)貨、訂單變更、訂單取消、退換貨等。而整合訂單系統(tǒng)對訂單的管理數(shù)據(jù)有:所有訂單的待付款,待發(fā)貨、已發(fā)貨、已完成、已取消等狀態(tài),還有查詢搜索的訂單信息等。
從數(shù)據(jù)采集的類型上來說,訂單數(shù)據(jù)采集系統(tǒng)分為2 個部分,實時數(shù)據(jù)采集和離線數(shù)據(jù)采集。
實時數(shù)據(jù)采集。農(nóng)經(jīng)云的數(shù)據(jù)庫需要對連續(xù)的訂單業(yè)務、客戶服務進行實時數(shù)據(jù)分析,傳統(tǒng)的數(shù)據(jù)采集方式已經(jīng)無法滿足訂單業(yè)務的需要。因此,需要進行實時訂單數(shù)據(jù)采集,提供自動化的訂單數(shù)據(jù)關聯(lián)和業(yè)務解析。主要方法是設置業(yè)務埋點,當訂單整合系統(tǒng)產(chǎn)生新日志文件時,利用Flume 進行收集,然后通過Kafka 將上游的數(shù)據(jù)攔截,接著根據(jù)業(yè)務場景進行對應的處理(例如去重、去噪、中間計算等),最后寫入到對應的數(shù)據(jù)存儲介質(zhì)中或者接入流式數(shù)據(jù)處理框架中,實現(xiàn)數(shù)據(jù)的實時分析。該過程是流式的處理方式,能滿足每秒數(shù)百MB 的日志數(shù)據(jù)采集和傳輸需求。
離線數(shù)據(jù)采集。農(nóng)經(jīng)云大數(shù)據(jù)平臺的訂單離線數(shù)據(jù)采集,主要解決的是不同電商平臺之間的歷史訂單數(shù)據(jù)導入導出業(yè)務,使數(shù)據(jù)變成整合訂單模式。如訂單數(shù)據(jù)采用T+1 的數(shù)據(jù)加工模式,獲取到前一天的訂單歷史數(shù)據(jù)時,將各系統(tǒng)關系型數(shù)據(jù)庫中的數(shù)據(jù)通過Sqoop 工具保存到大數(shù)據(jù)平臺中的HBase、HDFS 中,為后續(xù)的批處理或者交互式訂單查詢提供數(shù)據(jù)基礎。
系統(tǒng)的訂單數(shù)據(jù)主要來自多個電商平臺的訂單數(shù)據(jù)。訂單數(shù)據(jù)采集主要分為實時數(shù)據(jù)采集和離線數(shù)據(jù)采集,其結(jié)構如圖2 所示。
由圖2 可知,采集數(shù)據(jù)類型主要包括訂單日志數(shù)據(jù)、用戶訂單行為數(shù)據(jù)、訂單業(yè)務數(shù)據(jù)和訂單狀態(tài)數(shù)據(jù)。實時數(shù)據(jù)采集采用Flume + Kafka 的模式,F(xiàn)lume 安裝在每個有日志產(chǎn)生的服務器上,監(jiān)控相應的文件目錄,當產(chǎn)生新日志時,F(xiàn)lume 組件會自動捕獲新文件,然后將文件輸送到Kafka 指定的主題中,完成實時數(shù)據(jù)的采集,后續(xù)將數(shù)據(jù)輸送到農(nóng)經(jīng)云的HBase 等No SQL 數(shù)據(jù)庫上或者接入流式處理框架,實現(xiàn)數(shù)據(jù)的實時查詢或處理。離線數(shù)據(jù)采集則是通過各系統(tǒng)的數(shù)據(jù)接口獲取相關數(shù)據(jù),對數(shù)據(jù)進行處理后存儲到農(nóng)經(jīng)云的關系型數(shù)據(jù)庫(如Oracle、SQL Server 數(shù)據(jù)庫) 中,最后通過Sqoop 工具將其數(shù)據(jù)導入分布式文件系統(tǒng)當中。
實時數(shù)據(jù)采集所用的框架是Flume + Kafka,將產(chǎn)生的數(shù)據(jù)收集到Kafka 隊列中,然后同步到HDFS中。實時數(shù)據(jù)采集流程圖如圖3 所示。
由圖3 可知,F(xiàn)lume 是一個分布式的海量日志聚合系統(tǒng),支持在系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方。本系統(tǒng)中,F(xiàn)lume 負責監(jiān)控整個文件目錄或者某一個特定文件,產(chǎn)生新日志文件時,F(xiàn)lume 獲取到日志文件的數(shù)據(jù),將數(shù)據(jù)封裝為event 對象。從scour 中獲取的數(shù)據(jù)會先封裝為event,然后發(fā)送到channel,sink 從channel 拿event 消費。在本系統(tǒng)中sink 對象是Kafka,因此數(shù)據(jù)上傳到了Kafka 的topic 分區(qū)。最后數(shù)據(jù)同步到HBase 中,或者在框架后接入Storm 等流式實時處理技術。
數(shù)據(jù)的離線采集采用關系數(shù)據(jù)庫導入/導出工具Sqoop,它可以直接從RDBMS(關系型數(shù)據(jù)庫管理系統(tǒng)) 中讀取模式信息,自動執(zhí)行大部分數(shù)據(jù)傳輸過程,然后使用MapReduce 將數(shù)據(jù)導入Hadoop。本系統(tǒng)的離線數(shù)據(jù)主要通過Sqoop 將訂單業(yè)務數(shù)據(jù)庫中的數(shù)據(jù)導入到HDFS 或HBase 中。
目前,貴州的農(nóng)經(jīng)云已建立了大量農(nóng)產(chǎn)品交易和市場監(jiān)控、農(nóng)村電子商務等數(shù)十個應用服務系統(tǒng),并完成了這些應用系統(tǒng)的云端遷移和數(shù)據(jù)整理工作。對于眾多的食用菌電商來說,有一個整合的大數(shù)據(jù)平臺,將分散的訂單資源進行整合,實現(xiàn)訂單數(shù)據(jù)的自動采集、分類、查詢和統(tǒng)計,對電商平臺來說意義重大。借助農(nóng)經(jīng)云的大數(shù)據(jù)管理平臺對多電商多訂單數(shù)據(jù)進行整合,也是企業(yè)適應復雜多變市場環(huán)境的正確選擇。