Hadoop學習筆記——————1、Hadoop概述

FLy_鵬程萬里發表於2018-07-16

Hadoop介紹

Hadoop是一個由Apache基金會開發的分散式系統基礎架構。使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力進行高速運算和儲存。 

Hadoop實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS。

HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(high throughput)來訪問應用程式的資料,適合那些有著超大資料集(large data set)的應用程式。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)檔案系統中的資料。

Hadoop大事記

2016年9月,Hadoop釋出Hadoop3.0.0

2015年4月,Hadoop釋出Hadoop2.7.0

2014年11月,Hadoop釋出Hadoop2.6.0

2014年8月,Hadoop釋出Hadoop2.5.0

2014年4月,Hadoop釋出Hadoop2.4.0

2014年2月,Hadoop釋出Hadoop2.3.0.

2013年5月,Hadoop與Cloudera完全整合。

2013年2月,Wandisco推出了世界第一款可用於實際業務環境的Apache Hadoop 2 -WANdisco Distro(WDD)。

2011年12月27日--1.0.0版本釋出。標誌著Hadoop已經初具生產規模。

2009年4月-- 贏得每分鐘排序,59秒內排序500 GB(在1400個節點上)和173分鐘內排序100 TB資料(在3400個節點上)。

2009年3月-- 17個叢集總共24 000臺機器。

2008年10月-- 研究叢集每天裝載10 TB的資料。

2008年4月-- 贏得世界最快1 TB資料排序在900個節點上用時209秒。

2007年4月-- 研究叢集達到兩個1000個節點的叢集。

2007年1月-- 研究叢集到達900個節點。

2006年12月-- 標準排序在20個節點上執行1.8個小時,100個節點3.3小時,500個節點5.2小時,900個節點7.8個小時。

2006年11月-- 研究叢集增加到600個節點。

2006年5月-- 標準排序在500個節點上執行42個小時(硬體配置比4月的更好)。

2006年5月-- 雅虎建立了一個300個節點的Hadoop研究叢集。

2006年4月-- 標準排序(10 GB每個節點)在188個節點上執行47.9個小時。

2006年2月-- 雅虎的網格計算團隊採用Hadoop。

2006年2月-- Apache Hadoop專案正式啟動以支援MapReduce和HDFS的獨立發展。

2006年1月-- Doug Cutting加入雅虎。

2005年12月-- Nutch移植到新的框架,Hadoop在20個節點上穩定執行。

2004年-- 最初的版本(現在稱為HDFS和MapReduce)由Doug Cutting和Mike Cafarella開始實施。

Hadoop的優點

Hadoop是一個能夠讓使用者輕鬆架構和使用的分散式計算平臺。使用者可以輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。它主要有以下幾個優點:

⒈高可靠性。Hadoop按位儲存和處理資料的能力值得人們信賴。

⒉高擴充套件性。Hadoop是在可用的計算機集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。

⒊高效性。Hadoop能夠在節點之間動態地移動資料,並保證各個節點的動態平衡,因此處理速度非常快。

⒋高容錯性。Hadoop能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。

Hadoop帶有用 Java 語言編寫的框架,因此執行在 Linux 生產平臺上是非常理想的。Hadoop 上的應用程式也可以使用其他語言編寫,比如 C++。

Hadoop解決的核心問題

  • 核心問題——海量資料    
  • 如何儲存——HDFS
  • 如何計算——MapReduce

Hadoop架構組成

Hadoop由HDFS、MapReduce、HbaseHive和ZooKeeper等成員組成,其中最基礎最重要元素為底層用於儲存叢集中所有儲存節點檔案的檔案系統HDFS(Hadoop Distributed File System)來執行MapReduce程式的MapReduce引擎。

(1)Pig是一個基於Hadoop的大規模資料分析平臺,Pig為複雜的海量資料平行計算提供了一個簡單的操作和程式設計介面;
(2)hive是基於Hadoop的一個工具,提供完整的SQL查詢,可以將sql語句轉換為MapReduce任務進行執行;
(3)ZooKeeper:高效的,可擴充的協調系統,儲存和協調關鍵共享狀態;
(4)hbase是一個開源的,基於列儲存模型的分散式資料庫
(5)HDFS是一個分散式檔案系統,有著高容錯性的特點,適合那些超大資料集的應用程式;
(6)MapReduce是一種程式設計模型,用於大規模資料集(大於1TB)的並行運算。
(7)Sqoop:於在HADOOP與傳統的資料庫間進行資料的傳遞。
(8)新的資料序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。
下圖是一個典型的Hadoop叢集的部署結構:

接著給出Hadoop各元件依賴共存關係:

Hadoop核心設計

(1)HDFS

HDFS是一個高度容錯性的分散式檔案系統,可以被廣泛的部署於廉價的PC上。它以流式訪問模式訪問應用程式的資料,這大大提高了整個系統的資料吞吐量,因而非常適合用於具有超大資料集的應用程式中。

