1. 程式人生 > >【大資料】瞭解Hadoop框架的基礎知識

【大資料】瞭解Hadoop框架的基礎知識

介紹

此Refcard提供了Apache Hadoop,這是最流行的軟體框架,可使用簡單的高階程式設計模型實現大型資料集的分散式儲存和處理。我們將介紹Hadoop最重要的概念,描述其架構,指導您如何開始使用它以及在Hadoop上編寫和執行各種應用程式。

簡而言之,Hadoop是Apache Software Foundation的一個開源專案,可以安裝在伺服器叢集上,以便這些伺服器可以通訊並協同工作來儲存和處理大型資料集。Hadoop近年來因其有效處理大資料的能力而變得非常成功。它允許公司將所有資料儲存在一個系統中,並對這些資料進行分析,否則傳統解決方案不可能或非常昂貴。

圍繞Hadoop構建的許多配套工具提供了各種各樣的處理技術。與輔助系統和實用程式的整合非常出色,使Hadoop的實際工作更輕鬆,更高效。這些工具共同構成了Hadoop生態系統。

您可以將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 監控

程式設計師怎麼留住健康?

大資料智慧平臺技術方案

大資料聚合平臺解決方案