【大數據】瞭解Hadoop框架的基礎知識

介紹

此Refcard提供了Apache Hadoop,這是最流行的軟件框架,可以使用簡單的高級編程模型實現大型數據集的分佈式存儲和處理。咱們將介紹Hadoop最重要的概念,描述其架構,指導您如何開始使用它以及在Hadoop上編寫和執行各類應用程序。html

簡而言之,Hadoop是Apache Software Foundation的一個開源項目,能夠安裝在服務器集羣上,以便這些服務器能夠通訊並協同工做來存儲和處理大型數據集。Hadoop近年來因其有效處理大數據的能力而變得很是成功。它容許公司將全部數據存儲在一個系統中,並對這些數據進行分析,不然傳統解決方案不可能或很是昂貴。程序員

圍繞Hadoop構建的許多配套工具提供了各類各樣的處理技術。與輔助系統和實用程序的集成很是出色,使Hadoop的實際工做更輕鬆,更高效。這些工具共同構成了Hadoop生態系統。apache

您能夠將Hadoop視爲大數據操做系統,從而能夠在全部龐大的數據集上運行不一樣類型的工做負載。其範圍從離線批處理到機器學習再到實時流處理。編程

熱門提示:訪問http://hadoop.apache.org以獲取有關項目的更多信息並訪問詳細文檔。瀏覽器

要安裝Hadoop,您能夠從http://hadoop.apache.org獲取代碼或(更推薦)使用其中一個Hadoop發行版。三種最普遍使用的來自Cloudera(CDH),Hortonworks(HDP)和MapR。Hadoop發佈是Hadoop生態系統捆綁在一塊兒的一組工具,由相應的供應商保證,能夠很好地協同工做。此外,每一個供應商都提供工具(開源或專有)來配置,管理和監控整個平臺。緩存

設計理念

爲了解決處理和存儲大型數據集的挑戰,Hadoop是根據如下核心特徵構建的:服務器

  • 分發 - 存儲和處理不是構建一臺大型超級計算機,而是分佈在一組通訊和協同工做的小型機器上。網絡

  • 橫向可擴展性 - 只需添加新計算機便可輕鬆擴展Hadoop集羣。每臺新機器都會按比例增長Hadoop集羣的總存儲和處理能力。架構

  • 容錯 - 即便少數硬件或軟件組件沒法正常工做,Hadoop仍可繼續運行。負載均衡

  • 成本優化 - Hadoop不須要昂貴的高端服務器,無需商業許可便可正常工做。

  • 編程抽象 - Hadoop負責處理與分佈式計算相關的全部混亂細節。藉助高級API,用戶能夠專一於實現解決現實問題的業務邏輯。

  • 數據位置 - Hadoop不會將大型數據集移動到運行應用程序的位置,而是運行數據已經存在的應用程序。

Hadoop組件

Hadoop分爲兩個核心組件:

  • HDFS - 分佈式文件系統。

  • YARN - 集羣資源管理技術。

熱門提示:許多執行框架在YARN之上運行,每一個框架都針對特定用例進行了調整。最重要的內容將在下面的「YARN Applications」中討論。

讓咱們仔細看看他們的架構並描述他們如何合做。

HDFS

HDFS是一個Hadoop分佈式文件系統。它能夠在您須要的任意數量的服務器上運行 - HDFS能夠輕鬆擴展到數千個節點和數PB的數據。

HDFS設置越大,某些磁盤,服務器或網絡交換機出現故障的機率就越大。HDFS經過在多個服務器上覆制數據來倖免於這些類型的故障。HDFS自動檢測給定組件是否已發生故障,並採起對用戶透明的必要恢復操做。

HDFS設計用於存儲數百兆字節或千兆字節的大型文件,併爲它們提供高吞吐量的流數據訪問。最後但一樣重要的是,HDFS支持一次寫入屢次讀取模型。對於這個用例,HDFS就像一個魅力。可是,若是您須要存儲大量具備隨機讀寫訪問權限的小文件,那麼其餘系統(如RDBMS和Apache HBase)能夠作得更好。

