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

1.3 流行的大數(shù)據(jù)技術(shù)

流行的大數(shù)據(jù)技術(shù)涉及大數(shù)據(jù)處理的各個(gè)階段,包括:架構(gòu)、采集、存儲(chǔ)、計(jì)算處理和可視化等,而Hadoop則是一個(gè)集合了大數(shù)據(jù)不同階段技術(shù)的生態(tài)系統(tǒng)。下面重點(diǎn)對(duì)Hadoop生態(tài)做介紹。

Hadoop的核心是Yarn、HDFS和MapReduce。Hadoop生態(tài)系統(tǒng)如圖1.5所示,其中集成了Spark生態(tài)圈,在未來(lái)一段時(shí)間內(nèi),Hadoop將與Spark共存,Hadoop與Spark都能部署在Yarn和Mesos的資源管理系統(tǒng)之上。Hadoop由許多元素構(gòu)成,其中,分布式文件系統(tǒng)HDFS、MapReduce分布式計(jì)算框架,以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive和分布式數(shù)據(jù)庫(kù)Hbase,基本涵蓋了Hadoop分布式平臺(tái)的所有技術(shù)核心。

圖1.5 Hadoop生態(tài)系統(tǒng)

下面分別對(duì)圖1.5中的各元素進(jìn)行簡(jiǎn)要介紹。

1.HDFS(Hadoop分布式文件系統(tǒng))

HDFS是Hadoop體系中數(shù)據(jù)存儲(chǔ)管理的基礎(chǔ),它是一個(gè)高度容錯(cuò)的系統(tǒng),能檢測(cè)和應(yīng)對(duì)硬件故障,用于在低成本的通用硬件上運(yùn)行。HDFS簡(jiǎn)化了文件的一致性模型,通過(guò)流式數(shù)據(jù)訪問(wèn),提供高吞吐量數(shù)據(jù)訪問(wèn)能力,適合帶有大型數(shù)據(jù)集的應(yīng)用程序。HDFS提供了一次寫(xiě)入多次讀取的機(jī)制,數(shù)據(jù)以塊的形式,同時(shí)分布在集群的不同物理機(jī)器上。HDFS的架構(gòu)是基于一組特定的節(jié)點(diǎn)構(gòu)建的,這是由它自身的特點(diǎn)決定的。這些節(jié)點(diǎn)包括NameNode(僅一個(gè)),在HDFS內(nèi)部提供元數(shù)據(jù)服務(wù);若干個(gè)DataNode為HDFS提供存儲(chǔ)塊。

2.MapReduce(分布式計(jì)算框架)

MapReduce是一種分布式計(jì)算模型,用于大數(shù)據(jù)計(jì)算,它屏蔽了分布式計(jì)算框架細(xì)節(jié),將計(jì)算抽象成Map和Reduce兩部分。其中,Map對(duì)數(shù)據(jù)集上的獨(dú)立元素進(jìn)行指定的操作,生成鍵-值對(duì)形式的中間結(jié)果;Reduce則對(duì)中間結(jié)果中相同“鍵”的所有“值”進(jìn)行規(guī)約,以得到最終結(jié)果。MapReduce非常適合在大量計(jì)算機(jī)組成的分布式并行環(huán)境里進(jìn)行數(shù)據(jù)處理。

MapReduce提供了以下的主要功能:

(1)數(shù)據(jù)劃分和計(jì)算任務(wù)調(diào)度;

(2)數(shù)據(jù)/代碼互定位;

(3)系統(tǒng)優(yōu)化;

(4)出錯(cuò)檢測(cè)和恢復(fù)。

3.HBase(分布式列存儲(chǔ)數(shù)據(jù)庫(kù))

HBase是一個(gè)建立在HDFS之上,面向列的針對(duì)結(jié)構(gòu)化數(shù)據(jù)的可伸縮、高可靠、高性能、分布式數(shù)據(jù)庫(kù)。HBase采用了BigTable的數(shù)據(jù)模型:增強(qiáng)的稀疏排序映射表(Key/Value),其中,鍵由行關(guān)鍵字、列關(guān)鍵字和時(shí)間戳構(gòu)成。HBase提供了對(duì)大規(guī)模數(shù)據(jù)的隨機(jī)、實(shí)時(shí)讀寫(xiě)訪問(wèn),同時(shí),HBase中保存的數(shù)據(jù)可以使用MapReduce來(lái)處理,它將數(shù)據(jù)存儲(chǔ)和并行計(jì)算完美地結(jié)合在一起。與FUJITSU Cliq等商用大數(shù)據(jù)產(chǎn)品不同,HBase是Google Bigtable的開(kāi)源實(shí)現(xiàn),類(lèi)似Google Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng),HBase利用HDFS作為其文件存儲(chǔ)系統(tǒng),并利用MapReduce來(lái)處理HBase中的海量數(shù)據(jù),利用Zookeeper提供協(xié)同服務(wù)。

4.Zookeeper(分布式協(xié)同服務(wù))

Zookeeper是一個(gè)為分布式應(yīng)用提供協(xié)同服務(wù)的軟件,提供包括配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等功能,用于解決分布式環(huán)境下的數(shù)據(jù)管理問(wèn)題。Hadoop的許多組件依賴于Zookeeper,用于管理Hadoop操作。Zoo Keeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

5.Hive(數(shù)據(jù)倉(cāng)庫(kù))

Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,由Facebook開(kāi)源,最初用于解決海量結(jié)構(gòu)化日志數(shù)據(jù)的統(tǒng)計(jì)問(wèn)題。Hive使用類(lèi)SQL的HiveQL來(lái)實(shí)現(xiàn)數(shù)據(jù)查詢,并將HQL轉(zhuǎn)化為在Hadoop上執(zhí)行的MapReduce任務(wù)。Hive用于離線數(shù)據(jù)分析,可讓不熟悉MapReduce的開(kāi)發(fā)人員,使用HQL實(shí)現(xiàn)數(shù)據(jù)查詢分析,降低了大數(shù)據(jù)處理的應(yīng)用門(mén)檻。Hive本質(zhì)上是基于HDFS的應(yīng)用程序,其數(shù)據(jù)都存儲(chǔ)在Hadoop兼容的文件系統(tǒng)(如Amazon S3、HDFS)中。

Hive可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并且提供簡(jiǎn)單的SQL查詢功能,具有學(xué)習(xí)成本低,快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì)的優(yōu)點(diǎn),十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析。Hive提供了一系列的工具,可以用來(lái)進(jìn)行數(shù)據(jù)的提取轉(zhuǎn)化加載。Hive將在6.3節(jié)重點(diǎn)講解。

6.Pig(ad-hoc腳本)

Pig是由Yahoo!提供的開(kāi)源軟件,設(shè)計(jì)動(dòng)機(jī)是提供一種基于MapReduce的ad-hoc(計(jì)算在Query時(shí)發(fā)生)數(shù)據(jù)分析工具。Pig定義了一種叫做Pig Latin的數(shù)據(jù)流語(yǔ)言,是MapReduce編程復(fù)雜性的抽象,其編譯器將Pig Latin翻譯成MapReduce程序序列,將腳本轉(zhuǎn)換為MapReduce任務(wù)在Hadoop上執(zhí)行。Pig是一種編程語(yǔ)言,它簡(jiǎn)化了Hadoop常見(jiàn)的工作任務(wù),Pig可加載數(shù)據(jù)、表達(dá)轉(zhuǎn)換數(shù)據(jù)以及存儲(chǔ)最終結(jié)果。Pig內(nèi)置的操作使得半結(jié)構(gòu)化數(shù)據(jù)變得有意義(如日志文件),同時(shí)Pig可擴(kuò)展使用Java中添加的自定義數(shù)據(jù)類(lèi)型并支持?jǐn)?shù)據(jù)轉(zhuǎn)換。與Hive類(lèi)似,Pig通常用于進(jìn)行離線分析。

7.Sqoop(數(shù)據(jù)ETL/同步工具)

Sqoop是SQL-to-Hadoop的縮寫(xiě),是一個(gè)Apache項(xiàng)目,主要用于傳統(tǒng)數(shù)據(jù)庫(kù)和Hadoop之間傳輸數(shù)據(jù),可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、Oracle、Postgres等)中的數(shù)據(jù)導(dǎo)入到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫(kù)中。Sqoop利用數(shù)據(jù)庫(kù)技術(shù)描述數(shù)據(jù)架構(gòu),并充分利用了MapReduce的并行化和容錯(cuò)性。

8.Flume(日志收集工具)

Flume是Cloudera公司提供的開(kāi)源日志收集系統(tǒng),具有分布式、高可靠、高容錯(cuò)、易于定制和擴(kuò)展等特點(diǎn)。它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫(xiě)入目標(biāo)路徑的過(guò)程抽象為數(shù)據(jù)流,在具體的數(shù)據(jù)流中,F(xiàn)lume支持在數(shù)據(jù)源中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議的數(shù)據(jù)。同時(shí),F(xiàn)lume數(shù)據(jù)流提供對(duì)日志數(shù)據(jù)進(jìn)行簡(jiǎn)單處理的能力,如過(guò)濾、格式轉(zhuǎn)換等。此外,F(xiàn)lume還具有將日志寫(xiě)往各種數(shù)據(jù)目標(biāo)(可定制)的能力。總的來(lái)說(shuō),F(xiàn)lume是一個(gè)可擴(kuò)展、適合復(fù)雜環(huán)境的海量日志收集系統(tǒng),當(dāng)然也可以用于收集其他類(lèi)型數(shù)據(jù)。

9.Mahout(數(shù)據(jù)挖掘算法庫(kù))

Mahout最初是Apache Lucent的子項(xiàng)目,在極短的時(shí)間內(nèi)取得了長(zhǎng)足的發(fā)展,現(xiàn)在是Apache的頂級(jí)項(xiàng)目。Mahout的主要目標(biāo)是創(chuàng)建一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn),旨在幫助開(kāi)發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout現(xiàn)在已經(jīng)包含了聚類(lèi)、分類(lèi)、推薦引擎(協(xié)同過(guò)濾)和頻繁集挖掘等廣泛使用的數(shù)據(jù)挖掘方法。除了算法,Mahout還包含數(shù)據(jù)的輸入/輸出工具、與其他存儲(chǔ)系統(tǒng)(如關(guān)系數(shù)據(jù)庫(kù)、MongoDB或Cassandra)集成等數(shù)據(jù)挖掘支持架構(gòu)。

10.Oozie(工作流調(diào)度器)

Oozie是一個(gè)可擴(kuò)展的工作體系,集成于Hadoop的堆棧,用于協(xié)調(diào)多個(gè)MapReduce作業(yè)的執(zhí)行,它能夠管理一個(gè)復(fù)雜的系統(tǒng),基于外部事件來(lái)執(zhí)行。Oozie工作流是放置在控制依賴有向無(wú)環(huán)圖(Direct Acyclic Graph,DAG)中的一組動(dòng)作(例如,Hadoop的MapReduce作業(yè)、Pig作業(yè)等),其中指定了動(dòng)作執(zhí)行的順序。Oozie工作流通過(guò)h PDL定義(h PDL是一種XML的流程定義語(yǔ)言),工作流操作通過(guò)遠(yuǎn)程系統(tǒng)啟動(dòng),當(dāng)任務(wù)完成后,遠(yuǎn)程系統(tǒng)會(huì)進(jìn)行回調(diào)來(lái)通知任務(wù)已經(jīng)結(jié)束,然后再開(kāi)始下一個(gè)操作。

11.Yarn(分布式資源管理器)

Yarn是下一代MapReduce,即MR V2,是在第一代經(jīng)典MapReduce調(diào)度模型基礎(chǔ)上演變而來(lái)的,主要是為了解決原始Hadoop擴(kuò)展性較差,不支持多計(jì)算框架而提出的。Yarn是一個(gè)通用的運(yùn)行時(shí)框架,用戶可以在該運(yùn)行環(huán)境中運(yùn)行自己編寫(xiě)的計(jì)算框架。用戶自己編寫(xiě)的框架作為客戶端的一個(gè)庫(kù),在提交作業(yè)時(shí)打包即可。

12.Mesos(分布式資源管理器)