HDFS的架構如圖所示。HDFS架構採用主從架構(master/slave)。一個典型的HDFS叢集包含一個NameNode節點和多個DataNode節點。NameNode節點負責整個HDFS檔案系統中的檔案的後設資料的保管和管理,叢集中通常只有一臺機器上執行NameNode例項,DataNode節點儲存檔案中的資料,叢集中的機器分別執行一個DataNode例項。在HDFS中,NameNode節點被稱為名稱節點,DataNode節點被稱為資料節點。DataNode節點通過心跳機制與NameNode節點進行定時的通訊。

•NameNode
可以看作是分散式檔案系統中的管理者,儲存檔案系統的meta-data,主要負責管理檔案系統的名稱空間,叢集配置資訊,儲存塊的複製。

•DataNode
是檔案儲存的基本單元。它儲存檔案塊在本地檔案系統中,儲存了檔案塊的meta-data,同時週期性的傳送所有存在的檔案塊的報告給NameNode。

•Client
就是需要獲取分散式檔案系統檔案的應用程式。

HDFS如何進行檔案的讀寫操作:

檔案寫入:

1. Client向NameNode發起檔案寫入的請求
2. NameNode根據檔案大小和檔案塊配置情況,返回給Client它所管理部分DataNode的資訊。
3. Client將檔案劃分為多個檔案塊,根據DataNode的地址資訊,按順序寫入到每一個DataNode塊中。

檔案讀取:
1. Client向NameNode發起檔案讀取的請求
2. NameNode返回檔案儲存的DataNode的資訊。
3. Client讀取檔案資訊。

(2)MapReduce

MapReduce是一種程式設計模型,用於大規模資料集的並行運算。Map(對映)和Reduce(化簡),採用分而治之思想,先把任務分發到叢集多個節點上,平行計算,然後再把計算結果合併,從而得到最終計算結果。多節點計算,所涉及的任務排程、負載均衡、容錯處理等,都由MapReduce框架完成,不需要程式設計人員關心這些內容。
下圖是MapReduce的處理過程:

使用者提交任務給JobTracer,JobTracer把對應的使用者程式中的Map操作和Reduce操作對映至TaskTracer節點中;輸入模組負責把輸入資料分成小資料塊,然後把它們傳給Map節點;Map節點得到每一個key/value對,處理後產生一個或多個key/value對,然後寫入檔案;Reduce節點獲取臨時檔案中的資料,對帶有相同key的資料進行迭代計算,然後把終結果寫入檔案。

如果這樣解釋還是太抽象,可以通過下面一個具體的處理過程來理解:(WordCount例項) :

Hadoop的核心是MapReduce,而MapReduce的核心又在於map和reduce函式。它們是交給使用者實現的,這兩個函式定義了任務本身。

map函式:接受一個鍵值對(key-value pair)(例如上圖中的Splitting結果),產生一組中間鍵值對(例如上圖中Mapping後的結果)。Map/Reduce框架會將map函式產生的中間鍵值對裡鍵相同的值傳遞給一個reduce函式。
reduce函式:接受一個鍵,以及相關的一組值(例如上圖中Shuffling後的結果),將這組值進行合併產生一組規模更小的值(通常只有一個或零個值)(例如上圖中Reduce後的結果)

但是,Map/Reduce並不是萬能的,適用於Map/Reduce計算有先提條件:
(1)待處理的資料集可以分解成許多小的資料集;
(2)而且每一個小資料集都可以完全並行地進行處理;
若不滿足以上兩條中的任意一條,則不適合適用Map/Reduce模式。

Hadoop叢集

Google的資料中心使用廉價的Linux PC機組成叢集,在上面執行各種應用。即使是分散式開發的新手也可以迅速使用Google的基礎設施。核心元件是3個:

⒈GFS(Google File System)。一個分散式檔案系統,隱藏下層負載均衡,冗餘複製等細節,對上層程式提供一個統一的檔案系統API介面。Google根據自己的需求對它進行了特別優化,包括:超大檔案的訪問,讀操作比例遠超過寫操作,PC機極易發生故障造成節點失效等。GFS把檔案分成64MB的塊,分佈在叢集的機器上,使用Linux的檔案系統存放。同時每塊檔案至少有3份以上的冗餘。中心是一個Master節點,根據檔案索引,找尋檔案塊。詳見Google的工程師釋出的GFS論文。

⒉MapReduce。Google發現大多數分散式運算可以抽象為MapReduce操作。Map是把輸入Input分解成中間的Key/Value對,Reduce把Key/Value合成最終輸出Output。這兩個函式由程式設計師提供給系統,下層設施把Map和Reduce操作分佈在叢集上執行,並把結果儲存在GFS上。

⒊BigTable。一個大型的分散式資料庫,這個資料庫不是關係式的資料庫。像它的名字一樣,就是一個巨大的表格,用來儲存結構化的資料。

以上三個設施Google均有論文發表。

大資料方向就業的三大類

參考:Baidu、部落格園、CSDN

相關文章