注意:HDFS不容許您修改文件的內容。只支持在文件末尾附加數據。可是,Hadoop設計的HDFS是衆多可插拔存儲選項之一 - 例如,使用專有文件系統MapR-F,文件徹底可讀寫。其餘HDFS替代品包括Amazon S3,Google Cloud Storage和IBM GPFS。

HDFS的體系結構

HDFS由在選定羣集節點上安裝和運行的如下守護程序組成:

  • NameNode - 負責管理文件系統命名空間(文件名,權限和全部權,最後修改日期等)以及控制對存儲在HDFS中的數據的訪問的主進程。若是NameNode已關閉,則沒法訪問您的數據。幸運的是,您能夠配置多個NameNode,以確保此關鍵HDFS進程的高可用性。

  • DataNodes - 安裝在集羣中每一個工做節點上的從屬進程,負責存儲和提供數據。

圖1說明了在4節點集羣上安裝HDFS。其中一個節點託管NameNode守護程序,而其餘三個運行DataNode守護程序。

注意:NameNode和DataNode是在Linux發行版之上運行的Java進程,例如RedHat,Centos,Ubuntu等。他們使用本地磁盤存儲HDFS數據。

HDFS將每一個文件拆分爲一系列較小但仍然較大的塊(默認塊大小等於128MB - 較大的塊意味着更少的磁盤搜索操做,從而致使更大的吞吐量)。每一個塊都冗餘地存儲在三個DataNode上以實現容錯(每一個文件的副本數量是可配置的)。

圖2說明了將文件拆分爲塊的概念。文件X被分紅塊B1和B2,文件Y僅包括一個塊B3。全部塊都在羣集中複製兩次。

與HDFS交互

HDFS提供了一個簡單的POSIX類接口來處理數據。您使用hdfs dfs命令執行文件系統操做。

熱門提示:要開始使用Hadoop,您沒必要完成設置整個羣集的過程。Hadoop能夠在一臺機器上以所謂的僞分佈式模式運行。您能夠下載已安裝全部HDFS組件的沙盒虛擬機,並當即開始使用Hadoop!只需按照如下連接之一:

http://www.mapr.com/products/mapr-sandbox-hadoop

http://hortonworks.com/products/hortonworks-sandbox/#install

https://www.cloudera.com/downloads/quickstart_vms/5-12.html

如下步驟說明了HDFS用戶能夠執行的典型操做:

列出主目錄的內容:

$ hdfs dfs -ls /user/adam

將文件從本地文件系統上傳到HDFS:

$ hdfs dfs -put songs.txt /user/adam

從HDFS讀取文件的內容:

$ hdfs dfs -cat /user/adam/songs.txt

更改文件的權限:

$ hdfs dfs -chmod 700 /user/adam/songs.txt

將文件的複製因子設置爲4:

$ hdfs dfs -setrep -w 4 /user/adam/songs.txt

檢查文件的大小:

