1. 程式人生 > >hadoop基本組件原理小總結

hadoop基本組件原理小總結

split 之前 數據類型 傳輸 很大的 接口類 能力 制作 產品

Hadoop基礎知識小總結

這是本人(學生黨)在學習hadoop半個學期後根據教科書後習題做的一個小總結,如有發現錯誤還請各位海涵並指出,我會及時改過來的,謝謝!

目錄

Hadoop基礎知識小總結... 1

第一章... 2

1、簡述hadoop平臺的發展過程... 2

2、簡述Hasoop名稱和及技術來源。... 3

3、簡述Hadoop的體系架構。... 3

4、簡述MapReduce的體系架構。... 3

5、簡述HDFS和MapReduce在Hadoop中的角色。... 4

第二章... 5

1、簡述VMware是什麽。... 5

第三章... 5

1、簡述HDFS的體系結構。... 5

2、描述HDFS讀數據的操作過程。... 6

3、簡述HDFS寫流程。... 7

4、理解RPC通訊機制。... 8

第四章... 11

1、簡述MapReduce的進程。... 11

2、簡述Hadoop的數據類型優勢。... 13

3、理解hadoop序列化和Java序列化對比。... 14

4、列舉MapReduce常用接口類。... 14

第五章... 15

1、簡述YARN架構的進程。... 15

2、理解YARN和MapReduce的對比。... 16

第八章... 17

1、簡述Hbase數據庫。... 17

2、簡述Hbase的架構角色。... 18

3、理解Hbase過濾器的作用。... 18

第一章

1、簡述hadoop平臺的發展過程

Hadoop的出現來源於Google的兩款產品:GFS和Mapreduce。2006年3月份,Map/Reduce和Nutch Disrtributed File System,DNFS)分別被納入Hadoop項目中,Hadoop主要由HDFS,MapReduce和Hbase組成。

Hadoop是一個能夠對大量數據進行分布式處理的軟件框架。 Hadoop 以一種可靠、高效、可伸縮的方式進行數據處理。Hadoop來源於於Apach Nutch(一個開源的網絡搜索引擎),是Apach Lucene(文本搜索引擎庫)的一部分。Hadoop的名字不是英文的縮寫,他是一個虛構的名字,來自於創始人Doug Cutting孩子的一個大象玩具的名字。

Nutch項目開始於2002年,一個可工作的抓取工具和搜索系統很快浮出水面。但是此時他們意識到,他們的架構無法擴展到數十億網頁的網絡。在2003年Google發表的一篇描述分布式文件系統(Google file system 簡稱GFS)的論文給了他們啟發和幫助。論文中稱Google正在使用這個系統。可以解決他們在網絡抓取過程中產生大量數據文件的存儲需求,因此產生了Nutch中的分布式文件系統(NDFS)。在2004年,Google發表了論文,向全世界介紹了MapReduce,MapReduce是一種用於數據處理的編程模型。而Hadoop的另外一個核心模塊MapReduce就是這篇論文的一個具體實現。

Nutch中的NDFS和MapReduce實現的應用遠不止搜索領域。在2006年2月,他們從Nutch中轉移出來一個Lucene一個獨立的子項目,稱為Hadoop。大約在同一時間,Dong Cutting加入雅虎。雅虎提供了一個專門的團隊和資源將Hadoop發展成為一個可在網絡上運行的系統。2008年2月雅虎宣布其搜索引擎產品可部署在一個1萬個內核的Hadoop集群上。在2008年4月,Hadoop打破世界紀錄,稱為最快排序1T數據的系統(不到三分鐘),擊敗了前一年的297秒冠軍。同年11月Google在報告中稱他的MapReduce在執行1T數據排序只用了68秒。在2009年5月,報告稱雅虎的團隊使用Hadoop對1T數據進行排序只用了62秒。

2、簡述Hasoop名稱和及技術來源。

名稱:Hadoop 是由道格.卡丁虛構出來的一個名字。

