1. 程式人生 > >hadoop yarn hdfs 原理和聯絡

hadoop yarn hdfs 原理和聯絡

hadoop

大資料工程師/hadoop工程師 
目的:高效的儲存、處理這些海量、多種類、高速流動的資料 
hadoop來源google 03~06 年 的三篇論文 
hadoop利用分而治之的樸素思想為大資料處理提供了一整套新的解決方案,分散式檔案系統HDFS、分散式計算框架MapReduce、NoSQL資料庫HBase、資料倉庫工具Hive等 
hadoop主要元件:HDFS、MapReduce、YARN、Hive、Sqoop、Hbase 
hadoop其實是由一系列的軟體庫組成的框架,這些軟體庫可稱為功能模組,他們各自負責hadoop一部分功能,其中最主要的是Common、HDFS、YARN,HDFS負責資料的儲存,YARN負責統一資源管理和排程,Common則提供遠端過程呼叫RPC、序列化機制 
Hadoop生態圈: 
Hadoop Common 是Hadoop體系最底層的一個模組,為hadoop各子專案提供各種工具,如系統配置工具Configuration、遠端過程呼叫 RPC、序列化機制和日誌操作,是其他模組基礎 
HDFS:高度容錯性分散式檔案系統 
YARN 
MapReduce 程式設計模型 函數語言程式設計(java python C++ php) 
Spark 新一代計算框架 
HBase 分散式面向列族的資料庫 
zookeeper 解決分散式一致性問題 
Hive/pig/impala/mahout/flume/sqoop/kafka 
基於hadoop做二次開發的公司;Cloudera、Hortonworks、MapR 
CDH (cloudera distribution for hadoop)

雲端計算定義:雲端計算是一種可以通過網路方便的接入共享資源池,按需獲取計算資源(cpu 記憶體 儲存 網路)的服務模型 
雲端計算五大特點:按需提供服務、寬頻網路訪問、資源池化、高可伸縮性、可量化服務 
雲端計算型別: 
IaaS 作為雲端計算框架最底層,利用虛擬化技術將硬體裝置等基礎資源封裝成服務供使用者使用,使用者相當於使用裸機 
ps:虛擬化產品:VMvare vShpere 、微軟的Hyper-V、開源的KVM、開源的Xen Amazon EC2 利用的就是Xen這種技術 
PaaS Google App Engine 
SaaS 
hadoop 作為一個分散式的軟體框架,擁有云計算PaaS的所有特點,是雲端計算的重要組成部分

hadoop是apache軟體基金會的頂級專案 
CDH5

Hadoop主要有兩部分組成,分散式檔案系統HDFS和統一資源管理和排程系統YARN,分散式檔案系統主要負責海量資料的儲存,而YARN主要是管理叢集的計算資源並根據計算框架的需求進行排程

Hadoop HDFS架構: 
NameNode(元資料–資料的資料–資料儲存在檔案系統的位置,儲存檔案系統元資料,儲存檔案與資料塊對映,並提供檔案系統全景圖)、SecondaryNameNode(元資料備份,備份namenode資料,並負責映象與namenode日誌資料的更新)、多個DataNode

YARN架構: 
ResourceManager:負責叢集中所有資源的統一管理和排程 
NodeManager:負責管理單個計算節點、容器的生命週期管理、追蹤節點健康水平

因此,HDFS叢集和YARN叢集其實有一些守護程序組成,而所有這些守護程序與執行它們的節點就構成了hadoop

注意:DataNode 和 NodeManager需配對部署在同一個節點,而 NameNode 和 ResourceManager 出於穩定性考慮,商業部署時卻不在同一節點

Hadoop安裝步驟: 
安裝執行環境(VM) 
修改主機名和使用者名稱 
配置靜態IP 
配置SSH無密碼連結 
安裝JDK 
配置Hadoop 
格式化HDFS 
啟動hadoop

hadoop偽分散式安裝心得: 
需要安裝ssh ,namenode 、 secondarynode 、datanode、resourcemanager、nodemanager 雖都部署在同一伺服器上,但都是一個個獨立的程序,有自己的埠號,相互間通訊時需要相互登陸,所以需要ssh

Linux注意檔案許可權問題

Hive安裝使用!!! 
HBase安裝使用!!!

Linux環境變數修改 
/etc/profile 全域性環境變數 
~/.bash_file 只對當前使用者生效 
編輯環境變數後需source後生效

