天天看點

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Apache Hadoop 是一個軟體架構,可以在具有數千個節點和 PB 級資料的大型叢集上進行分布式處理。Apache Hadoop 叢集可以使用故障率一般較高的低價通用硬體來建構。Hadoop 的設計能夠在沒有使用者幹預的情況下優雅地處理這些故障。此外,Hadoop 采用了讓計算貼近資料(move computation to the data)的方法,進而顯著降低了網絡流量。它的使用者能夠快速開發并行的應用程式,進而專注于業務邏輯,而無需承擔分發資料、分發用于并行處理的代碼以及處理故障等繁重的工作。Apache Hadoop 主要包含四個項目:Hadoop Common、Hadoop 分布式檔案系統( Hadoop Distributed File System,HDFS)、YARN(Yet Another Resource Negotiator)和 MapReduce。

簡而言之,HDFS 用于存儲資料,MapReduce 用于處理資料,YARN 則用來管理叢集的資源(CPU 和記憶體)及支援 Hadoop 的公共實用程式。Apache Hadoop 可以與許多其他項目內建,如 Avro、Hive、Pig、HBase、Zookeeper 和 Apache Spark。

Hadoop 帶來的主要是以下三個元件:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

讓我們來了解一下 Hadoop 在經濟、業務和技術領域應用的驅動因素:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Hadoop 的典型特點如下所示:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

HDFS 是一種分布式檔案系統,能在低價通用硬體的大型叢集上提供很高的可擴充性和可靠性。

HDFS 檔案會劃分為大區塊分布在叢集中,每個區塊的大小通常為 128 MB。每個區塊都會被複制(通常是 3 份),以便處理硬體故障以及管理節點(NameNode)展現的區塊布局,并通過 MapReduce 架構把計算轉移到資料上,如圖2-1所示。

在圖2-1中,當存儲 File1 時,由于其大小(100 MB)小于預設塊大小(128 MB),是以它被劃分在單個區塊(B1)中,并且在節點 1、節點 2 和節點 3 上被複制。區塊 1(B1)被複制在第一個節點(節點 1)上,然後節點 1 複制到節點 2 上,節點 2 再複制到節點 3 上。由于 File2 的大小(150 MB)大于塊大小,是以 File2 被分成兩個區塊,然後區塊 2(B2)和區塊 3(B3)都會在三個節點( B2 複制到節點 1、節點 3 和節點 4,B3 複制到節點 1 、節點 2 和節點 3 )上進行複制。區塊的中繼資料(檔案名、區塊、位置、建立的日期和大小)會存儲在管理節點中,如上圖所示。HDFS 具有較大的區塊大小,進而減少了讀取完整檔案所需的磁盤尋道次數。

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

這樣建立出的某個檔案對使用者來說似乎像是單個檔案。不過,它是作為區塊存儲在資料節點上,還有中繼資料存儲在管理節點中。如果我們由于任何原因丢失了管理節點,存儲在資料節點上的區塊就會變得無用,因為沒有辦法識别屬于該檔案名的區塊。是以,建立管理節點的高可用性和中繼資料的備份在任何 Hadoop 叢集中都是非常重要的。

HDFS 正在成為标準的企業級大資料存儲系統,因為它具有無限的可擴充性,同時提供了企業級大資料應用所需的大多數功能。下表列出了 HDFS 的一些重要特性:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

MapReduce(MR)是一個架構,用于針對存儲在 HDFS 上的 TB 級或 PB 級資料編寫批量處理模式的分析應用程式。MR任務通常會利用映射器任務以并行方式處理 HDFS 中的輸入檔案的每個區塊(不包括複制的副本)。MR 架構對映射器的輸出進行排序和混排,并将其彙總到化簡器任務,進而産生輸出。該架構負責計算所需任務的數量、排程任務、監控它們,并在出現故障時重新執行它們。開發人員隻需要專注于編寫業務邏輯,所有繁雜的工作都由 HDFS 和 MR 架構完成。

例如,在圖2-1 中,如果送出了一個處理 File1 的 MR 任務,則将建立一個映射器任務并在節點1、2 或 3 的其中任何一個運作,以實作資料的本地化。對于 File2 的處理,會根據資源的可用性建立兩個映射器任務,其中映射器任務 1 會在節點 1、3 或 4 上運作,而映射器任務 2 在節點 1、2 或 3 上運作。映射器的輸出會被排序和混排後交給化簡器任務。預設情況下,化簡器的數量為 1。但是,化簡器任務的數量也可以增加,這樣就可以在化簡器的級别進行并行處理。

MR為你提供了建構大資料應用程式所需的卓越功能。下表描述了 MR 的主要特性和技術,如排序和連接配接(join):

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Apache Hadoop 的 MapReduce 是一個核心處理引擎,它支援大規模資料負載的分布式處理。MR 已經在 Hadoop 0.23 版本中進行了徹底的改造,現在稱為 MapReduce 2.0(MR v2)或 YARN。

MapReduce v1 也稱為經典 MapReduce,它有三個主要組成部分:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

MapReduce v2 也稱為 NextGen,它把資源管理轉移到了 YARN,如圖2-2 所示。

