Hadoop 入門總結(詳細)


Hadoop 入門總結

搜索了好幾個博客,把hadoop基礎總結了一下,感覺收貨還挺多。

一.hadoop簡介

Hadoop是一個開源框架,允許使用簡單的編程模型在跨計算機集群的分布式環境中存儲 和處理大數據。它的設計是從單個服務器擴展到數千個機器,每個都提供本地計算和存儲。

二.hadoop的基本組成

image

hadoop1.0 :

  • 1:HDFS: Hadoop Distributed File System 分布式文件系統

  • 2.Mapreduce:分布式運算框架

hadoop2.0 :

  • 1.HDFS: Hadoop Distributed File System 分布式文件系統

  • 2.YARN: Yet Another Resource Negotiator 資源管理調度系統

  • 3.Mapreduce:分布式運算框架

hadoop1.0與hadoop2.0改進:

1、針對Hadoop1.0單NameNode制約HDFS的擴展性問題,提出HDFS Federation,它讓多個NameNode分管不同的目錄進而實現訪問隔離和橫向擴展,同時徹底解決了NameNode單點故障問題;

2、針對Hadoop1.0中的MapReduce在擴展性和多框架支持等方面的不足,它將JobTracker中的資源管理和作業控制分開,分別由ResourceManager(負責所有應用程序的資源分配)和ApplicationMaster(負責管理一個應用程序)實現,即引入了資源管理框架Yarn。

3、Yarn作為Hadoop2.0中的資源管理系統,它是一個通用的資源管理模塊,可為各類應用程序進行資源管理和調度,不僅限於MapReduce一種框架,也可以為其他框架使用,如Tez、Spark、Storm等

三.HDFS的架構

主從結構

•主節點, namenode

•從節點,有很多個: datanode

namenode負責:

•接收用戶操作請求

•維護文件系統的目錄結構

•管理文件與block之間關系,block與datanode之間關系

datanode負責:

•存儲文件

•文件被分成block存儲在磁盤上

•為保證數據安全,文件會有多個副本

Secondary NameNode負責:

合並fsimage和edits文件來更新NameNode的metedata

四.Hadoop的特點

擴容能力(Scalable):能可靠地(reliably)存儲和處理千兆字節(PB)數據。

成本低(Economical):可以通過普通機器組成的服務器群來分發以及處理數據。這些服務器群總計可達數千個節點。

高效率(Efficient):通過分發數據,hadoop可以在數據所在的節點上並行地(parallel)處理它們,這使得處理非常的快速。

可靠性(Reliable):hadoop能自動地維護數據的多份副本,並且在任務失敗后能自動地重新部署(redeploy)計算任務。

五.NameNode

1.簡介

namenode是整個文件系統的管理節點。他維護着整個文件系統的文件目錄樹,文件/目錄的元信息和每個文件對應的數據塊列表。接收用戶的操作請求。

文件包括:

fsimage:元數據鏡像文件。存儲某一時段NameNode內存元數據信息。

edits:操作日志文件。

fstime:保存最近一次checkpoint的時間。

2.NameNode的工作特點

NameNode始終在內存中保存metedata,用於處理“讀請求”,到有“寫請求”到來時,NameNode首先會寫editlog到磁盤,即向edits文件中寫日志,成功返回后,才會修改內存,並且向客戶端返回。

Hadoop會維護一個人fsimage文件,也就是NameNode中metedata的鏡像,但是fsimage不會隨時與NameNode內存中的metedata保持一致,而是每隔一段時間通過合並edits文件來更新內容。Secondary NameNode就是用來合並fsimage和edits文件來更新NameNode的metedata的。

image

3.什么時候checkpoint

fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。
fs.checkpoint.size規定edits文件的最大值,一旦超過這個值則強制checkpoint,不管是否到達最大時間間隔。默認大小是64M。

六.SecondaryNameNode

1.簡介

HA的一個解決方案。但不支持熱備。配置即可。
執行過程:從NameNode上下載元數據信息(fsimage,edits),然后把二者合並,生成新的fsimage,在本地保存,並將其推送到NameNode,替換舊的fsimage.
默認在安裝在NameNode節點上,但這樣...不安全!

