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

2.3 分布式數據分析框架

對于海量數據處理,一般可以分成離線數據處理和流式數據處理兩大類。在海量數據的計算中,Hadoop無疑是開源分布式離線處理技術的一大主力,而Storm則提供了分布式流處理框架,讓實時大數據處理得以實現。

2.3.1 Hadoop

Hadoop是一個能夠對大量數據進行分布式處理的軟件框架,并且是以一種可靠、高效、可伸縮的方式進行處理的。Hadoop的核心框架為HDFS(Hadoop Distributed File System)、MapReduce和HBase,最底部是HDFS,HDFS的上一層是MapReduce引擎,如圖2.2所示。其中HDFS實現對分布式存儲的底層支持,用于存儲Hadoop集群中所有存儲節點上的文件,HBase則為大量非結構化數據存儲和索引提供了條件,MapReduce則實現對分布式并行任務處理的程序支持,能夠讓用戶編寫的Hadoop并行應用程序運行更加簡化。

圖2.2 Hadoop生態系統圖

Hadoop作為開源的云計算平臺已經在互聯網領域得到了廣泛的應用,互聯網公司往往需要存儲海量的數據并對其進行處理,而這正是Hadoop的強項。如Facebook使用Hadoop存儲內部的日志拷貝以及數據挖掘和日志統計;Yahoo利用Hadoop支持廣告系統并處理網頁搜索;Twitter則使用Hadoop存儲微博數據、日志文件和其他中間數據等。在國內,Hadoop同樣也得到了許多公司的青睞,如百度主要將Hadoop應用于日志分析和網頁數據庫的數據挖掘;阿里巴巴則將Hadoop用于商業數據的排序和搜索引擎的優化等。隨著互聯網的發展,新的業務模式還將不斷涌現,Hadoop的應用也會從互聯網領域向電信、電子商務、銀行、生物制藥等領域拓展。

眾所周知,現代社會的信息量增長速度極快,這些信息里又積累著大量的數據,其中包括個人數據和工業數據。預計到2020年,每年產生的數字信息將會有超過1/3的內容駐留在云平臺中或借助云平臺來處理。我們需要對這些數據進行分析和處理,以獲取更多有價值的信息。那么如何高效地存儲和管理這些數據?如何分析這些數據呢?這時可以選用Hadoop系統,它在處理這類問題時采用了分布式存儲方式,提高了讀寫速度,并擴大了存儲容量。采用MapReduce來整合分布式文件系統上的數據,可保證分析和處理數據的高效。與此同時,Hadoop還采用存儲冗余數據的方式保證了數據的安全性。

2.3.2 HDFS

HDFS(Hadoop Distributed File System)是Hadoop的一個分布式文件系統,由于其具有高容錯性(Fault-Tolerant)的特點,因而可以設計部署在低廉(Low-Cost)的硬件上,并能以高吞吐率(High Throughput)來訪問應用程序的數據,適合那些有著超大數據集的訪問。

一個HDFS文件系統由一個主控節點(NameNode)和一組從節點(DataNode)構成,主控節點為一個管理整個文件系統的主服務器,包括文件系統命名空間及元數據的管理、對文件訪問請求的處理。從節點是對數據塊進行實際的存儲和管理。主控節點向從節點分配數據塊,建立數據塊和從節點的對應關系;從節點處理系統用戶對數據的讀寫請求以及主控節點對數據塊的創建、刪除副本的指令。一個集群設置唯一的NameNode,這樣在很大程度上簡化了系統的架構。

HDFS以分布式的存儲方式存儲大數據,可擴展性較好,容錯能力、數據吞吐能力及并發訪問能力都相當強大,為上層大數據的處理應用程序提供了強大的數據存儲和訪問功能支撐。而且HDFS放寬了可移植操作系統接口(Portable Operating System Interface,POSIX)的要求,實現了以流的形式訪問文件系統中的數據。HDFS原本是開源的Apache項目Nutch的基礎結構,最后它成為了Hadoop的基礎架構之一。

2.3.3 HBase

HBase位于結構化存儲層,是一個分布式的NoSQL數據庫,它建立在HDFS之上,為大規模的結構化、半結構化及非結構化的數據提供了實時讀寫及隨機訪問功能。對于海量數據的存儲,HBase對硬件的要求不高,普通的服務器集群就能做到。HBase對數據進行查詢增改等操作的性能比較高,一般情況下都與數據量的大小無關,即使表中的數據記錄非常大,對某條記錄的查詢也可以快速地完成。HBase對數據模型的定義非常靈活,它采用的是列式存儲而不是基于行的模式,表為一個分布式多維表,包括行關鍵字(Row Key)、列族(Column Family)、列名(Column Name)和時間戳(Timestamp)。字段數據對應的鍵值對為:

{row key,column family,column name,timestamp}→value

根據row key、column key和time stamp對數據進行查詢,時間戳使得同一份數據有多個版本。一般情況下,查詢數據的條件是基于列名的。與傳統行存儲方式的數據庫不同的是,HBase不需要掃描所有行的數據,這在很大程度上提高了數據訪問性能。此外,HBase還具有對數據讀寫嚴格一致性(即保證讀到的是最新的數據)、高效的隨機讀寫能力、較好的可擴展性等優點。

2.3.4 Hive

Hive是一個基于Hadoop的數據倉庫,它提供了一種類似SQL查詢語言的編程接口,可以運用HiveQL語言對數據進行查詢分析等操作,避免了復雜的MapReduce程序的設計編寫,在很大程度上降低了對數據進行查詢分析時應用程序的開發。Hive是基于HDFS、HBase和MapReduce工作的,Hadoop大數據平臺從Hive接收數據處理指令,通過HDFS、HBase,并配合MapReduce完成操作。Hive不僅能夠使用分區(Partition)及桶(Bucket)對數據進行存儲以提高數據查詢的性能,而且在寫入數據時不檢查數據的類型,從而達到高速加載數據的目的,這種模式能夠滿足大規模數據的需求。Hive能結合ETL工具導入導出數據,在傳統數據庫和Hadoop平臺之間充當橋梁的作用,使兩者之間的聯系更為緊密。

