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