Hadoop基礎概念

一、基本概念與模型

1、大數據

結構化數據:有嚴格定義

半結構化數據:html、json、xml等,有結構但沒有約束的文檔

非結構化數據:沒有元數據,比如說日誌類文檔

搜索引擎:ELK,搜索組件、索引組件組成,用來搜索數據,保存在分佈式存儲中

爬蟲程序:搜索的是半結構化和非結構化數據

需要+高效存儲能力、高效的分析處理平臺

 

2、Hadoop

Hadoop是用Java語言開發的,是對谷歌公司這3篇論文開發出來的山寨版

2003年:The Google File System -->HDFS

2004年:MapReduce:Simplified Data Processing On Large Cluster -->MapReduce

2006年:BigTable:A Distributed Storage System for Structure Data -->Hbase

HDFS+MapReduce=Hadoop

HDFS:Hadoop的分佈式文件系統,有中心節點式存儲數據

MapReduce:面向大數據並行處理的計算模型、框架和平臺

HBase:Hadoop的database數據庫

官方網址:hadoop.apache.org

 

二、HDFS

1、HDFS問題

存在名稱節點:NN:NameNode和第二名稱節點SNN:Secondary NameNode

       NN數據存儲在內存中,由於數據在內存中變化十分快,硬盤存儲跟不上內存的變化速度,所以通過類似於數據庫事務日誌的機制,向硬盤存儲映像文件,在此過程中 ,追加日誌不斷被清空不斷被寫入,所以當NN服務器掛了,至少不會丟失太多文件,但是由於文件元數據在宕機後可能有不統一的情況造成文件校驗,數據量過大會花費大量時間。

       SNN爲輔助名稱節點,NN的追加日誌放到了共享存儲上,使SNN能訪問,當NN宕機後,SNN會可以根據追加日誌及時啓動,至少優化了只有一個NN時候的文件校驗時間。

在Hadoop2或者HBase2版本之後,可以將數據共享存放到zookeeper,幾個節點通過zookeeper同時獲取到視圖,很好的解決了剛纔的問題,也能夠進行高可用設置了。

2、HDFS數據節點工作原理:

存在數據節點:DN:DataNode

       當有數據存儲時,HDFS文件系統除了存儲DN,會再尋找兩個數據節點進行存儲作爲副本,數據節點之間以鏈式相連,即有第一份纔有第二份,有第二份纔有第三份,每次存儲結束後節點會向前數據點報告,向元數據塊或者服務器報告自己的狀態和數據塊列表。當某一點數據丟失,此時鏈式數據會重新啓動,補足丟失的數據塊。

 

三、MapReduce

1、JobTracker:作業追蹤器

每一個負責運行作業的節點,在MapReduce裏叫任務追蹤器,TaskTracker

2、每一個節點都要運行兩類進程:

DataNode:負責存儲或者刪除數據等數據管理操作

TaskTracker:負責完成隊列處理,屬於Hadoop集羣

3、程序特點

傳統程序方案:程序在哪,數據就加載在哪

Hadoop方案:數據在哪,程序就在哪裏跑

4、Hadoop分佈式運行處理框架

任務提交可能會同時由N個人提交N個作業,每個人的作業不一定運行在所有節點上,有可能是在一部分節點上,甚至可能是一個節點上,爲了能夠限制一個節點上不要接入過多的任務,所以我們通過task slot,任務槽,來確定一個節點最多隻能運行多少份任務

5、函數式編程:MapReduce參考了這種運行機制

Lisp,ML函數式編程語言:高階函數

map,fold

map:把一個任務映射爲多個任務,把一個函數當作爲一個參數,並將其應用於列表中的

所有元素,會生成一個結果列表,即可映射爲多個函數。

map(f())

fold:不斷地把得到的結果摺疊到函數上,接收兩個參數:函數,初始值。

fold(g(),init):首先結合init初始值,通過函數g()得到g(init)的結果,然後將得到的結果g(init)在第二輪將作爲初始值,通過函數g()得到g(g(init))的結果,以此類推最後會得到一個最終結果。

6、MapReduce過程

<1>mapper:每一個mapper就是每一個實例,每一個mapper處理完會生成一個列表,相當於map函數的過程,mapper接收數據如果是鍵值數據則直接使用,如果不是鍵值數據會先轉換爲鍵值數據

<2>reducer:當所有mapper運行完以後纔會進行reducer,相當於fold函數的過程,reducer可能不止一個,reducer只處理鍵值型數據,接收到的數據做摺疊

<3>reducer在摺疊後的數據依舊是鍵值型數據,摺疊過程叫做shuttle and sort,此過程十分重要

 

便於理解:同濟一本書每個單詞出現的次數:

mapper:每100頁一個單位,比如說5 mappers,用於拆分成爲單詞,比如說this 1,is 1,this 1,how 1,單詞逐個拆分,mapper處理後的爲k-v型數據

reducer:reducer只處理鍵值型數據,將拆分出來的單詞傳遞進reducer中進行統計處理與排序,將鍵相同的數據發往同一個reducer中,最後的結果this 500,is 200等等,結果依舊爲kv型數據

shuffle and sort:接收mapper後,reducer將單詞出現的次數進行鍵值數據統計計算的過程叫做shuffle and sort

 

7、Hadoop數據圖

Hadoop只提供了數據存儲平臺,任何作業、任何數據程序處理必須由Hadoop開發人員寫MapReduce程序調用纔可供使用,mapper的具體任務是什麼,reducer用什麼,都取決於開發人員的定義是什麼。

(1)partitioner:分區器,具備決定將mapper鍵值通過shuffle and sort過程發送給哪個reducer的功能

image.png

(2)combiner:如果mapper產生的鍵值數據中的鍵相同,那麼將合併鍵,否則不合並,分散發送,同樣由hadoop開發人員開發。其輸入鍵和輸出鍵必須保證一致。

image.png

(3)多個reduce時:

image.png

sort:每一個map在本地排序叫做sort

(4)單個reduce時:

image.png

(5)shuffle and sort階段:

image.png

(6)作業提交請求過程:

image.png

(7)JobTracker內部結構

image.png

作用:作業調度、管理監控等等,所以運行時JobTracker會非常繁忙,它由此也成爲了性能瓶頸,不過在MRv2版本後,作業調度、管理和監控功能被切割

(8)版本更迭

MRv1(Hadoop2) --> MRv2(Hadoop2)

MRv1:集羣資源管理器、數據處理程序

MRv2:

YARN:集羣資源管理器

MRv2:數據處理程序

Tez:執行引擎

MR:批處理作業

RT Stream Graph:實時流式圖處理,圖狀算法數據結構

image.png

(9)第二代hadoop資源任務運行流程

image.png

mapreduce把 資源管理和任務運行二者隔離開了,程序運行由自己的Application Master負責,而資源分配由Resource Manager進行。所以當一個客戶端提交一個任務時,Resource Manager會詢問每一個Node Manager有沒有空閒的容器來運行程序。如果有,它去找有的這個節點,來啓動這個主控進程Application Master。然後App Mstr向Resource Manager申請資源任務,Resource Manager分配好資源任務後會告訴App Mstr,之後App Mstr可以使用contrainer來運行作業了。

每一個container在運行過程中都會將反饋自己的作業任務給App Mstr,當container中有任務結束了,App Mstr也會報告給Resource Manager,Resource Manager會將資源收回來

RM:Resource Manager

NM:Node Manager

AM:Application Manager


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章