国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

大數據導論(二) Hadoop簡介

2019-11-08 20:30:36
字體:
來源:轉載
供稿:網友

基本介紹

圖1

Google(自稱)為云計算概念的提出者,在自身多年的搜索引擎業務中構建了突破性的GFS(Google File System),從此文件系統進入分布式時代。除此之外,Google在GFS上如何快速分析和處理數據方面開創了MaPReduce并行計算框架,讓以往的高端服務器計算變為廉價的x86集群計算,也讓許多互聯網公司能夠從IOE(IBM小型機、Oracle數據庫以及EMC存儲)中解脫出來,例如:淘寶早就開始了去IOE化的道路。然而,Google之所以偉大就在于獨享技術不如共享技術,在2002-2004年間以三大論文的發布向世界推送了其云計算的核心組成部分GFS、MapReduce以及BigTable。

Google雖然沒有將其核心技術開源,但是這三篇論文已經向開源社區的大牛們指明了方向,一位大牛:Doug Cutting使用java語言對Google的云計算核心技術(主要是GFS和MapReduce)做了開源的實現。后來,Apache基金會整合Doug Cutting以及其他IT公司(如Facebook等)的貢獻成果,開發并推出了Hadoop生態系統。

Hadoop是一個搭建在廉價PC上的分布式集群系統架構,它具有高可用性、高容錯性和高可擴展性等優點。由于它提供了一個開放式的平臺,用戶可以在完全不了解底層實現細節的情形下,開發適合自身應用的分布式程序。

整體框架

Hadoop系統的設計思想是層次化的設計結構,和OSI等設計思想類似,即,同層次之間不交互,每層只知道自己的工作,處理來自下一層提供的數據、信息。

Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成員組成。

圖2

HDFS是一個分布式文件系統。有著高容錯性的特點,并且設計用來部署在低廉的硬件上,適合那些有著超大數據集的應用程序。它是Hadoop系統的基礎。Yarn是一種Hadoop資源管理器,它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處。MapReduce是一種編程模型,用于大規模數據集(大于1TB)的并行運算,主要思想是概念”Map(映射)”和”Reduce(歸約)”。它也是Hadoop系統的重要組成部分。Pig是一個基于Hadoop的大規模數據分析平臺,Pig為復雜的海量數據并行計算提供了更高層次的抽象,從而有了一個更為簡易的操作和編程接口。Hive是基于Hadoop的一個工具,提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。Giraph是一個迭代的圖計算系統。Giraph計算的輸入是由點和直連的邊組成的圖。發源于Facebook,可以進行社交網絡的計算等等。Strom、Spark、Flink是實時的內存計算框架,在某些任務上的運算速度能夠提高100倍。HBase、Cassandra、MongoDB是開源的,基于列存儲模型的分布式NoSQL數據庫系統。能夠處理更大規模的數據量、稀疏表等問題。但是正是因為是開源的問題,存在一系列問題。ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

下圖是一個典型的Hadoop試驗集群的部署結構。

圖3

Hadoop各組件之間是如何依賴共存的呢?下圖為你展示:

圖4

Hadoop的核心設計

圖5

HDFS

HDFS是一個高度容錯性的分布式文件系統,可以被廣泛的部署于廉價的PC之上。它以流式訪問模式訪問應用程序的數據,這大大提高了整個系統的數據吞吐量,因而非常適合用于具有超大數據集的應用程序中。

HDFS的架構如下圖所示。HDFS架構采用主從架構(master/slave)。一個典型的HDFS集群包含一個NameNode節點和多個DataNode節點。NameNode節點負責整個HDFS文件系統中的文件的元數據保管和管理,集群中通常只有一臺機器上運行NameNode實例,DataNode節點保存文件中的數據,集群中的機器分別運行一個DataNode實例。在HDFS中,NameNode節點被稱為名稱節點,DataNode節點被稱為數據節點。DataNode節點通過心跳機制與NameNode節點進行定時的通信。

圖6

NameNode 可以看作是分布式文件系統中的管理者,存儲文件系統的meta-data,主要負責管理文件系統的命名空間,集群配置信息,存儲塊的復制。

DataNode

是文件存儲的基本單元。它存儲文件塊在本地文件系統中,保存了文件塊的meta-data,同時周期性的發送所有存在的文件塊的報告給NameNode。

Client

就是需要獲取分布式文件系統文件的應用程序。

下面來看看在HDFS上如何進行文件的讀/寫操作:

圖7

文件寫入:

Client向NameNode發起文件寫入的請求NameNode根據文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。Client將文件劃分為多個文件塊,根據DataNode的地址信息,按順序寫入到每一個DataNode塊中。

圖8

文件讀?。?/p>Client向NameNode發起文件讀取的請求NameNode返回文件存儲的DataNode的信息。Client讀取文件信息。

MapReduce

MapReduce是一種編程模型,用于大規模數據集的并行運算。Map(映射)和Reduce(化簡),采用分而治之思想,先把任務分發到集群多個節點上,并行計算,然后再把計算結果合并,從而得到最終計算結果。多節點計算,所涉及的任務調度、負載均衡、容錯處理等,都由MapReduce框架完成,不需要編程人員關心這些內容。

下圖是一個MapReduce的處理過程:

圖9

用戶提交任務給JobTracer,JobTracer把對應的用戶程序中的Map操作和Reduce操作映射至TaskTracer節點中;輸入模塊負責把輸入數據分成小數據塊,然后把它們傳給Map節點;Map節點得到每一個key/value對,處理后產生一個或多個key/value對,然后寫入文件;Reduce節點獲取臨時文件中的數據,對帶有相同key的數據進行迭代計算,然后把終結果寫入文件。

如果這樣解釋還是太抽象,可以通過下面一個具體的處理過程來理解:(WordCount實例)

這里寫圖片描述

Hadoop的核心是MapReduce,而MapReduce的核心又在于map和reduce函數。它們是交給用戶實現的,這兩個函數定義了任務本身。

map函數:接受一個鍵值對(key-value pair)(例如上圖中的Splitting結果),產生一組中間鍵值對(例如上圖中Mapping后的結果)。Map/Reduce框架會將map函數產生的中間鍵值對里鍵相同的值傳遞給一個reduce函數。reduce函數:接受一個鍵,以及相關的一組值(例如上圖中Shuffling后的結果),將這組值進行合并產生一組規模更小的值(通常只有一個或零個值)(例如上圖中Reduce后的結果)

但是,Map/Reduce并不是萬能的,適用于Map/Reduce計算有先提條件: ① 待處理的數據集可以分解成許多小的數據集;

② 而且每一個小數據集都可以完全并行地進行處理;

若不滿足以上兩條中的任意一條,則不適合使用Map/Reduce模式;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 信宜市| 鸡东县| 清水河县| 甘洛县| 葫芦岛市| 大方县| 和龙市| 沙田区| 色达县| 华蓥市| 娄烦县| 洛阳市| 恩施市| 文昌市| 雷山县| 拜城县| 延川县| 崇阳县| 洪泽县| 方山县| 武威市| 海原县| 厦门市| 顺义区| 耒阳市| 古交市| 大田县| 长沙市| 资源县| 区。| 陵川县| 淮北市| 佛教| 衡山县| 利津县| 盘锦市| 江口县| 汝城县| 永平县| 甘谷县| 肃北|