2.工作流程

(1)secondary通知namenode切換edits文件;
(2)secondary從namenode獲得fsimage和edits(通過http);
(3)secondary將fsimage載入內存,然后開始合並edits;
(4)secondary將新的fsimage發回給namenode;
(5)namenode用新的fsimage替換舊的fsimage;

七.DataNode

DataNode提供真實文件數據的存儲服務。
文件塊(block):最基本的存儲單位。對於文件內容而言,一個文件的長度大小是size,那么從文件的0偏移開始,按照固定的大小,順序對文件進行划分並編號,划分好的每一個塊稱一個Block。HDFS默認Block大小是128MB,以一個256MB文件,共有256/128=2個Block.

dfs.block.size

不同於普通文件系統的是,HDFS中,如果一個文件小於一個數據塊的大小,並不占用整個數據塊存儲空間;

Replication:

多復本。默認是三個。

八.HDFS(重點)

HDFS的優缺點

1、優點

因為有多個副本,可以保證數據可靠,容錯性高
計算向數據移動,適用於批處理
適合大數據處理,GB、TB、PB級數據,百萬以上的文件,十萬以上的節點
可以構建在廉價機器上,通過多副本提高可靠性

2、缺點

不支持低延遲的數據訪問,無法再毫秒之內返回結果
小文件對於HDFS是致命的,會占用大量的NameNode的存儲空間
並發寫入和文件隨機修改困難,因為它一個文件在同一時刻只能有一個寫入者,而且只支持append

(1)讀過程

1.初始化FileSystem,然后客戶端(client)用FileSystem的open()函數打開文件

2.FileSystem用RPC調用元數據節點,得到文件的數據塊信息,對於每一個數據塊,元數據節點返回保存數據塊的數據節點的地址。

3.FileSystem返回FSDataInputStream給客戶端,用來讀取數據,客戶端調用stream的read()函數開始讀取數據。

4.DFSInputStream連接保存此文件第一個數據塊的最近的數據節點,data從數據節點讀到客戶端(client)

5.當此數據塊讀取完畢時,DFSInputStream關閉和此數據節點的連接,然后連接此文件下一個數據塊的最近的數據節點。

6.當客戶端讀取完畢數據的時候,調用FSDataInputStream的close函數。

7.在讀取數據的過程中,如果客戶端在與數據節點通信出現錯誤,則嘗試連接包含此數據塊的下一個數據節點。

8.失敗的數據節點將被記錄,以后不再連接。
image

(2)寫過程

1.初始化FileSystem,客戶端調用create()來創建文件

2.FileSystem用RPC調用元數據節點,在文件系統的命名空間中創建一個新的文件,元數據節點首先確定文件原來不存在,並且客戶端有創建文件的權限,然后創建新文件。

3.FileSystem返回DFSOutputStream,客戶端用於寫數據,客戶端開始寫入數據。

4.DFSOutputStream將數據分成塊,寫入data queue。data queue由Data Streamer讀取,並通知元數據節點分配數據節點,用來存儲數據塊(每塊默認復制3塊)。分配的數據節點放在一個pipeline里。Data Streamer將數據塊寫入pipeline中的第一個數據節點。第一個數據節點將數據塊發送給第二個數據節點。第二個數據節點將數據發送給第三個數據節點。

5.DFSOutputStream為發出去的數據塊保存了ack queue,等待pipeline中的數據節點告知數據已經寫入成功。

6.當客戶端結束寫入數據,則調用stream的close函數。此操作將所有的數據塊寫入pipeline中的數據節點,並等待ack queue返回成功。最后通知元數據節點寫入完畢。

7.如果數據節點在寫入的過程中失敗,關閉pipeline,將ack queue中的數據塊放入data queue的開始,當前的數據塊在已經寫入的數據節點中被元數據節點賦予新的標示,則錯誤節點重啟后能夠察覺其數據塊是過時的,會被刪除。失敗的數據節點從pipeline中移除,另外的數據塊則寫入pipeline中的另外兩個數據節點。元數據節點則被通知此數據塊是復制塊數不足,將來會再創建第三份備份。
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM