駱金維 曾德生 潘志宏 劉陪雄
文章編號(hào): 2095-2163(2018)03-0148-07中圖分類(lèi)號(hào): 文獻(xiàn)標(biāo)志碼: A
摘要: 關(guān)鍵詞: based on big data platform
(1 GuangDong Innovative Technical College, Dongguan Guangdong 523960, China;
2 XINHUA College of sun YAT-SEN University, Guangzhou 510520, China;
3 Guangdong Polytechnic of Environmental Protection Engineering,F(xiàn)oshan Guangdong 528216, China)
Abstract: In the era of big data, the number of data shows geometric level growth. The traditional single server architecture's teaching resource sharing system has been unable to store and process large amounts of data, so it is required to build large data platform for storage processing. The teaching resource sharing system based on big data platform is to build teaching resource sharing system in educational informatization. Its storage capacity is large, and the amount of data processing is large. While users access the teaching resources and real-time count data access to teaching resources, big data platform could be built,which uses Hadoop distributed file storage and achieve real-time access and statistics of teaching resources through spark memory computing, then uses data visualization technology to indicate users access statistics, in order to view the usage of teaching resources in the users. The research provides a strong basis for the future construction of teaching resources.
Key words:
基金項(xiàng)目:
作者簡(jiǎn)介:
通訊作者:
收稿日期: 引言
互聯(lián)網(wǎng)技術(shù)不斷發(fā)展,其信息數(shù)據(jù)量正呈現(xiàn)爆炸式增長(zhǎng),信息化技術(shù)已進(jìn)入大數(shù)據(jù)時(shí)代。在大數(shù)據(jù)時(shí)代對(duì)數(shù)據(jù)的存儲(chǔ)與處理要求更高,可利用大數(shù)據(jù)技術(shù)解決傳統(tǒng)的基于單機(jī)服務(wù)器進(jìn)行教學(xué)資源共享時(shí)對(duì)用戶訪問(wèn)日志數(shù)據(jù)不能進(jìn)行實(shí)時(shí)統(tǒng)計(jì)分析的問(wèn)題。當(dāng)用戶點(diǎn)擊教學(xué)資源共享平臺(tái)的教學(xué)資源時(shí),后臺(tái)Web服務(wù)器會(huì)產(chǎn)生一個(gè)對(duì)應(yīng)訪問(wèn)日志文件,這個(gè)日志文件包含IP地址、訪問(wèn)用戶名、訪問(wèn)時(shí)間等信息,利用大數(shù)據(jù)技術(shù)對(duì)日志記錄文本文件進(jìn)行處理、統(tǒng)計(jì)教學(xué)資源訪問(wèn)使用情況,為資源管理及后續(xù)建設(shè)提供一定的參考。
大數(shù)據(jù)處理技術(shù)是利用服務(wù)器集群的方式解決單臺(tái)服務(wù)器處理不了的技術(shù)問(wèn)題,當(dāng)存儲(chǔ)的數(shù)據(jù)量以及要處理的計(jì)算量非常大時(shí),單臺(tái)服務(wù)器顯得力不從心,應(yīng)搭建服務(wù)器集群的方式進(jìn)行分布式存儲(chǔ)和計(jì)算才能滿足數(shù)據(jù)的存儲(chǔ)及處理。對(duì)基于大數(shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)訪問(wèn)量進(jìn)行實(shí)時(shí)統(tǒng)計(jì)時(shí),需要先搭建Hadoop分布式系統(tǒng)來(lái)存儲(chǔ)相關(guān)教學(xué)資源數(shù)據(jù),然后利用Flume收集服務(wù)器中的日志數(shù)據(jù),接著對(duì)日志記錄數(shù)據(jù)進(jìn)行清洗并存儲(chǔ)在Hadoop的HDFS文件系統(tǒng)上,再通過(guò)Spark技術(shù)對(duì)HDFS上的數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算處理,并將計(jì)算結(jié)果存儲(chǔ)在HBase中,通過(guò)Sqoop把數(shù)據(jù)導(dǎo)出到MySQL等關(guān)系型數(shù)據(jù)庫(kù)中,最終通過(guò)可視化技術(shù)將統(tǒng)計(jì)分析的數(shù)據(jù)以圖形圖像的形式展現(xiàn)給用戶。
1相關(guān)技術(shù)介紹
利用大數(shù)據(jù)技術(shù)實(shí)時(shí)統(tǒng)計(jì)用戶訪問(wèn)教學(xué)資源情況,先要解決教學(xué)資源數(shù)據(jù)存儲(chǔ)及處理問(wèn)題,需搭建基于大數(shù)據(jù)的教學(xué)資源共享平臺(tái),通過(guò)對(duì)用戶訪問(wèn)教學(xué)資源的日志記錄信息進(jìn)行采集清洗統(tǒng)計(jì)處理,了解教學(xué)資源的使用情況,系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)過(guò)程中需要利用如下大數(shù)據(jù)技術(shù)。
1.1Hadoop
Hadoop是大數(shù)據(jù)處理的基本平臺(tái),進(jìn)行離線計(jì)算處理的基本工具。其核心技術(shù)包括Hadoop Distributed File System、Hadoop MapReduce、Hadoop Common、Hadoop Yarn 4大模塊?;诖髷?shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)中,用戶訪問(wèn)教學(xué)資源情況統(tǒng)計(jì)充分利用Map-Reduce分布式計(jì)算框架及HDFS分布式文件存儲(chǔ)系統(tǒng),其MapReduce分布式模式用戶編寫(xiě)的程序分成Mapper、Reducer、Driver(提交運(yùn)行mr程序的客戶端)3個(gè)部分。Mapper的輸入數(shù)據(jù)及輸出數(shù)據(jù)均是Key—Value對(duì)形式。 Mapper中的業(yè)務(wù)邏輯寫(xiě)在mapper()方法中,mapper()方法(maptask進(jìn)程)對(duì)每一個(gè)
1.2HBase
HBase非關(guān)系型數(shù)據(jù)庫(kù)是基于Google Bigtable實(shí)現(xiàn)的開(kāi)源、分布式、可伸縮的列式存儲(chǔ)數(shù)據(jù)庫(kù),是Hadoop生態(tài)的重要一環(huán)。基于Storm、Spark等框架的數(shù)據(jù)處理方案中也可利用其進(jìn)行數(shù)據(jù)存儲(chǔ)。HBase的結(jié)構(gòu)包括表(table)、行(row)、列族(column family)、列(column)、單元格(cell)、版本(version)等。 一張表中包含若干行, 一行包括一個(gè)行鍵(row key)和若干列族,一張表中的行 按照行鍵排序 ,并用行鍵作為索引。 每個(gè)列族包含若干個(gè)列, 列族需要在建表時(shí)預(yù)定義,運(yùn)行期間可以動(dòng)態(tài)加入新的列 。在物理層面,HBase的數(shù)據(jù)存儲(chǔ)是在列族這一層級(jí)進(jìn)行組織,每個(gè)列族單獨(dú)存儲(chǔ)。 每個(gè)列都?xì)w屬于某個(gè)列族,以列族名作為前綴,通常使用 列族名 的形式來(lái)標(biāo)識(shí)一個(gè)列。 存儲(chǔ)的每一個(gè)值存放在一個(gè)單元格中,由 [行,列,版本號(hào)] 來(lái)唯一指向一個(gè)單元格。版本號(hào)默認(rèn)是時(shí)間戳形式,同一列中可能包含若干單元格,這些單元格由版本號(hào)唯一區(qū)分, 根據(jù)版本號(hào)降序排列 。HBase架構(gòu)如圖1所示。
1.3Flume
Flume是具有高可用性、高可靠性、分布式海量日志采集、聚合和傳輸?shù)南到y(tǒng)??蓸?gòu)建擴(kuò)展的分布式系統(tǒng)來(lái)收集大量數(shù)據(jù)流,把Web服務(wù)器上的數(shù)據(jù)進(jìn)行采集,有基于數(shù)據(jù)流的簡(jiǎn)單靈活的體系結(jié)構(gòu)。具有可調(diào)的可靠性機(jī)制和許多故障轉(zhuǎn)移和恢復(fù)機(jī)制,具有健壯性和容錯(cuò)性。其使用一個(gè)簡(jiǎn)單的可擴(kuò)展的數(shù)據(jù)模型,允許聯(lián)機(jī)分析應(yīng)用程序。采集日志數(shù)據(jù)流程如圖2所示。
1.4Sqoop
Sqoop是實(shí)現(xiàn)數(shù)據(jù)遷移的工具,可實(shí)現(xiàn)Hadoop上的HDFS數(shù)據(jù)和關(guān)系數(shù)據(jù)庫(kù)服務(wù)器之間進(jìn)行傳輸數(shù)據(jù),可以將MySQL、Oracle等關(guān)系型數(shù)據(jù)導(dǎo)入到Hadoop的HDFS、Hive、HBase等數(shù)據(jù)存儲(chǔ)系統(tǒng)中;亦可以將Hadoop的分布式文件系統(tǒng)HDFS中的數(shù)據(jù)導(dǎo)出到關(guān)系數(shù)據(jù)庫(kù)中。將導(dǎo)入或?qū)С雒罘g成mapreduce程序進(jìn)行實(shí)現(xiàn),在翻譯出的mapreduce中主要是對(duì)inputformat和outputformat進(jìn)行定制。Sqoop導(dǎo)入導(dǎo)出流程如圖3所示。
1.5Hive
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù),可將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表。提供簡(jiǎn)單的SQL查詢功能,管理存儲(chǔ)在分布式系統(tǒng)上的數(shù)據(jù)集。可將SQL語(yǔ)句轉(zhuǎn)換成MapReduce作業(yè)程序進(jìn)行運(yùn)行,通過(guò)類(lèi)SQL語(yǔ)句快速實(shí)現(xiàn)MapReduce統(tǒng)計(jì)。其適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析,Hive的體系結(jié)構(gòu)如圖4所示。
1.6Spark
Spark是一種大數(shù)據(jù)計(jì)算框架,類(lèi)似于Hadoop的MapReduce,是通用的大數(shù)據(jù)快速處理引擎,使用一個(gè)技術(shù)堆棧解決大數(shù)據(jù)領(lǐng)域的一些計(jì)算任務(wù)。在內(nèi)存中處理及運(yùn)行速度較快,但不具有文件管理功能。Spark最主要的核心技術(shù)是Resilient Distributed Datasets 即彈性分布式數(shù)據(jù)集,對(duì)數(shù)據(jù)的操作轉(zhuǎn)換成為RDD的操作。Spark由Spark RDD、Spark SQL、Spark Streaming、MLlib、GraphX等組成,解決大數(shù)據(jù)領(lǐng)域中離線批處理、交互式查詢、實(shí)時(shí)流計(jì)算、機(jī)器學(xué)習(xí)與圖計(jì)算等任務(wù)和問(wèn)題。Spark 整體架構(gòu)如圖5所示。行Spark核心編程時(shí)先要?jiǎng)?chuàng)建一個(gè)代表和包含了Spark應(yīng)用程序的輸入源數(shù)據(jù)的RDD,在創(chuàng)建了初始的RDD之后,才可以通過(guò)Spark Core提供的transformation算子對(duì)該RDD進(jìn)行轉(zhuǎn)換,來(lái)獲取其它RDD。Spark Core提供了使用程序中的集合創(chuàng)建RDD、本地文件創(chuàng)建RDD、HDFS文件系統(tǒng)創(chuàng)建RDD的方式。
Spark Streaming是一種Spark提供的對(duì)于大數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算的一種框架,是Spark Core API的一種擴(kuò)展,用于進(jìn)行大規(guī)模、高吞吐量、容錯(cuò)的實(shí)時(shí)數(shù)據(jù)流的處理。支持從Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP Socket等多種數(shù)據(jù)源中讀取數(shù)據(jù),使用類(lèi)似高階函數(shù)的復(fù)雜算法來(lái)進(jìn)行數(shù)據(jù)處理。例如map、reduce、join和window,處理后的數(shù)據(jù)可以被保存到文件系統(tǒng)、數(shù)據(jù)庫(kù)等存儲(chǔ)中。處理過(guò)程如圖6所示。
Spark Streaming基本工作原理如下:接收實(shí)時(shí)輸入數(shù)據(jù)流,將數(shù)據(jù)拆分成多個(gè)batch,每收集1秒的數(shù)據(jù)封裝為一個(gè)batch,將每個(gè)batch交給Spark的計(jì)算引擎進(jìn)行處理,最后會(huì)生產(chǎn)出一個(gè)結(jié)果數(shù)據(jù)流。其工作原理如圖7所示。
Spark SQL支持對(duì)Hive中存儲(chǔ)的數(shù)據(jù)進(jìn)行讀寫(xiě),操作Hive中的數(shù)據(jù)時(shí),必須創(chuàng)建HiveContext,而不是SQLContext。HiveContext繼承自SQLContext,但是增加了在Hive元數(shù)據(jù)庫(kù)中查找表,以及用HiveQL語(yǔ)法編寫(xiě)SQL的功能。除了sql()方法,HiveContext還提供了hql()方法,從而用Hive語(yǔ)法來(lái)編譯sql。使用HiveContext,可以執(zhí)行Hive的大部分功能,包括創(chuàng)建表、向表中導(dǎo)入數(shù)據(jù)以及用SQL語(yǔ)句查詢表中的數(shù)據(jù)。
1.7Azkaban
Azkaban是應(yīng)用于Hadoop生態(tài)圈的任務(wù)調(diào)度器,可以調(diào)度linux命令及mapreduce、spark、pig、java、hive程序、腳本工作流等任務(wù)。簡(jiǎn)單的任務(wù)調(diào)度可直接使用linux的crontab來(lái)定義,而復(fù)雜的任務(wù)調(diào)度,需要開(kāi)發(fā)調(diào)度平臺(tái)或使用原有的開(kāi)源調(diào)度系統(tǒng)。 Azkaban是用來(lái)做Hadoop相關(guān)任務(wù)調(diào)度的調(diào)度器,主要由web server、executor server、mysql三個(gè)關(guān)鍵部件組成。在一個(gè)工作流內(nèi)以一個(gè)特定的順序運(yùn)行一組工作流程。Azkaban使用job配置文件建立任務(wù)之間的依賴關(guān)系,并提供易于使用的web用戶界面維護(hù)和跟蹤的工作流。Azkaban組成結(jié)構(gòu)如圖8所示。
1.8數(shù)據(jù)可視化技術(shù)
數(shù)據(jù)可視化技術(shù)是利用計(jì)算機(jī)圖形學(xué)和圖像處理技術(shù),將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在屏幕上顯示出來(lái),并進(jìn)行交互處理的理論、方法和技術(shù)。為便于查看用戶訪問(wèn)教學(xué)資源情況,利用數(shù)據(jù)可視化技術(shù)將統(tǒng)計(jì)結(jié)果以圖表的方式顯示出來(lái),圖表比數(shù)據(jù)表更有表現(xiàn)力,更直觀形象容易理解,以便于進(jìn)行分析。并利用大數(shù)據(jù)可視化技術(shù)將統(tǒng)計(jì)的結(jié)果以圖形圖像的方式展現(xiàn)出來(lái),如使用Echart等圖形可視化技術(shù)構(gòu)建靜態(tài)的HTML頁(yè)面進(jìn)行顯示。
2系統(tǒng)分析
基于大數(shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)訪問(wèn)量實(shí)時(shí)統(tǒng)計(jì)主要是當(dāng)用戶點(diǎn)擊教學(xué)資源共享平臺(tái)的教學(xué)資源時(shí),后臺(tái)服務(wù)器會(huì)產(chǎn)生一個(gè)日志信息,記錄用戶訪問(wèn)日志的行為。這個(gè)日志信息包含IP地址、用戶名、訪問(wèn)時(shí)間、訪問(wèn)的模塊、地址使用的方式等信息。通過(guò)日志信息進(jìn)行采集整理,可以得到網(wǎng)站頁(yè)面的訪問(wèn)量、網(wǎng)站的黏性。對(duì)用戶訪問(wèn)網(wǎng)站行為進(jìn)行分析,獲得網(wǎng)站訪問(wèn)量基本數(shù)據(jù),對(duì)有關(guān)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、分析,從中發(fā)現(xiàn)用戶訪問(wèn)網(wǎng)站的規(guī)律,并將這些規(guī)律與今后教學(xué)資源建設(shè)等相結(jié)合,從而發(fā)現(xiàn)教學(xué)資源的使用情況,被用戶接受程度,用戶訪問(wèn)的時(shí)間等情況。系統(tǒng)結(jié)構(gòu)如圖9所示。
對(duì)用戶行為日志數(shù)據(jù)分析有利于對(duì)教學(xué)資源平臺(tái)建設(shè)的使用程度進(jìn)行考量,為今后的教學(xué)資源建設(shè)提供參考借鑒意義。用戶行為日志數(shù)據(jù)分析包含以下內(nèi)容:用戶的來(lái)源地區(qū)、來(lái)路域名和頁(yè)面、 用戶在網(wǎng)站的停留時(shí)間、跳出率、回訪者、新訪問(wèn)者、回訪次數(shù)、回訪相隔天數(shù)、 注冊(cè)用戶和非注冊(cè)用戶,分析兩者之間的瀏覽習(xí)慣、用戶所使用的搜索引擎、關(guān)鍵詞、關(guān)聯(lián)關(guān)鍵詞和站內(nèi)關(guān)鍵字、用戶選擇的入口形式(廣告或者網(wǎng)站入口鏈接)、用戶訪問(wèn)網(wǎng)站流程、 用戶在頁(yè)面上的網(wǎng)頁(yè)熱點(diǎn)圖分布數(shù)據(jù)、網(wǎng)頁(yè)覆蓋圖數(shù)據(jù)、用戶在不同時(shí)段的訪問(wèn)量、用戶對(duì)于網(wǎng)站的字體顏色的喜好程度等進(jìn)行分析。通過(guò)對(duì)用戶行為日志數(shù)據(jù)的分析,可以讓資源管理者更加詳細(xì)、清楚地了解用戶的行為習(xí)慣,從而找出共享平臺(tái)、課程資源、教學(xué)資源存在的問(wèn)題,有助于教學(xué)資源建設(shè)改進(jìn)提高。系統(tǒng)組件結(jié)構(gòu)如圖10所示。
3系統(tǒng)設(shè)計(jì)
基于大數(shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)是在基于Hadoop平臺(tái)上建立的課程教學(xué)資源共享平臺(tái),其系統(tǒng)層次架構(gòu)設(shè)計(jì)主要有終端接入層(pc機(jī)、筆記本、瘦終端、平板電腦、智能手機(jī)等終端設(shè)備);業(yè)務(wù)應(yīng)用層(課程資源存儲(chǔ)、課程資源搜索、課程資源推薦、以及用戶訪問(wèn)教學(xué)資源統(tǒng)計(jì))。其中底層架構(gòu)的硬件平臺(tái)主要用虛擬化技術(shù)對(duì)服務(wù)器硬件進(jìn)行虛擬化,將一臺(tái)物理服務(wù)器虛擬抽象為若干邏輯計(jì)算機(jī)、計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等資源脫離真實(shí)的環(huán)境而在虛擬環(huán)境下運(yùn)行。在同一臺(tái)服務(wù)器上實(shí)現(xiàn)同時(shí)運(yùn)行多臺(tái)邏輯計(jì)算機(jī),每臺(tái)邏輯計(jì)算機(jī)可獨(dú)立運(yùn)行完全不同的操作系統(tǒng),有效的隔離資源,提高計(jì)算機(jī)工作效率。
業(yè)務(wù)應(yīng)用層中的用戶訪問(wèn)教學(xué)資源統(tǒng)計(jì)業(yè)務(wù)是在虛擬化硬件基礎(chǔ)上安裝搭建Hadoop分布式文件系統(tǒng),部署安裝Hive、HBase、Flume、Azkaban、 Sqoop、MySQL、Spark等軟件系統(tǒng)。當(dāng)用戶點(diǎn)擊共享平臺(tái)中的教學(xué)資源時(shí),通過(guò)socket或者h(yuǎn)ttp協(xié)議傳輸數(shù)據(jù)到Web服務(wù)器,Web服務(wù)器apache、Nginx、Tomcat等接收到信息后會(huì)在相應(yīng)的目錄下產(chǎn)生日志記錄數(shù)據(jù);使用linux系統(tǒng)的定時(shí)系統(tǒng)或開(kāi)發(fā)程序和腳本對(duì)日志記錄數(shù)據(jù)進(jìn)行初步處理;Flume監(jiān)控目錄,當(dāng)受監(jiān)控的目錄有變化時(shí),F(xiàn)lume進(jìn)行日志記錄數(shù)據(jù)采集處理,然后交給Hadoop的HDFS文件系統(tǒng)或Hive數(shù)據(jù)倉(cāng)庫(kù)。然后通過(guò)SparkStreaming實(shí)時(shí)流處理,對(duì)關(guān)鍵信息字段進(jìn)行分類(lèi)統(tǒng)計(jì)。系統(tǒng)數(shù)據(jù)處理過(guò)程如圖11所示。
日志數(shù)據(jù)采集清洗整理后,需要編寫(xiě)MapReduce程序來(lái)過(guò)濾數(shù)據(jù),并將相關(guān)數(shù)據(jù)存儲(chǔ)在Hadoop的HDFS文件系統(tǒng)中。使用Hive對(duì)每時(shí)、每天、每月訪問(wèn)教學(xué)資源數(shù)據(jù)進(jìn)行統(tǒng)計(jì),Hive 數(shù)據(jù)和Hive通過(guò)腳本進(jìn)行綁定,然后通過(guò)Sqoop將Hive的分析結(jié)果數(shù)據(jù)導(dǎo)入MySQL數(shù)據(jù)庫(kù) ,最后通過(guò)JavaWeb展現(xiàn)頁(yè)面,整個(gè)處理過(guò)程可以通過(guò)搭建Azkaban服務(wù)器來(lái)進(jìn)行統(tǒng)一調(diào)度管理。
4系統(tǒng)實(shí)現(xiàn)
基于大數(shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)由多臺(tái)服務(wù)器支持。其中6臺(tái)服務(wù)器組合成一個(gè)Hadoop集群并安裝Spark;3臺(tái)安裝Zookeeper;3臺(tái)安裝Flume;3臺(tái)服務(wù)器安裝HBase;3臺(tái)服器組成一個(gè)Web服務(wù)器集群;2臺(tái)服務(wù)器組成一個(gè)查詢接品服務(wù)器和前端展示服務(wù)器集群。系統(tǒng)間數(shù)據(jù)處理流程如圖12所示。
一個(gè)完整的日志數(shù)據(jù)統(tǒng)計(jì)分析系統(tǒng)通常都是由大量任務(wù)單元組成的,分布式處理技術(shù)是將大的計(jì)算任務(wù)分配給集群中的各個(gè)計(jì)算節(jié)點(diǎn)進(jìn)行計(jì)算,完成計(jì)算任務(wù)后再進(jìn)行合并?;诖髷?shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)用戶訪問(wèn)教學(xué)資源實(shí)時(shí)統(tǒng)計(jì)時(shí)數(shù)據(jù)源是從linux系統(tǒng)服務(wù)器shell腳本程序開(kāi)始運(yùn)行,設(shè)置crontab程序?qū)崿F(xiàn)將日志數(shù)據(jù)實(shí)時(shí)傳遞Flume服務(wù),通過(guò)Hadoop先將原始數(shù)據(jù)同步到HDFS上;借助MapReduce計(jì)算框架對(duì)原始數(shù)據(jù)進(jìn)行轉(zhuǎn)換,生成的數(shù)據(jù)以分區(qū)表的形式存儲(chǔ)到多張Hive表中;需要對(duì)Hive中多個(gè)表的數(shù)據(jù)進(jìn)行JOIN處理,得到一個(gè)明細(xì)數(shù)據(jù)Hive大表;將明細(xì)數(shù)據(jù)進(jìn)行復(fù)雜的統(tǒng)計(jì)分析,得到結(jié)果報(bào)表信息;然后將數(shù)據(jù)通過(guò)Sqoop導(dǎo)入到關(guān)系型數(shù)據(jù)庫(kù)MySQL 中,再利用可視化工具把數(shù)據(jù)庫(kù)中的數(shù)據(jù)以圖形的方式展現(xiàn)出來(lái)。以下是實(shí)現(xiàn)對(duì)用戶訪問(wèn)教學(xué)資源系統(tǒng)實(shí)時(shí)訪問(wèn)統(tǒng)計(jì)的部分程序代碼。
(1)使用spark-streaming完成數(shù)據(jù)清洗操作
object DataUtils {
val YYYYMMDDHHMMSS_FORMAT=
FastDateFormat.getInstance("yyyy-MM-dd
HH:mm:ss");
val TARGE_FORMAT = FastDateFormat.
getInstance("yyyyMMdd");
def getTime(time: String)={
YYYYMMDDHHMMSS_FORMAT.parse(time).getTime
}
def parseToMinute(time:String)={
TARGE_FORMAT.format(new Date(getTime(time)))
}
def main(args: Array[String]): Unit = {
println(parseToMinute("2017-11-22 01:20:20"))
}
}
(2)針對(duì)數(shù)據(jù)進(jìn)行分析,清洗數(shù)據(jù),過(guò)濾出無(wú)用數(shù)據(jù)
val cleanData = logs.map(line =>{
val infos = line.split("\\t")
val url = infos(2).split(" ")(1)
var categaryId = 0
if(url.startsWith("/www")){
categaryId = url.split("/")(2).toInt
}
ClickLog(infos(0),DataUtils.parseToMin(infos(1)),categaryId,infos(4).toInt,infos(3))
}).filter(clickLog=>clickLog.categaryId!=0)
cleanData.print()
(3)保存收集數(shù)據(jù)到HBase 數(shù)據(jù)庫(kù)
cleanLog.map(log=>{
(log.time.substring(0,8)+"_"+log.categaryId,1)
}).reduceByKey(_+_).foreachRDD(rdd=>{
rdd.foreachPartition(partriosRdds=>{
val list = new ListBuffer[CategaryClickCount]
partriosRdds.foreach(pair=>{
list.append(CategaryClickCount(pair._1,pair._2))
})
CategaryClickCountDAO.save(list)
})
})
(4)利用Spark進(jìn)行日志數(shù)據(jù)分割業(yè)務(wù)功能實(shí)現(xiàn)(部分代碼)
cleanLog.map(log=>{
val referer = log.refer.replace("http://","/")
val splits = referer.split("/")
var host = ""
if(splits.length > 2){
host = splits(1)
}
(host,log.categaryId,log.time)
}).filter(_._1!="").map(x =>{
(x._3.substring(0,8)+"_"+x._1+"_"+x._2,1)
}).reduceByKey(_+_).foreachRDD(rdd=>{
rdd.foreachPartition(partitionRecods=>{
val list = new ListBuffer[CategarySearchClickCount]
partitionRecods.foreach(pair=>{
list.append(CategarySearchClickCount(pair._1,pair._2))
})
CategarySearchClickCountDAO.save(list)
})
})
(5)通頁(yè)面調(diào)用數(shù)據(jù)展示(數(shù)據(jù)可視化部分代碼)
data: (function () {
var datas = [];
$.ajax({
type: "POST",
url: "/sparkweb/CategoryClickCount",
dataType: 'json',
async: false,
success: function (result) {
for (var i = 0; i < result.length; i++) {
{value: 335,
name: '直接訪問(wèn)'}
datas.push({"value": result[i].value, "name":result[i].name})
}
}
})
return datas;
})()
5結(jié)束語(yǔ)
基于大數(shù)據(jù)平臺(tái)的教學(xué)資源共享系統(tǒng)用戶訪問(wèn)量比較大,日志文件數(shù)量多,計(jì)算處理統(tǒng)計(jì)日志文件其任務(wù)量重,將Hadoop與Spark進(jìn)行融合。通過(guò)Spark Streaming對(duì)大數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算,有效提高統(tǒng)計(jì)效率,達(dá)到實(shí)時(shí)計(jì)算效應(yīng)。搭建基層Hadooop大數(shù)據(jù)分布式文件存儲(chǔ)平臺(tái),以供數(shù)據(jù)存儲(chǔ)服務(wù)。通過(guò)linux系統(tǒng)的Crontab來(lái)調(diào)度日志文件,供Flume進(jìn)行采集,由Spark Streaming對(duì)數(shù)據(jù)進(jìn)行處理統(tǒng)計(jì),統(tǒng)計(jì)用戶訪問(wèn)量以及資源利用率等指標(biāo),將相關(guān)的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,前端頁(yè)面將通過(guò)調(diào)用Echar等圖表工具對(duì)數(shù)據(jù)進(jìn)行可視化展示。
參考文獻(xiàn)
[1] 馮興杰. Hadoop與Spark應(yīng)用場(chǎng)景研究 [J/OL]. 計(jì)算機(jī)應(yīng)用研究,2018,35(9).[2017-10-10].http://www.arocmage.com/article/02-2018-09-065.html.
[2] 李博. 基于Hadoop的超市數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì)[J]. 武漢輕工大學(xué)學(xué)報(bào),2015,34(4)35-39.
[3] 郝增勇. 基于Hadoop用戶行為分析系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京交通大學(xué),2014.
[4] 李爽. 基于Spark的數(shù)據(jù)處理分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:北京交通大學(xué),2015.