Hadoop的基石:HDFS 
Hadoop有一個抽象的檔案系統,HDFS只是其中的一個實現 
Hadoop提供了很多檔案系統的介面,使用者可以選取合適的URI方案來實現對特定檔案系統的互動 
例如: 
本地檔案系統 hadoop dfs -ls file:/// 
HDFS hadoop dfs -ls hdfs:/// 
HDFS設計理念: 
適合儲存超大檔案 
是和部署在廉價硬體上 
一次寫入多次讀取

短板: 
實時資料訪問弱,可考慮用HBase 
大量小檔案:當Hadoop啟動時,Namenode會將所有元資料讀到記憶體,以此構建目錄樹。一般來說,一個HDFS上的檔案、目錄和資料塊的儲存資訊大約在150B左右,那麼可以推算出,如果namenode記憶體為16GB,大概只能存放480萬個檔案

HDFS的架構: 
一個典型的HDFS叢集中,有一個NameNode 一個SecondaryNameNode,至少一個DataNode,所有資料都存在執行DataNode程序的節點的塊(block)裡 
1.塊 
每個磁碟都有預設的資料塊大小,這是磁碟進行資料讀寫的最小單位,而檔案系統也有檔案塊的概念,如ext2、ext3等。檔案系統的塊大小隻能是磁碟塊大小的整數倍,磁碟塊大小一般為512B,檔案系統塊一般為4096B.使用者在使用檔案系統進行讀寫的時候,完全不需要知道快的細節,這些對於使用者是透明的 
HDFS同樣也有塊的概念,但HDFS的塊比一般檔案系統大得多,預設為64MB,也可自行設定,配置項為hdfs-site.xml檔案中的dfs.block.size項,與單一檔案系統相似,HDFS上的檔案也被劃分成塊大小的多個分塊 
HDFS塊之所以設定這麼大的原因是為了最小化定址開銷,塊設定的足夠大,磁碟傳輸資料的時間就會明顯大於定址時間,從而提升了磁碟傳輸的效率 
dfs.relication.size 塊副本數

2.NameNode 和 SecondaryNameNode 
NameNode 維護整個檔案系統的目錄樹,以及目錄樹所有的檔案和目錄,這些資訊以兩種檔案儲存在本地檔案 FSImage edit-log 
SecondaryNameNode 是用於定期合併檔案系統映象和編輯日誌的輔助守護程序 
生產環境下 一般將 SecondaryNameNode 單獨部署在另一臺伺服器上 
FSImage檔案其實是檔案系統元資料的一個永久檢查點,但並非每一個寫操作都會更新入這個檔案,因為FSImage是一個大型檔案,如果頻繁讀寫,會使系統執行極慢

Secondary 負責合併

HDFS容錯 
1.心跳機制 
在NameNode和DataNode之間維持心跳檢測,當因為網路故障或DataNode節點宕機實,立即轉儲該宕機節點儲存的資料塊 
2.檢驗檔案塊的完整性,分隔時記錄校驗和,從某節點獲取塊時校驗 
3.叢集負載均衡 
4.NameNode 上的FSImage 和 edit.log定期備份到 SecondaryNameNdoe

HDFS中的新特性 
NameNode HA(high avaiable) 
NameNode HA 其實就是NameNode 的熱備,而非像SecondaryNameNode的冷備 
NameNode Federation

YARN:統一資源管理和排程平臺 
YARN脫胎於MRv1,MRv1飽受詬病,缺點:可靠性差、可擴充套件性差、資源利用率低、無法支援異構計算框架 
YARN 接管所有資源管理功能,相容異構框架 
HDFS——>YARN——>(spark、mapreduce…)

統一資源和排程平臺範型 
1.集中排程器 
在高併發作業下容易出現瓶頸 
2.雙層排程器 
3.狀態共享排程器

YARN的架構 
主從架構 
YARN服務有ResourceManager、NodeManager兩類程序組成,container是YARN資源表示模型,任何型別的計算型別的作業都可以執行在container中,AplicationMaster就是二級排程器,他也執行在container中 
1.ResourceManager相當於雙層排程器中的中央排程器,其主要責任是定期彙總各個NodeManager的資源情況,並根據資源情況將資源分配給各個二級排程器(applicationMaster) 
假如有多個作業同時競爭資源,ResourceManager會根據優先順序權衡分配給多個應用的applicationMaster資源,並不關注資源利用細節 
因此對於每個應用,只需ResourceManager進行一次資源分配,大大減輕負荷,增強了擴充套件性 
2.NodeManager 與 ResourceManager、applicationMaster通訊,回報資源情況,任務處理情況,管理該節點container 
3.AplicationMaster 負責具體應用執行,由ResourceManager分配資源,第一個container即為AplicationMaster,其負責處理應用細節,隨著應用開始而開始,結束而結束 
4.container 資源分配單位,抽象cpu 記憶體 硬碟等資源,可執行任何型別計算任務,因此相容異構框架