Mesos誕生于UC Berkeley的一個(gè)研究項(xiàng)目,現(xiàn)已成為Apache項(xiàng)目,當(dāng)前有一些公司使用Mesos管理集群資源,比如Twitter。與Yarn類(lèi)似,Mesos是一個(gè)資源統(tǒng)一管理和調(diào)度的平臺(tái),同樣支持MapRedcue、Steaming等多種運(yùn)算框架。Mesos作為數(shù)據(jù)中心的內(nèi)核,其設(shè)計(jì)原則是資源分配和任務(wù)調(diào)度的分離,為大量不同類(lèi)型的負(fù)載提供可靠服務(wù)。

13.Tachyon(分布式內(nèi)存文件系統(tǒng))

Tachyon是以內(nèi)存為中心的分布式文件系統(tǒng),擁有高性能和容錯(cuò)能力,并具有類(lèi)Java的文件API、插件式的底層文件系統(tǒng)、兼容Hadoop MapReduce和Apache Spark等特點(diǎn),能夠?yàn)榧嚎蚣埽ㄈ鏢park、MapReduce)提供可靠的內(nèi)存級(jí)速度的文件共享服務(wù)。Tachyon充分使用內(nèi)存和文件對(duì)象之間的血統(tǒng)(Lineage)信息,因此速度很快,官方號(hào)稱最高比HDFS吞吐量高300倍。

14.Tez(DAG計(jì)算模型)

Tez是Apache開(kāi)源的支持DAG作業(yè)的計(jì)算框架,它直接源于MapReduce框架,核心思想是將Map和Reduce兩個(gè)操作進(jìn)一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output,Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,這些分解后的元操作可以任意靈活組合,產(chǎn)生新的操作,這些操作經(jīng)過(guò)一些控制程序組裝后,可形成一個(gè)大的DAG作業(yè)。

15.Spark(內(nèi)存DAG計(jì)算模型)

Spark是一個(gè)Apache項(xiàng)目,它被標(biāo)榜為“快如閃電的集群計(jì)算”,擁有一個(gè)繁榮的開(kāi)源社區(qū),并且是目前最活躍的Apache項(xiàng)目之一。Spark提供了一個(gè)更快、更通用的數(shù)據(jù)處理平臺(tái)。和Hadoop相比,Spark可以讓程序在內(nèi)存中運(yùn)行時(shí)速度提升100倍,或者在磁盤(pán)上運(yùn)行時(shí)速度提升10倍。我們將在第8章進(jìn)一步介紹Spark及Spark有關(guān)組件的知識(shí)。

16.Giraph(圖計(jì)算模型)

Apache Giraph是一個(gè)可伸縮的分布式迭代圖處理系統(tǒng),基于Hadoop平臺(tái),并得到Facebook的支持,獲得多方面的改進(jìn)。

17.MLlib(機(jī)器學(xué)習(xí)庫(kù))

MLlib是一個(gè)機(jī)器學(xué)習(xí)庫(kù),它提供了各種各樣的算法,這些算法在集群上針對(duì)分類(lèi)、回歸、聚類(lèi)、協(xié)同過(guò)濾等。MLlib是Spark對(duì)常用的機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)庫(kù),同時(shí)包括相關(guān)的測(cè)試和數(shù)據(jù)生成器。Spark的設(shè)計(jì)初衷就是為了支持一些迭代的作業(yè),這正好符合很多機(jī)器學(xué)習(xí)算法的特點(diǎn)。MLlib基于彈性分布式數(shù)據(jù)集(Resilient Distributed Datasets,RDD),可以與Spark SQL、GraphX、Spark Streaming無(wú)縫集成,以RDD為基石,4個(gè)子框架可聯(lián)手構(gòu)建大數(shù)據(jù)計(jì)算中心。

18.Spark Streaming(流計(jì)算模型)

Spark Streaming支持對(duì)流數(shù)據(jù)的實(shí)時(shí)處理,以“微批”的方式對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行計(jì)算,它是構(gòu)建在Spark上處理Stream數(shù)據(jù)的框架,基本原理是將Stream數(shù)據(jù)分成小的片段,以類(lèi)似Batch(批量處理)的方式來(lái)處理每個(gè)片斷數(shù)據(jù)。Spark的低延遲執(zhí)行引擎(100ms+)雖然比不上專(zhuān)門(mén)的流式數(shù)據(jù)處理軟件,但也可以用于實(shí)時(shí)計(jì)算,而且相比基于Record的其他處理框架(如Storm),一部分窄依賴的RDD數(shù)據(jù)集可以從源數(shù)據(jù)重新計(jì)算達(dá)到容錯(cuò)處理的目的。此外小批量處理的方式使得Spark Streaming可以同時(shí)兼容批量和實(shí)時(shí)數(shù)據(jù)處理的邏輯和算法,方便了一些需要?dú)v史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)聯(lián)合分析的特定應(yīng)用場(chǎng)合。