技術來源:hadoop來源於Google的三篇論文:GFS、MapReduce、BigTable。最初搭建的hadoop系統就是從這三篇論文出發的。

3、簡述Hadoop的體系架構。

Hadoop是實現了分布式並行處理任務的系統框架,其核心組成是HDFS和MapReduce兩個子系統,能夠自動完成大任務計算和大數據儲存的分割工作。Hadoop有眾多子集。例如:Common、Yarn、Avro、Chukwa、Hive、Hbase、Zookeeper等。這些生態工具對Hadoop起到了良好的補充作用。

HDFS系統是Hadoop的儲存系統,能夠實現創建文件、刪除文件、移動文件等功能,操作的數據主要是要處理的原始數據以及計算過程中的中間數據,實現高吞吐量的數據讀寫。MapReduce系統是一個分布式計算框架,主要任務就是利用廉價的計算機對海量的數據進行分解處理。

4、簡述MapReduce的體系架構。

-分布式編程架構

-以數據為中心,更看重吞吐率

-分而治之(把對大規模數據集的操作,分發給一個主節點管理下的各個分節點共同完成,然後整合各個節點的中間結果得到最終的輸出)

-Map把一個任務分解成多個子任務

-Reduce將分解後的多任務分別處理,並將結果匯總為最終的結果

應用舉例:清點圖書館藏書、統計單詞的出現次數、混合辣椒醬的制作等等。

技術分享圖片

MapReduce架構圖解

5、簡述HDFS和MapReduce在Hadoop中的角色。

HDFS和MapReduce是hadoop中的核心組成系統,能夠自動完成大任務的計算和大數據儲存的分割工作。

HDFS系統是hadoop系統的儲存系統,MapReduce系統是一個分布式計算框架,主任務是能夠利用廉價的計算機對海量的數據進行分解處理,很大的一個優點是計算向數據靠近,這樣就降低了數據傳輸的成本。

HDFS在MapReduce任務處理過程中提供了文件操作和存儲等支持,MapReduce在HDFS的基礎上實現了了任務的分發、跟蹤、執行等操作,收集結果,二者相互作用,完成了Hadoop的分布式集群任務。

第二章

1、簡述VMware是什麽。

VMware是一個“虛擬pc”軟件,它使你可以在一臺機器上同時運行二個或更多Windows、DOS、LINUX系統。與“多啟動”系統相比,VMWare采用了完全不同的概念。多啟動系統在一個時刻只能運行一個系統,在系統切換時需要重新啟動機器。

2、簡述VMware和Linux系統兩者的關系。

在VMware中Linux都是基於主機虛構出來的。Linux上所有的資源都是可以有VMware分配的。可以說VMware中的Linux,就是以VMware為前提條件的。

第三章

1、簡述HDFS的體系結構。

HDFS集群有兩類節點並以管理者——工作模式運行,即一個管理者管理多個工作者。NameNode管理文件系統的命名空間。他是維護著文件系統樹和及其中的所有文件和目錄。這些信息以兩個文件保存次磁盤中:命名空間鏡像文件和編輯日誌文件。NameNode同時也記錄著每個文件中各個數據塊在節點上的信息,但是她不是永久保存塊的信息,這些此信息會在系統啟動時由數據節點重建。

技術分享圖片

HDFS體系結構

2、描述HDFS讀數據的操作過程。

(1)client訪問NameNode,查詢元數據信息,獲得這個文件的數據塊位置列表,返回輸入流對象。

(2)就近挑選一臺datanode服務器,請求建立輸入流 。

(3)DataNode向輸入流中中寫數據,以packet為單位來校驗。

(4)關閉輸入流。

技術分享圖片

HDFS讀流程

3、簡述HDFS寫流程。

(1)客戶端向NameNode發出寫文件請求。

(2)檢查是否已存在文件、檢查權限。若通過檢查,直接先將操作寫入EditLog,並返回輸出流對象。

