官术网_书友最值得收藏!

1.3 項目架構設計

本節(jié)對“用戶搜索行為分析系統(tǒng)”項目中所使用的大數(shù)據(jù)框架Hadoop、ZooKeeper、Kafka、Flume、HBase、Spark等進行簡要介紹,為后續(xù)的系統(tǒng)搭建打下理論基礎??蚣艿脑敿毥榻B讀者可查閱筆者的《Hadoop 3.x大數(shù)據(jù)開發(fā)實戰(zhàn)(視頻教學版)》一書。

Apache Hadoop是大數(shù)據(jù)開發(fā)所使用的一個核心框架,是一個允許使用簡單編程模型跨計算機集群分布式處理大型數(shù)據(jù)集的系統(tǒng)。使用Hadoop可以方便地管理分布式集群,將海量數(shù)據(jù)分布式地存儲在集群中,并使用分布式并行程序來處理這些數(shù)據(jù)。它被設計成從單個服務器擴展到數(shù)千臺計算機,每臺計算機都提供本地計算和存儲。Hadoop本身的設計目的是不依靠硬件來提供高可用性,而是在應用層檢測和處理故障。

隨著Hadoop生態(tài)系統(tǒng)的成長,出現(xiàn)了越來越多的新項目,這些項目有的需要依賴Hadoop,有的可以獨立運行,有的對Hadoop提供了很好的補充。

本書講解的“用戶搜索行為分析系統(tǒng)”項目的架構設計如圖1-3所示。

圖1-3 “用戶搜索行為分析系統(tǒng)”技術架構

1.數(shù)據(jù)來源層

用戶在Web網(wǎng)站和手機App中瀏覽相關信息,服務器端會生成大量的日志文件記錄用戶的瀏覽行為。日志文件屬于半結構化數(shù)據(jù),和普通純文本相比,半結構化數(shù)據(jù)具有一定的結構性,有基本固定的結構模式,例如日志文件、XML文檔、JSON文檔、Email等都屬于半結構化數(shù)據(jù)。

2.數(shù)據(jù)傳輸層

使用Flume+Kafka構建數(shù)據(jù)傳輸層。

Apache Flume是一個分布式的、可靠和易用的日志收集系統(tǒng),用于將大量日志數(shù)據(jù)從許多不同的源進行收集、聚合,最終移動到一個集中的數(shù)據(jù)中心進行存儲。Flume的使用不僅限于日志數(shù)據(jù)聚合,由于數(shù)據(jù)源是可定制的,因此Flume可以用于傳輸大量數(shù)據(jù),包括但不限于網(wǎng)絡流量數(shù)據(jù)、社交媒體生成的數(shù)據(jù)、電子郵件消息和幾乎所有可能的數(shù)據(jù)源。

Kafka是一個基于ZooKeeper的高吞吐量低延遲的分布式的發(fā)布與訂閱消息系統(tǒng),它可以實時處理大量消息數(shù)據(jù)以滿足各種需求。即便使用非常普通的硬件,Kafka每秒也可以處理數(shù)百萬條消息,其延遲最低只有幾毫秒。

為了使Flume收集的數(shù)據(jù)和下游系統(tǒng)之間解耦合,保證數(shù)據(jù)傳輸?shù)牡脱舆t,采用Kafka作為消息中間件進行日志的中轉。

3.數(shù)據(jù)存儲層

大數(shù)據(jù)項目使用HDFS、HBase、Hive和MySQL構成數(shù)據(jù)存儲層。

HDFS(Hadoop Distributed File System)是Hadoop項目的核心子項目,在大數(shù)據(jù)開發(fā)中通過分布式計算對海量數(shù)據(jù)進行存儲與管理。它基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā),可以運行在廉價的商用服務器上,為海量數(shù)據(jù)提供了不懼故障的存儲方法,進而為超大數(shù)據(jù)集的應用處理帶來了很多便利。

HBase是一個分布式的、非關系型的列式數(shù)據(jù)庫,數(shù)據(jù)存儲于分布式文件系統(tǒng)HDFS中,并且使用ZooKeeper作為協(xié)調服務。HDFS為HBase提供了高可靠性的底層存儲支持,ZooKeeper則為HBase提供了穩(wěn)定的服務和失效恢復機制。

HBase的設計目的是處理非常龐大的表,甚至可以使用普通計算機處理超過10億行的、由數(shù)百萬列組成的表的數(shù)據(jù)。