YARN 的工作流程: 
客戶端向ResourceManager提交自己的應用 
ResouceManager向NodeManager傳送指令,為應用開啟的一個container,在container啟動AplicationMaster 
AplicationerMaster向ResourceManager註冊 
AplicationMaster採用輪詢的方式向ResourceManager的 YARN scheduler領取資源 
當 AplicationMaster申領到資源後(其實就是獲得了空閒節點的資訊),與對應的NodeManager建立通訊,請求啟動計算任務 
NodeManager根據資源量的大小、所需執行環境,在container中啟動任務 
各個任務向AplicationMaster回報自己的狀態和進度 
應用程式完成後 AplicationMaster向ResourceManager報告並登出關閉自己

MapReduce 
源於google論文 
開發簡單:MapReduce程式設計模型,使用者不需要考慮程序間通訊、套接字程式設計,只需要滿足MapReduce簡單邏輯,其他交給MapReduce分散式計算框架去完成 
可擴充套件性強 
容錯性強 
MapReduce執行環境已經成為YARN 
MapReduce程式設計思想:MapReduce操作資料的最小單位是一個鍵值對 
MapReduce核心將資料用鍵值對錶示,利用分而治之的思想,將複雜的問題轉化一系列MapReduce作業,利用Hadoop提供的MapReduce計算框架,實現分散式計算 
MapReduce作業是使用者提交最小的單位,而Map/Reduce任務是節點執行單位,當用戶向hadoop提交一個作業,負責改作業的aplicationManager會將作業分解為多個Map/Reduce任務下發各子計算節點執行

MapReduce的侷限性 
1.MapReduce的執行速度慢,MapReduce的慢主要由於磁碟I/O,MapReduce作業多是資料密集型作業,大量中間結果需要寫到磁碟上並通過網路傳輸,耗去了大量時間 
2.不是所有演算法都可以藉助MapReduce的鍵值對實現

MapReduce例項(wordcount)分析: 
思路:HDFS上檔案作為輸入,map函式中完成對單詞的拆分並輸出為中間結果,在reduce函式中完成對每個單詞的統計

MapReduce的過程 
一個MapReduce作業經歷input、map、conbine、reduce、output五個階段,其中combine並不一定發生,map輸出的中間結果被分發到reducer的過程為shuffle(資料混洗) 
在shuffle階段還會發生copy和sort過程 
Reduce任務預設在map任務完成5%之後才啟動 
Map任務概括:首先通過使用者指定的InputFormat類中gatsplits和next方法將輸入檔案切片成鍵值對作為map函式輸入。然後map函式經過處理後輸出並中間結果交給指定partitioner,確保中間結果交給指定reducer處理,此時如果使用者指定了conbiner,將進行combine操作。最後map函式將中間結果儲存在本地 
reduce任務概括:將map任務輸出的中間結果複製到reduce任務所在節點,帶資料複製完成後,再以鍵排序,將相同的鍵交給reduce函式處理 
五大過程: 
input:對於Map任務來說,處理單位為一個inputsplit,inputsplit可以和塊等大小,也可以包含多個塊,hadoop在進行任務排程時會優先考慮本地資料,如果本節點沒有可處理的資料或者還需要處理其他節點的資料,就要通過網路傳輸,當inputsplit容量大於塊的容量,map任務就必須從其它節點讀取一部分資料,這樣不能實現完全資料本地化,所以應儘量使InputSplit和HDFS塊大小相同,以提高map任務的本地計算率 
Reduce階段分為 copy sort reduce (sort) 
mapreduce過程從 map階段的分割槽 combine 到 shuffle reduce 的sort,一直注意資料的有序性

Hive SQL on Hadoop 
常見的count、group by、order by、join等sql操作都可以由mapreduce實現,在某種意義上,Hive可以說是HiveQL到MapReduce作業的對映器 
Hive將使用者輸入的HiveQL指令碼轉化成一個或多個MapReduce作業在叢集中執行 
同樣地在hadoop生態圈裡還有一個pig的元件,它的作用和hive類似,但pig提供的不是sql介面而是一種叫pig latin的語言介面 
pig latin 和 hiveQL 都是對mapreduce進行了一種封裝,使使用者不用直接編寫mapreduce程式,所以稱它為hadoop的高階語言 
hadoop HDFS/yarn——>mapreduce——>hive