(註:WAL,write ahead log,先寫Log,再寫內存,因為EditLog記錄的是最新的HDFS客戶端執行所有的寫操作。如果後續真實寫操作失敗了,由於在真實寫操作之前,操作就被寫入EditLog中了,故EditLog中仍會有記錄,我們不用擔心後續client讀不到相應的數據塊,因為在第5步中DataNode收到塊後會有一返回確認信息,若沒寫成功,發送端沒收到確認信息,會一直重試,直到成功)

(3)client端按128MB的塊切分文件。

(4)client將NameNode返回的分配的可寫的DataNode列表和Data數據一同發送給最近的第一個DataNode節點,此後client端和NameNode分配的多個DataNode構成pipeline管道,client端向輸出流對象中寫數據。client每向第一個DataNode寫入一個packet,這個packet便會直接在pipeline裏傳給第二個、第三個…DataNode。

(註:並不是寫好一個塊或一整個文件後才向後分發)

(5)每個DataNode寫完一個塊後,會返回確認信息。

(註:並不是每寫完一個packet後就返回確認信息,個人覺得因為packet中的每個chunk都攜帶校驗信息,沒必要每寫一個就匯報一下,這樣效率太慢。正確的做法是寫完一個block塊後,對校驗信息進行匯總分析,就能得出是否有塊寫錯的情況發生)

(6)寫完數據,關閉輸輸出流。

(7)發送完成信號給NameNode。