19.Kafka(分布式消息隊(duì)列)

Kafka是Linkedin于2010年開(kāi)源的消息系統(tǒng),它主要用于處理活躍的流式數(shù)據(jù)。活躍的流式數(shù)據(jù)在Web網(wǎng)站應(yīng)用中非常常見(jiàn),包括網(wǎng)站的點(diǎn)擊量、用戶訪問(wèn)內(nèi)容、搜索內(nèi)容等。這些數(shù)據(jù)通常以日志的形式記錄下來(lái),然后每隔一段時(shí)間進(jìn)行一次統(tǒng)計(jì)處理。Kafka的目的是通過(guò)Hadoop的并行加載機(jī)制來(lái)統(tǒng)一線上和離線的消息處理,也是為了通過(guò)集群來(lái)提供實(shí)時(shí)的處理。

20.Phoenix(HBase SQL接口)

Apache Phoenix是HBase的SQL驅(qū)動(dòng),Phoenix使得Hbase支持通過(guò)JDBC的方式進(jìn)行訪問(wèn),并將SQL查詢轉(zhuǎn)換成HBase的掃描和相應(yīng)的動(dòng)作。Phoenix是構(gòu)建在HBase上的一個(gè)SQL層,能讓用戶使用標(biāo)準(zhǔn)的JDBC API而不是HBase客戶端API來(lái)操作HBase,例如創(chuàng)建表、插入數(shù)據(jù)和查詢數(shù)據(jù)等。

21.Kylin+Druid

Kylin是一個(gè)開(kāi)源的分布式分析引擎,它提供Hadoop之上的SQL查詢接口及多維分析(Online Analytical Processing,OLAP)能力以支持大規(guī)模數(shù)據(jù),能夠處理TB乃至PB級(jí)別的分析任務(wù),能夠在亞秒級(jí)查詢巨大的Hive表,并支持高并發(fā)。

Druid是目前最好的數(shù)據(jù)庫(kù)連接池,在功能、性能、擴(kuò)展性方面,都超過(guò)其他數(shù)據(jù)庫(kù)連接池,包括DBCP、C3P0、Bone CP、Proxool和JBoss Data Source。

22.Superset

Superset是Airbnb開(kāi)源的數(shù)據(jù)挖掘平臺(tái),最初是在Druid的基礎(chǔ)上設(shè)計(jì)的,能快速創(chuàng)建可交互的、直觀形象的數(shù)據(jù)集合,有豐富的可視化方法來(lái)分析數(shù)據(jù),具有靈活的擴(kuò)展能力,與Druid深度結(jié)合,可快速地分析大數(shù)據(jù)。6.4節(jié)將介紹Super Set的使用。

23.Storm

Storm是一個(gè)分布式實(shí)時(shí)大數(shù)據(jù)處理系統(tǒng),用于在容錯(cuò)和水平可擴(kuò)展方法中處理大量數(shù)據(jù),它是一個(gè)流數(shù)據(jù)框架,具有較高的攝取率。類(lèi)似于Hadoop,Apache Storm是用Java和Clojure編寫(xiě)的。

主站蜘蛛池模板: 台东县| 新营市| 霍州市| 通河县| 光山县| 西贡区| 庆安县| 桂东县| 保康县| 南溪县| 易门县| 疏勒县| 连南| 延边| 柞水县| 施甸县| 长垣县| 怀化市| 南昌市| 松原市| 太谷县| 紫阳县| 剑阁县| 三穗县| 达日县| 沅江市| 泾源县| 大田县| 临汾市| 桓台县| 泊头市| 五莲县| 东光县| 南陵县| 双柏县| 鄂伦春自治旗| 金山区| 四川省| 勐海县| 林西县| 太湖县|