大数据学习之路(七)——学习小结
個人目前學習的總結,如有問題,發現的時候會修正,用于個人回顧,有錯誤的地方歡迎留言指出
通過前幾篇的學習
hadoop單節點偽分布式
hadoop完全分布式
hadoop完全分布式高可用(HA) zookeeper
yarn高可用
hdfs
MapReduce
了解了hadoop基本的搭建,和前期可能遇到的問題。?
以下是對各個功能組件的理解。
很多初學者,對大數據的概念都是模糊不清的,大數據是什么,能做什么,學的時候,該按照什么線路去學習,學完往哪方面發展,想深入了解,想學習的同學歡迎加入大數據學習qq群:199427210,有大量干貨(零基礎以及進階的經典實戰)分享給大家,并且有清華大學畢業的資深大數據講師給大家免費授課,給大家分享目前國內最完整的大數據高端實戰實用學習流程體系
1.HADOOP
Hadoop分布式文件系統(HDFS)是一種分布式文件系統,設計用于在商品硬件上運行。它與現有的分布式文件系統有許多相似之處。但是,與其他分布式文件系統的差異很大。HDFS具有高度容錯能力,旨在部署在低成本硬件上。HDFS提供對應用程序數據的高吞吐量訪問,適用于具有大型數據集的應用程序。HDFS放寬了一些POSIX要求,以啟用對文件系統數據的流式訪問。HDFS最初是作為Apache Nutch網絡搜索引擎項目的基礎架構而構建的。HDFS是Apache Hadoop Core項目的一部分。
2.NameNode和DataNodes
HDFS具有主/從架構。一個HDFS集群包含一個NameNode,一個主服務器,用于管理文件系統名稱空間并管理客戶端對文件的訪問。此外,還有許多DataNode,通常是群集中的每個節點一個DataNode,用于管理連接到它們所運行的節點的存儲。HDFS公開文件系統名稱空間并允許用戶數據存儲在文件中。在內部,文件被分成一個或多個塊,這些塊存儲在一組DataNode中。NameNode執行文件系統命名空間操作,如打開,關閉和重命名文件和目錄。它還確定塊到DataNode的映射。DataNode負責提供來自文件系統客戶端的讀取和寫入請求。DataNode還執行塊創建,刪除。?
?
NameNode和DataNode是設計用于在商品機器上運行的軟件。這些機器通常運行GNU / Linux操作系統(OS)。HDFS使用Java語言構建; 任何支持Java的機器都可以運行NameNode或DataNode軟件。使用高度可移植的Java語言意味著HDFS可以部署在各種機器上。典型的部署有一臺只運行NameNode軟件的專用機器。群集中的每臺其他機器運行DataNode軟件的一個實例。該體系結構不排除在同一臺機器上運行多個DataNode,但在實際部署中很少出現這種情況。
集群中單個NameNode的存在極大地簡化了系統的體系結構。NameNode是所有HDFS元數據的仲裁者和存儲庫。該系統的設計方式是用戶數據永遠不會流經NameNode。
總而言之,namenode負責記錄文件存儲在datanode上的位置,datanode則負責存儲數據
3. Zookeeper
ZooKeeper是一個分布式的開源協調服務,用于分布式應用程序。它公開了一組簡單的原語,分布式應用程序可以構建這些原語,以實現更高級別的服務,以實現同步,配置維護以及組和命名。它的設計易于編程,并使用在熟悉的文件系統目錄樹結構之后設計的數據模型。它運行在Java中,并且對Java和C都有綁定。
眾所周知,協調服務很難做到正確。它們特別容易出現諸如競態條件和死鎖等錯誤。ZooKeeper背后的動機是減輕分布式應用程序從頭開始實施協調服務的責任。
總而言之,zookeeper負責保證各個服務的高可用,我們在搭建偽分布式的時候存在SN,用于進行的edits和fsimage的合并,但是當namenode掛掉后,SN并不能起到替代NN的作用,為了保證項目中namenode的高可用,我們接入zookeeper,并啟用多臺NN,其中有一臺NN處于active狀態,其他的standby,而standby的節點不僅起到了備份的作用,還承擔了SN的功能。很多架構都用到了zookeeper,來保證他們的高可用。
4.Yarn
YARN的基本思想是將資源管理和作業調度/監控的功能分解為單獨的守護進程。這個想法是有一個全局的ResourceManager(RM)和每個應用程序的ApplicationMaster(AM)。應用程序可以是單個作業,也可以是DAG作業。
ResourceManager和NodeManager構成了數據計算框架。ResourceManager是仲裁系統中所有應用程序之間資源的最終權威機構。NodeManager是負責容器的每機器框架代理,監視它們的資源使用情況(cpu,內存,磁盤,網絡),并將其報告給ResourceManager / Scheduler。?
?
每個應用程序的ApplicationMaster實際上是一個特定于框架的庫,并負責從ResourceManager協商資源,并與NodeManager一起工作來執行和監視這些任務。
ResourceManager有兩個主要組件:Scheduler和ApplicationsManager。
調度程序負責將資源分配給各種正在運行的應用程序,這些應用程序受到容量,隊列等熟悉的限制。調度程序是純調度程序,因為它不會監視或跟蹤應用程序的狀態。此外,由于應用程序故障或硬件故障,它無法保證重啟失敗的任務。調度器根據應用程序的資源需求執行其調度功能; 它是基于資源容器的抽象概念來實現的,容器包含內存,CPU,磁盤,網絡等元素。
調度程序有一個可插拔策略,負責在各種隊列,應用程序等之間對集群資源進行分區。當前調度程序(如CapacityScheduler和FairScheduler)將是插件的一些示例。
ApplicationsManager負責接受作業提交,協商執行特定于應用程序的ApplicationMaster的第一個容器,并提供失敗時重新啟動ApplicationMaster容器的服務。每個應用程序的ApplicationMaster負責從調度程序中協商適當的資源容器,跟蹤其狀態并監視進度。
hadoop-2.x中的MapReduce 與以前的穩定版本(hadoop-1.x)保持API兼容性。這意味著只需重新編譯,所有MapReduce作業仍應在YARN之上保持不變。
YARN支持的概念,資源預留通過ReservationSystem,即允許用戶在指定時間資源和時間的限制(例如,截止日期),以及后備資源的配置文件,以確保重要jobs.The可預見的執行組件ReservationSystem跟蹤資源過時,對預留執行準入控制,并動態指示底層調度程序確保預留滿員。
為了將YARN擴展到幾千個節點之外,YARN 通過YARN Federation功能支持Federation的概念。Federation允許透明地將多個YARN(子)群集在一起,并使它們看起來像一個單一的大型群集。這可以用于實現更大規模,和/或允許將多個獨立的群集一起用于非常大的工作,或者對于所有人都具有容量的租戶。
總而言之,yarn是我們編寫MapReduce必備的組件,起到了資源調度的作用,他還保證了datanode的高可用,而zookeeper又保證了yarn的高可用。
5. MapReduce
Hadoop MapReduce是一個軟件框架,用于輕松編寫應用程序,以可靠的容錯方式在大型群集(數千個節點)的大型商業硬件上并行處理大量數據(多TB數據集)。
MapReduce 作業通常將輸入數據集分成獨立的塊,由地圖任務以完全平行的方式進行處理。框架對映射的輸出進行排序,然后輸入到reduce任務。通常,作業的輸入和輸出都存儲在文件系統中。該框架負責調度任務,監控它們并重新執行失敗的任務。
通常,計算節點和存儲節點是相同的,即MapReduce框架和Hadoop分布式文件系統(請參閱HDFS體系結構指南)在同一組節點上運行。該配置允許框架在數據已經存在的節點上有效地調度任務,從而在整個集群中產生非常高的聚合帶寬。
MapReduce框架由單個主資源管理器,每個集群節點的一個從屬NodeManager和每個應用程序的MRAppMaster組成(參見YARN體系結構指南)。
最小程度上,應用程序通過實現適當的接口和/或抽象類來指定輸入/輸出位置并提供映射和減少函數。這些和其他作業參數構成作業配置。
然后,Hadoop 作業客戶端將作業(jar /可執行文件等)和配置提交給ResourceManager,然后負責將軟件/配置分發給從服務器,安排任務并監控它們,向作業提供狀態和診斷信息,客戶。
盡管Hadoop框架是用Java?實現的,但MapReduce應用程序不需要用Java編寫。
總而言之,MapReduce始終計算架構,他負責分布式的運算數據,他的數據來源可以不僅僅來自于hdfs,傳統的計算是以計算服務為主,將數據放置在計算服務上進行計算,而如今數據量飛速增長的時代,這幾乎是一件不可能的事情,MapReduce就是為了解決這個現象而產生的計算框架,他執行在各個數據節點,并發計算,保證了數據處理的速度。
(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> partition-> sort -> group -> reduce -> <k3, v3> (output)
中間所有的環節,我們都可以根據我們自己的業務邏輯重寫
1. map
逐行得到元數據并進行拆分
2. combine
可以提前對map節點中的部分數據進行排序和合并,但是必須保證他的inputkey和outputkey一致,inputvalue和outputvalue一致,combine可以用于減少reduce的壓力。
3. partition
可以根據自己的規則將數據均勻劃分,分配給節點進行運算,默認是hash值%節點數。
4. sort
可以根據自己的項目需求重寫排序規則,當你的mapreduce不為簡單數據時,你可以對他進行重寫,已得到你想要的排序效果
5. group
將排序好的數據進行分組,提供給reduce進行計算,例如,你的key是a-b-c形式的數據,你想將ab相同的分為同一組遞交給reduce,那么你可以在這里修改group的規則。
6. 自定義結構類型
必須 implements WritableComparable,實現write(寫序列化)、readFields(度序列化)、compareTo(比較)
7. sort、group、combine必須繼承WritableComparator,通過重寫compare方法實現自己的邏輯
8. combine和reduce一樣,需要繼承Reducer
轉載于:https://blog.51cto.com/13854477/2360163
總結
以上是生活随笔為你收集整理的大数据学习之路(七)——学习小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDMemoryCache中的NSMap
- 下一篇: ROS 2 index翻译(七)——用C