2.3.5 MapReduce

MapReduce是由Google提出的,是一種面向大數據并行處理的計算模型,對計算數據和計算任務能夠自動完成并行化處理。MapReduce提供了簡單方便的并行程序設計方法,用函數Map和函數Reduce編程實現并行計算,編程人員在不了解分布式并行編程的情況下也能方便地將自己的程序運行在分布式系統上,使得大數據的編程和計算變得更加簡便。MapReduce采用的是“分而治之”的思想,將大規模數據處理任務劃分成若干個子任務進行處理,再將結果進行合并得到計算結果,從而完成大數據的并行化處理。MapReduce定義了Map和Reduce兩個編程接口:

map:(k1;v1)→[(k2;v2)]
reduce:(k2;[v2])→[(k3;v3)]

其中參數都是鍵值對形式的數據。Map和Reduce處理的過程如下:數據以鍵值對的形式(k1;v1)傳入map函數,經map函數處理后生成中間鍵值對[(k2;v2)],然后對這些中間鍵值對進行處理,得到鍵值對(k2;[v2]),其中[v2]代表相同鍵k2的不同值v2的集合,將其傳入reduce函數,經reduce函數處理后最終以鍵值對[(k3;v3)]的形式輸出。Map和Reduce兩個階段都是并行處理的。

2.3.6 Strom

Twitter Storm是一個免費、開源的分布式實時計算系統,它可以簡單、高效、可靠地處理大量的流數據。在Twitter中進行實時計算的系統就是Storm,它在數據流上進行持續計算,并且對這種流式數據處理提供了有力保障。

Storm運行于集群之上,與Hadoop集群類似。但在Hadoop上運行的是MapReduce Jobs,而在Storm上運行的是Topologies。兩者大不相同,一個關鍵區別是MapReduce的Job最終會結束,而Topology永遠處理消息(或直到kill它)。Storm將數據以Stream的方式,并按照Topology的順序依次處理并最終生成結果。

Storm對一些概念進行了抽象化,其主要術語和概念包括Streams、Spouts、Bolts、Topology和Stream Groupings。Topology生態系統圖如圖2.3所示,數據從源頭Spout中進入,依照拓撲順序,使用相應的Bolt依次處理,得到最終數據。這種由各個用戶自定義的處理器(Bolt)組合而成的拓撲結構能夠適應大多數的業務需求。因此,只要業務能夠組合成相應的拓撲邏輯,就能夠借助Storm框架,也就無需考慮實時計算的低延遲、高性能、分布式、可擴展、容錯等問題了。

圖2.3 Topology生態系統圖

流Stream是一個不間斷的無界的連續Tuple(元組,是元素有序列表),這些無界的元組會以分布式的方式并行地創建和處理。每個流Stream都有一個源Spouts,Spouts會從外部讀取流數據并發出Tuple。流的中間狀態抽象為Bolts,Bolts可以處理tuples,同時它也可以發送新的流給其他Bolts使用。Bolts作為消息處理者,處理輸入的數據流并產生輸出的新數據流。Bolts中可執行過濾、聚合、查詢數據庫等操作。

為了提高效率,在Spout源可以接上多個Bolts處理器。Storm將這樣的無向環圖抽象為Topology,Topology是Storm中最高層次的抽象概念。當Spout或者Bolt發送元組到流時,它就發送元組到每個訂閱了該流的Bolt上進行處理。

對比Hadoop的批處理,Storm是一個實時的、分布式及具備高容錯的計算系統。同Hadoop一樣,Storm也可以處理大批量的數據。然而Storm在保證高可靠性的前提下還可以讓處理進行的更加實時,通常被比作“實時的Hadoop”。也就是說,所有的信息都會被處理。Storm同樣還具備容錯和分布計算這些特性,這就讓Storm可以擴展到不同的機器上進行大批量的數據處理。

Storm流處理技術作為大數據處理技術之一,其應用場景也有很多,總的來說,一方面可應用于處理金融服務如股票交易、銀行交易等產生的大量實時數據;另一方面主要應用于各種實時Web服務中,如搜索引擎、購物網站的實時廣告推薦,SNS社交類網站的實時個性化內容推薦,大型網站、網店的實時用戶訪問情況分析等。實時的數據計算和分析對于大型網站來說具有重要的實際意義,不僅可用于網站的實時業務監控,也可以實現用戶實時個性化內容推薦等。

隨著企業數據量的迅速增長,存儲和處理大規模數據已成為企業的迫切需求。在大數據的計算中,開源分布式離線處理技術hadoop與提供了分布式流處理框架的storm在各大領域都得到了廣泛的應用。

主站蜘蛛池模板: 临漳县| 新乐市| 商洛市| 当阳市| 乐平市| 星子县| 深圳市| 疏附县| 新闻| 寿宁县| 万源市| 拉孜县| 萝北县| 汶川县| 高碑店市| 察隅县| 怀远县| 仙居县| 大安市| 虹口区| 阳高县| 合阳县| 旬邑县| 肇东市| 墨竹工卡县| 卓尼县| 嘉峪关市| 竹山县| 福安市| 宝坻区| 镇康县| 龙门县| 温州市| 精河县| 珠海市| 长武县| 绥滨县| 田阳县| 盐源县| 铁力市| 沙坪坝区|