`$ hdfs dfs -du -h /user/adam/songs.txt

在主目錄中建立一個子目錄。請注意,相對路徑始終引用執行命令的用戶的主目錄。HDFS上沒有「當前」目錄的概念(換句話說,沒有至關於「cd」命令):

$ hdfs dfs -mkdir songs

將文件移動到新建立的子目錄:

$ hdfs dfs -mv songs.txt songs/

從HDFS中刪除目錄:

$ hdfs dfs -rm -r songs

注意:已刪除的文件和目錄將移至回收站(HDFS上主目錄中的.Trash)並保留一天,直到它們被永久刪除。您只需將它們從.Trash複製或移動到原始位置便可恢復它們。

熱門提示:您能夠在不使用任何參數的狀況下鍵入hdfs dfs,以獲取可用命令的完整列表。

若是您更喜歡使用圖形界面與HDFS交互,您能夠查看免費和開源的HUE(Hadoop用戶體驗)。它包含一個方便的「文件瀏覽器」組件,容許您瀏覽HDFS文件和目錄並執行基本操做。

您還可使用HUE經過「上傳」按鈕直接從計算機將文件上傳到HDFS。

 

YARN(Yet Another Resource Negotiator)負責管理Hadoop集羣上的資源,並支持運行處理存儲在HDFS上的數據的各類分佈式應用程序。

與HDFS相似,YARN遵循主從設計,ResourceManager進程充當主設備,多個NodeManager充當工做者。他們有如下責任:

的ResourceManager

  • 跟蹤實時NodeManagers以及羣集中每臺服務器上的可用計算資源量。

  • 爲應用程序分配可用資源。

  • 監視Hadoop集羣上全部應用程序的執行狀況。

節點管理器

  • 管理Hadoop集羣中單個節點上的計算資源(RAM和CPU)。

  • 運行各類應用程序的任務,並強制它們在指定的計算資源的限制範圍內。

YARN以資源容器的形式將集羣資源分配給各類應用程序,資源容器表示RAM量和CPU核心數量的組合。

在YARN羣集上執行的每一個應用程序都有本身的ApplicationMaster進程。在羣集上調度應用程序並協調此應用程序中全部任務的執行時,此過程開始。

圖3說明了YARN守護程序在運行兩個應用程序的4節點集羣上的合做,這些應用程序總共產生了7個任務。

Hadoop = HDFS + YARN

在同一羣集上運行的HDFS和YARN守護程序爲咱們提供了一個用於存儲和處理大型數據集的強大平臺。

DataNode和NodeManager進程在同一節點上並置以啓用數據位置。這種設計使得可以在存儲數據的機器上執行計算,從而最小化經過網絡發送大塊數據的必要性,這致使更快的執行時間。

YARN應用程序

YARN只是一個資源管理器,它知道如何將分佈式計算資源分配給在Hadoop集羣上運行的各類應用程序。換句話說,YARN自己不提供任何能夠分析HDFS中數據的處理邏輯。所以,必須將各類處理框架與YARN集成(經過提供ApplicationMaster的特定實現)以在Hadoop集羣上運行並處理來自HDFS的數據。

下面列出了最流行的分佈式計算框架的簡短描述,這些框架能夠在由YARN支持的Hadoop集羣上運行。

  • MapReduce - Hadoop的傳統和最古老的處理框架,將計算表示爲一系列map和reduce任務。它目前正被Spark或Flink等更快的引擎所取代。

  • Apache Spark - 一種用於大規模數據處理的快速通用引擎,可經過在內存中緩存數據來優化計算(後面部分將詳細介紹)。

  • Apache Flink - 高吞吐量,低延遲的批處理和流處理引擎。它以其強大的實時處理大數據流的能力而着稱。您能夠在這篇全面的文章中找到Spark和Flink之間的差別:https://dzone.com/articles/apache-hadoop-vs-apache-spark

  • Apache Tez - 一個旨在加快Hive執行SQL查詢的引擎。它能夠在Hortonworks數據平臺上得到,它將MapReduce替換爲Hive的執行引擎。

監控YARN應用程序

可使用ResourceManager WebUI跟蹤在Hadoop集羣上運行的全部應用程序的執行,默認狀況下,該管理程序在端口8088上公開。

對於每一個應用程序,您均可以閱讀一些重要信息。

若是單擊「ID」列中的條目,您將得到有關所選應用程序執行的更詳細的指標和統計信息。

熱門提示:使用ResourceManager WebUI,您能夠檢查可用於處理的RAM總量和CPU核心數以及當前的Hadoop集羣負載。查看頁面頂部的「羣集指標」。

————————————————————

推薦閱讀:

老王講架構:負載均衡

支付寶系統架構內部剖析

大數據Spark與Storm技術選型

【贊】用Python實現Zabbix-API 監控

程序員怎麼留住健康?

大數據智慧平臺技術方案

大數據聚合平臺解決方案

相關文章
相關標籤/搜索