(註:發送完成信號的時機取決於集群是強一致性還是最終一致性,強一致性則需要所有DataNode寫完後才向NameNode匯報。最終一致性則其中任意一個DataNode寫完後就能單獨向NameNode匯報,HDFS一般情況下都是強調強一致性。

技術分享圖片

HDFS寫過程

▲基於2、3的總結。

實例參考的博客鏈接:https://www.cnblogs.com/forfuture1978/archive/2010/11/10/1874222.html

4、理解RPC通訊機制。

(1)Remote Procedure Call(簡稱RPC):遠程過程調用協議。

(2)概括的說,RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息的到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然後等待下一個調用信息,最後,客戶端調用進程接收答復信息,獲得進程結果,然後調用執行繼續進行。

(3)工作原理圖:

技術分享圖片

參考博客地址:https://blog.csdn.net/u010010428/article/details/51345693

RPC簡單框架簡單理解博客地址:http://www.cnblogs.com/ChrisMurphy/p/6550184.html

根據HDFS的儲存原理來看,簡單分為如下:

client: 用戶提出讀/寫數據的需求

namenode:協調與把控

datanodes:數據存儲,數量常常較多。

SecondaryNameNode有兩個作用,一是鏡像備份,二是日誌與鏡像的定期合並。兩個過程同時進行,稱為checkpoint. 鏡像備份的作用:備份fsimage(fsimage是元數據發送檢查點時寫入文件);日誌與鏡像的定期合並的作用:將Namenode中edits日誌和fsimage合並,防止(如果Namenode節點故障,namenode下次啟動的時候,會把fsimage加載到內存中,應用edit log,edit log往往很大,導致操作往往很耗時。

SecondaryNameNode參考博客地址:https://www.xuebuyuan.com/3196294.html

第四章

1、簡述MapReduce的進程。

技術分享圖片

MapReduce工作流程圖

主要步驟:

MapReduce主要步驟敘述:

Map階段:

每個 Mapper任務是一個Java進程,它會讀取HDFS中的文件,解析成很多的鍵值對

經過我們覆蓋的map方法處理後,轉換為很多的鍵值對再輸出。 Mapper接收< ckey, value

形式的數據並處理成< key, value>形式的數據,具體的處理過程用戶可以定義

Step 1:把輸入文件按照一定的標準分片( InputSplit),每個輸入片的大小是固

定的。默認情況下,輸入片( nputSplit的大小與數據塊( Block)的大小是相同的。如果數據

塊( Block)的大小是默認值64MB,輸入文件有兩個,一個是32MB,一個是72MB,那麽小

的文件是一個輸入片,大文件會分為兩個數據塊64MB和8MB,一共產生三個輸入片。每

一個輸入片由一個 Mapper進程處理。這裏的三個輸入片,會有三個 Mapper進程處理。

Step 2:用對輸入片中的記錄按照一定的規則解析成鍵值對。有個默認規則是把

每一行文本內容解析成鍵值對。“鍵”是每一行的起始位置(單位是字節),“值”是本行的

文本內容。

Step 3:調用Mapr類中的mp方法。第二階段中解析出來的每一個鍵值對,

調用一次map方法。如果有1000個鍵值對,就會調用1000次map方法。每一次調用map

方法會輸出零個或者多個鍵值對。

Step 4:按照一定的規則對第三階段輸出的鍵值對進行分區。比較是基於鍵進

行的。默認是只有一個區。分區的數量就是 Reducer任務運行的數量。默認只有一個 Reducer任務。

Step 5:對每個分區中的鍵值對進行排序。首先,按照鍵進行排序,對於鍵相

同的鍵值對,按照值進行排序。比如三個鍵值對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。

那麽排序後的結果是<1,3>、<2,1>、<2,2>。如果有第六階段,那麽進入第六階段;如果沒

有,直接輸出到本地的 Linux文件中。

Step 6:是對數據進行歸約處理,也就是 reduce處理。鍵相等的鍵值對會調用

次 reduce方法。經過這一階段,數據量會減少。歸約後的數據輸出到本地的 Linux文件中。

本階段默認是沒有的,需要用戶自己增加這一階段的代碼。

參考地址:書本第四章

博客地址; https://blog.csdn.net/yuzhuzhong/article/details/51476353

技術分享圖片

執行過程

Reduce階段;

Reduce任務接收Maper任務的輸出,規約處理後寫入到HDFS中。

技術分享圖片

Reduce進程

Step 1:Reducer任務會主動從 Mapper任務復制其輸出的鍵值對。 Mapper任

務可能會有很多,因此 Reducer會復制多個 Mapper的輸出。

Step 2:把復制到 Reducer的本地數據,全部進行合並,即把分散的數據合並

成一個大的數據。再對合並後的數據排序。

Step 3:對排序後的鍵值對調用 reduce方法,鍵相等的鍵值對調用一次 reduce

方法,每次調用會產生零個或者多個鍵值對。最後把這些輸出的鍵值對寫入到HDFS文

件中。

2、簡述Hadoop的數據類型優勢。

(1)Text:使用UTF8格式存儲的文本

(2)NullWritable:當<key, value>中的key或value為空時使用

3、理解hadoop序列化和Java序列化對比。

Java的序列化機制是不停的創建對象,但是在Hadoop序列化機制中,用戶可以復用對象,這樣就減少了Java對象的分配和回收,提高了利用率。

序列化:是指把結構化對象轉化為字節流,便於在網上傳輸或寫到磁盤上進行永久保存。

反序列化:是序列化的反過程。就是把字節流轉換為結構對象。

Hadoop系列化有如下特點;

(1)緊湊:高效使用儲存空間

(2)快速:讀寫數據的額外開銷少

(3)可擴展性:可透明的讀取老格式的數據

(4)互操作:支持多種語言的交互

序列化的作用:

(1)序列化在分布式環境的兩大作用:進程間通訊,永久儲存。

(2)Hadoop節點間通訊

4、列舉MapReduce常用接口類。

MapReduce輸入的處理類

(1) FileInputFormat

(2) InputSplit

MapReduce輸出的處理類。

(1)TextOutputFormat

(2)SequenceFileOutputFormat

(3)SequenceFileAsOutputFormat

(4)MapFileOutputFormat

(5)MultipleOutputFormat

第五章

1、簡述YARN架構的進程。

YARN框架主要是由Client、ResourceManager、NodeManager等進程。

主要工作流程步驟:

(1) Client向ResourceManager提交任務。

(2) ResourceManager分配創建Container任務並告知NodeManager啟動進程MAAppMaster。

(3) NodeManager接收指定任務並開辟空間啟動MAAppMaster

(4) NodeManager完成任務之後會及時匯報給ResourceManager

(5) MRAPPMaster和ResourceManager交互,獲取運行任務所需的資源。

(6) MPAPPMaster獲取資源後和NodeManager驚醒通訊,啟動MapTask或ReduceTask

(7) 任務運行正常,定時向MRAPPMaster回報工作情況。

技術分享圖片

YARN計算過程圖

2、理解YARN和MapReduce的對比。

(1) YARN大大減少了Job Tracker的資源消耗,並且讓監測每個Job子任務狀態的程序分布式化了。

(2) YARN中Application Master是一個可變更部分,用戶可以對不同編程模型編寫自己的AppMst,讓更多類型的編程模型能跑在Hadoop集群中。

(3)老的框架中,Job Tracker一個很大的負擔就是監控Job下任務的運行狀況,現在由Application Master去做,而Resource Manager是監測Application Master的運行狀況,如果出問題,會將其在其他機器上重啟。

參考博客地址:https://blog.csdn.net/post_yuan/article/details/54631446

第八章

1、簡述Hbase數據庫。

(1)Hbase是一個可分布、可擴展的大數據存儲的 Hadoop數據庫。適用於隨機、實時

讀寫大數據操作時使用。它的目標就是擁有一張大表,支持億行億列。 Hbase目標主要依

靠橫向擴展,通過不斷增加廉價的商用服務器,來增加計算和存儲能力

(2)Hbase是一個分布式的、面向列的開源數據庫源於Goge的一篇論文《 bigtable

個結構化數據的分布式存儲系統》

Hbase是 Google Bigtable的開源實現,它利用 Hadoop

HDFS作為其文件存儲系統,利用 Hadoop MapReduce來處理 HBase中的海量數據,利用

keeper作為協同服務。

(3) Hbase- Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分布式

存儲系統,利用 HBase技術可在廉價 PC Server上搭建起大規模結構化存儲集群。 Hbase利

用 Hadoop HDFS作為其文件存儲系統,利用 Hadoop MapReduce.處理 Hbase中的海量數

,利用 Zookeeper作為協調工具

(4)Hbase表數據可以儲存在本地,也可以儲存在HDFS上。

網上其他詳細參考博客:https://www.cnblogs.com/raphael5200/p/5229164.html

2、簡述Hbase的架構角色。

(1)Client

包含訪問 Hbase的接口, Client維護著一些 cache來加快對 Hbase的訪問,比如 Region

的位置信息

(2)Zookeeper

保證任何時候,集群中只有一個 running master

●存儲所有 Region的尋址入口。

●實時監控 Region Server的狀態,將 Region Server的上線和下線信息,實時通知給 Master

●存儲 Hbase的 schema,包括有哪些 table,每個tabe有哪些 column family

(3)Master可以啟動多個HMaster

通過 Zookeeper的 Master Election機制保證總有一個 Master運行。

●為 Region Server分配 Region。

●負責 Region Server的負載均衡。

●發現失效的 Region Server並重新分配其上的 Region

(4)Region Server

維護 Master分配給它的 Region,處理對這些 Region的o請求。負責切分在運行過

程中變得過大的 Regione。

3、理解Hbase過濾器的作用。

Hbase篩選數據提供了一起租過濾器,通過這個過濾器可以在Hbase中的數據的多個維度上進行對數據篩選的操作,也就是說過濾器最終能夠篩選的數據能夠細化到具體的一個單元格上。通常來說,通過行、鍵、值來篩選數據的場景應用的比較多。

有實例參考的博客地址:https://www.cnblogs.com/similarface/p/5805973.html

hadoop基本組件原理小總結