MapReduce v1 面臨的挑戰

MapReduce v1 面臨三個挑戰:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

下表顯示了 v1 和 v2 之間的差異:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

YARN 是一套資源管理架構,它讓企業能夠同時以多種方式處理資料,對共享的資料集進行批處理、互動式分析或實時分析。HDFS 為大資料提供了可擴充、具備容錯能力且經濟實用的存儲,而 YARN 為叢集提供了資源的管理。圖2-3 顯示了如何在 Hadoop 2.0 中的 HDFS 和 YARN 架構上運作多個架構的典型情況。YARN 就像一個用于 Hadoop 的作業系統,它可以高效地管理叢集中的資源(CPU 和記憶體)。像 MapReduce 和 Spark 這樣的應用程式會請求 YARN 為它的任務配置設定資源。YARN 會在節點可用的資源總量中按照所請求的記憶體和虛拟 CPU 數量,在節點上配置設定容器。

YARN 起初的目的是将作業追蹤器 JobTracker / 任務追蹤器 TaskTracker (它們是 MapReduce v1 的一部分)這樣兩個主要職責拆分為單獨的實體:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

資料總管會追蹤整個叢集的資源的可用性,并在應用管理器送出請求時向應用程式提供資源。

應用管理器負責協商應用程式運作其任務所需的資源。應用管理器還跟蹤并監控應用程式的進度。請注意,在 MR v1 中,這個監控功能是由任務追蹤器和作業追蹤器處理的,會導緻作業追蹤器需要重載。

節點管理器負責啟動由資料總管提供的容器,監控從機節點上的資源使用情況,并向資料總管報告。

應用程式容器負責運作應用程式的任務。YARN 還具有可插拔的排程器(Fair Scheduler 和 Capacity Scheduler),用來控制不同應用程式的資源配置設定。YARN 應用程式生命周期的詳細步驟如圖2-4所示,圖中的一個應用程式有兩個資源請求:

我們對前面這個圖的解釋如下所示:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

XML 和 JSON 檔案是公認的行業标準格式。那麼,為什麼我們不能在Hadoop 上使用 XML 或 JSON 檔案呢?XML 和 JSON 有許多缺點,包括以下幾點:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

當我們在 Hadoop 上存儲資料和建構應用程式時,會遇到一些基本問題:什麼樣的存儲格式對我的應用程式有用?哪種壓縮編解碼器(codec)适合我的應用程式?Hadoop 為你提供了針對不同用例而建構的各種檔案格式。選擇正确的檔案格式和壓縮編解碼器可為你正在處理的用例提供最佳性能。讓我們逐個講解這些檔案格式,并了解何時使用它們。

檔案格式可以劃分為兩類。Hadoop 可以存儲所有資料,無論資料存儲的格式是怎樣的。資料可以使用标準檔案格式以原始形式存儲,或存儲為特殊的 Hadoop 容器檔案格式,這些容器檔案格式在某些特定用例的場景中具有優勢,因為當資料被壓縮時它們仍然是可以拆分的。總體而言,有兩種類型的檔案格式:标準檔案格式和 Hadoop檔案格式。

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

讓我們來看一下 Hadoop 檔案格式的特性及其适用的用例。

順序檔案把資料存儲為二進制的鍵值對。它僅支援 Java 語言,不支援模式演進。即使資料是被壓縮的,它也支援分拆檔案。

讓我們看一下順序檔案的用例:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

協定緩沖區(protocol buffer)由Google開發,并于2008年開源。thrift則是由 Facebook開發的,提供了比協定緩沖區更多的功能和語言支援。它們都是在通過網絡發送資料時提供高性能的序列化架構。Avro則是專為Hadoop設計的序列化專用格式。

協定緩沖區和 thrift 的一般使用模式如下:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Avro 是一種基于行的資料序列化系統,用于存儲并通過網絡高效地發送資料。Avro 具備以下的優勢:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Avro 的一個用例如下所示:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Parquet 是一種列格式,可以在不符合查詢條件的列上跳過讀寫和解壓縮(如果适用的話)。它在對列進行壓縮方面通常也很有效,因為在同一列裡的列資料比由行組成的區塊中的資料更為相似。

Parquet 的一個用例如下所示:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

記錄列檔案(Record Columnar File,RCFile)是 Hive 的首選柱形格式,提供了高效的查詢處理。在 Hive 0.11中引入了優化行列(Optimized Row Columnar,ORC)格式,具備比 RCFile 格式更好的壓縮和效率。ORCFile 具有輕量級索引,可以利用它跳過不相關的列。

ORC 和 Parquet檔案的一個用例如下所示:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

Hadoop 存儲可以使用各種壓縮格式。不過,如果 Hadoop 存儲很便宜的話,為什麼還需要壓縮我們的資料呢?以下清單回答了你的問題:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

不過,資料壓縮和解壓縮會增加 CPU 時間。了解這些權衡因素對于優化在 Hadoop 上運作的作業的性能非常重要。

标準壓縮格式

下表顯示了Hadoop平台上可用的标準壓縮格式:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述

用于壓縮的推薦使用模式如下:

《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述
《Spark與Hadoop大資料分析》——2.1 Apache Hadoop概述