Hive是一個基于Hadoop的數(shù)據(jù)倉庫架構,使用SQL語句讀、寫和管理大型分布式數(shù)據(jù)集。Hive可以將SQL語句轉換為MapReduce(或Apache Spark和Apache Tez)任務執(zhí)行,大大降低了Hadoop的使用門檻,減少了開發(fā)MapReduce程序的時間成本。

我們可以將Hive理解為一個客戶端工具,它提供了一種類SQL查詢語言,稱為HiveQL。這使得Hive十分適合數(shù)據(jù)倉庫的統(tǒng)計分析,能夠輕松使用HiveQL開啟數(shù)據(jù)倉庫任務,如提取/轉換/加載(ETL)、分析報告和數(shù)據(jù)分析。Hive不僅可以分析HDFS文件系統(tǒng)中的數(shù)據(jù),也可以分析其他存儲系統(tǒng)(例如HBase)中的數(shù)據(jù)。

MySQL是最好的關系數(shù)據(jù)庫管理系統(tǒng)應用軟件。本書使用MySQL存儲用戶行為數(shù)據(jù)的計算結果,便于后續(xù)通過Web應用等輕量級框架讀取結果進行用戶端展示。

4.數(shù)據(jù)計算層

數(shù)據(jù)計算層的核心是Spark計算引擎。

Spark是一個快速通用的集群計算系統(tǒng)。它提供了Java、Scala、Python和R的高級API,以及一個支持通用的執(zhí)行圖計算的優(yōu)化引擎。它還支持一組豐富的高級工具,包括使用SQL進行結構化數(shù)據(jù)處理的Spark SQL、用于機器學習的MLlib、用于圖處理的GraphX,以及用于實時流處理的Spark Streaming。

Spark的核心(Spark Core)是一個對由很多計算任務組成的、運行在多個工作機器或者一個計算機集群上的應用進行調度、分發(fā)以及監(jiān)控的計算引擎。在Spark Core的基礎上,Spark提供了一系列面向不同應用需求的組件,例如Spark SQL和Spark Streaming。

Spark SQL和Spark Streaming都屬于Spark系統(tǒng)的組件,它們都依賴于底層的Spark Core。Spark SQL可結合HBase進行數(shù)據(jù)的查詢與分析,Spark Streaming可以進行實時流數(shù)據(jù)的處理。這兩種不同的處理方式可以在同一應用中無縫使用,大大降低了開發(fā)和維護的人力成本。

5.服務層

使用JavaWeb構建系統(tǒng)頂層服務,方便用戶通過瀏覽器訪問系統(tǒng)、查看分析結果等。將數(shù)據(jù)計算層的分析結果存儲于關系數(shù)據(jù)庫MySQL中,JavaWeb程序只需讀取MySQL中的結果數(shù)據(jù)進行展示即可。

6.接口層

服務層使用JavaWeb獲取結果數(shù)據(jù)后,需要使用前端技術展示在瀏覽器的網(wǎng)頁中,便于用戶查看。若需要實時展示最新結果數(shù)據(jù),則需要使用WebSocket技術。WebSocket是基于TCP的一種新的網(wǎng)絡協(xié)議,它可以使客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務器端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就可以直接創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸,從而實現(xiàn)數(shù)據(jù)的前端實時展示。

7.展示層

為了讓結果數(shù)據(jù)在瀏覽器網(wǎng)頁中的展示更加直觀、易于理解,往往需要使用圖表進行展示,例如柱形圖、餅形圖等。HTML5對圖表的支持非常友好,因此可以借助目前比較流行的HTML5圖表組件ECharts實現(xiàn)數(shù)據(jù)圖表化。

ECharts是一個使用JavaScript實現(xiàn)的開源可視化庫,可以流暢地運行在個人計算機(PC)和移動設備上,兼容當前絕大部分瀏覽器(IE9/10/11、Chrome、Firefox、Safari等),提供直觀、交互豐富、可高度個性化定制的數(shù)據(jù)可視化圖表。

主站蜘蛛池模板: 中宁县| 犍为县| 蒲江县| 临朐县| 抚宁县| 韶山市| 巴塘县| 元氏县| 洪江市| 昭通市| 沽源县| 五大连池市| 博乐市| 崇义县| 南郑县| 峨边| 阿拉善左旗| 淮北市| 衡阳县| 淮安市| 漳州市| 中阳县| 遂昌县| 启东市| 即墨市| 闽侯县| 讷河市| 锡林浩特市| 淳安县| 元朗区| 且末县| 长沙市| 北安市| 旬阳县| 清丰县| 将乐县| 新郑市| 镇巴县| 兴和县| 盘山县| 梓潼县|