1. 程式人生 > >[Hadoop] Hadoop學習筆記之Hadoop基礎

[Hadoop] Hadoop學習筆記之Hadoop基礎

1 Hadoop是什麼?

  Google公司發表了兩篇論文:一篇論文是“The Google File System”,介紹如何實現分散式地儲存海量資料;另一篇論文是“Mapreduce:Simplified Data Processing on Large Clusters”,介紹如何對分散式大規模資料進行處理。Doug Cutting在這兩篇論文的啟發下,基於OSS(Open Source software)的思想實現了這兩篇論文中的原理,從而Hadoop誕生了。

  Hadoop是一種開源的適合大資料的分散式儲存和處理的平臺。作為一種大規模分散式資料處理平臺,Hadoop已成為許多程式設計師的一項重要技能。

2 Hadoop能夠做什麼?

  以下內容有博友王路情整理。

  大資料時代已經到來,給我們的生活、工作、思維方式都帶來變革。如何尋求大資料後面的價值,既是機遇又是挑戰。不管是金融資料、還是電商資料、又還是社交資料、遊戲資料… … 這些資料的規模、結構、增長的速度都給傳統資料儲存和處理技術帶來巨大的考驗。幸運的是,Hadoop的誕生和所構建成的生態系統給大資料的儲存、處理和分析帶來了曙光。

  不管是國外的著名公司Google、Yahoo!、微軟、亞馬遜、 EBay、FaceBook、Twitter、LinkedIn等和初創公司Cloudera、Hortonworks等,又還是國內的著名公司中國移動、阿里巴巴、華為、騰訊、百度、網易、京東商城等,都在使用Hadoop及相關技術解決大規模化資料問題,以滿足公司需求和創造商業價值。

  例如:Yahoo! 的垃圾郵件識別和過濾、使用者特徵建模系統;Amazon.com(亞馬遜)的協同過濾推薦系統;Facebook的Web日誌分析;Twitter、LinkedIn的人脈尋找系統;淘寶商品推薦系統、淘寶搜尋中的自定義篩選功能……這些應用都使用到Hadoop及其相關技術。

  “Hadoop能做什麼?” ,概括如下:

  1)搜尋引擎:這也正是Doug Cutting設計Hadoop的初衷,為了針對大規模的網頁快速建立索引;

  2)大資料儲存:利用Hadoop的分散式儲存能力,例如資料備份、資料倉庫等;

  3)大資料處理:利用Hadoop的分散式處理能力,例如資料探勘、資料分析等;

  4)科學研究:Hadoop是一種分散式的開源框架,對於分散式系統有很大程度地參考價值。

3 Hadoop的三種模式

  Hadoop有三種不同的模式操作,分別為單機模式、偽分佈模式和全分佈模式。每種模式的詳細介紹以及單機模式的安裝請閱讀我之前的部落格:[Hadoop] 在Ubuntu系統上一步步搭建Hadoop(單機模式),偽分散式模式和全分散式模式的相關操作請見王路情的部落格

4 Hadoop核心之分散式檔案系統HDFS

  Hadoop分散式檔案系統(Hadoop Distributed File System,簡稱HDFS)是Hadoop的核心模組之一,它主要解決Hadoop的大資料儲存問題,其思想來源與Google的檔案系統GFS。HDFS的主要特點:

  • 儲存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。預設存3份。
  • 執行在廉價的機器上。
  • 適合大資料的處理。HDFS預設會將檔案分割成block,64M為1個block。然後將block按鍵值對儲存在HDFS上,並將鍵值對的對映存到記憶體中。如果小檔案太多,那記憶體的負擔會很重。

  HDFS中的兩個重要角色:

  [Namenode]

  1)管理檔案系統的名稱空間。

  2)記錄 每個檔案資料快在各個Datanode上的位置和副本資訊。

  3)協調客戶端對檔案的訪問。

  4)記錄名稱空間內的改動或者空間本省屬性的改動。

  5)Namenode 使用事務日誌記錄HDFS元資料的變化。使用映像檔案儲存檔案系統的名稱空間,包括檔案對映,檔案屬性等。

  從社會學來看,Namenode是HDFS裡面的管理者,發揮者管理、協調、操控的作用。

  [Datanode]

  1)負責所在物理節點的儲存管理。

  2)一次寫入,多次讀取(不修改)。

  3)檔案由資料庫組成,一般情況下,資料塊的大小為64MB。

  4)資料儘量散步到各個節點。

  從社會學的角度來看,Datanode是HDFS的工作者,發揮按著Namenode的命令幹活,並且把幹活的進展和問題反饋到Namenode的作用。

  客戶端如何訪問HDFS中一個檔案呢?具體流程如下:

  1)首先從Namenode獲得組成這個檔案的資料塊位置列表。

  2)接下來根據位置列表知道儲存資料塊的Datanode。

  3)最後訪問Datanode獲取資料。

  注意:Namenode並不參與資料實際傳輸。

  資料儲存系統,資料儲存的可靠性至關重要。HDFS是如何保證其可靠性呢?它主要採用如下機理:

  1)冗餘副本策略,即所有資料都有副本,副本的數目可以在hdfs-site.xml中設定相應的複製因子。

  2)機架策略,即HDFS的“機架感知”,一般在本機架存放一個副本,在其它機架再存放別的副本,這樣可以防止機架失效時丟失資料,也可以提供頻寬利用率。

  3)心跳機制,即Namenode週期性從Datanode接受心跳訊號和快報告,沒有按時傳送心跳的Datanode會被標記為宕機,不會再給任何I/O請求,若是Datanode失效造成副本數量下降,並且低於預先設定的閾值,Namenode會檢測出這些資料塊,並在合適的時機進行重新複製。

  4)安全模式,Namenode啟動時會先經過一個“安全模式”階段。

  5)校驗和,客戶端獲取資料通過檢查校驗和,發現數據塊是否損壞,從而確定是否要讀取副本。

  6)回收站,刪除檔案,會先到回收站/trash,其裡面檔案可以快速回復。

  7)元資料保護,映像檔案和事務日誌是Namenode的核心資料,可以配置為擁有多個副本。

  8)快照,支援儲存某個時間點的映像,需要時可以使資料重返這個時間點的狀態。

  如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。

  NameNode:是Master節點,是大領導。管理資料塊對映;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;

  SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量;是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。

  DataNode:Slave節點,奴隸,幹活的。負責儲存client發來的資料塊block;執行資料塊的讀寫操作。

  熱備份:b是a的熱備份,如果a壞掉。那麼b馬上執行代替a的工作。

  冷備份:b是a的冷備份,如果a壞掉。那麼b不能馬上代替a工作。但是b上儲存a的一些資訊,減少a壞掉之後的損失。

  fsimage:元資料映象檔案(檔案系統的目錄樹。)

  edits:元資料的操作日誌(針對檔案系統做的修改操作記錄)

  namenode記憶體中儲存的是=fsimage+edits。

  SecondaryNameNode負責定時預設1小時,從namenode上,獲取fsimage和edits來進行合併,然後再發送給namenode。減少namenode的工作量。

  有關HDFS詳細的寫操作和讀操作請見:老魏的部落格

  有關HDFS的優缺點介紹請見:蝦皮工作室

  有一個關於HDFS工作原理的漫畫版本,請見這裡:HDFS漫畫詳解

5 Hadoop核心之MapReduce

  上部分提到Hadoop儲存大資料的核心模組HDFS,這一部分介紹Hadoop處理大資料部分的核心模組MapReduce。

  Apache Foundation對MapReduce的介紹:“Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.”

  由此可知,Hadoop核心之MapReduce是一個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大叢集上,並以一種可靠的,具有容錯能力的方式並行地處理上TB級別的海量資料集。這個定義裡面有著這些關鍵詞,一是軟體框架,二是並行處理,三是可靠且容錯,四是大規模叢集,五是海量資料集。因此,對於MapReduce,可以簡潔地認為,它是一個軟體框架,海量資料是它的“菜”,它在大規模叢集上以一種可靠且容錯的方式並行地“烹飪這道菜”。

  MapReduce主要是用於解決Hadoop大資料處理的。所謂大資料處理,即以價值為導向,對大資料加工、挖掘和優化等各種處理。

  MapReduce擅長處理大資料,它為什麼具有這種能力呢?這可由MapReduce的設計思想發覺。MapReduce的思想就是“分而治之”。Mapper負責“分”,即把複雜的任務分解為若干個“簡單的任務”來處理。“簡單的任務”包含三層含義:一是資料或計算的規模相對原任務要大大縮小;二是就近計算原則,即任務會分配到存放著所需資料的節點上進行計算;三是這些小任務可以平行計算,彼此間幾乎沒有依賴關係。Reducer負責對map階段的結果進行彙總。至於需要多少個Reducer,使用者可以根據具體問題,通過在mapred-site.xml配置檔案裡設定引數mapred.reduce.tasks的值,預設值為1。

  MapReduce的工作機制如圖所示:

  MapReduce的整個工作過程如上圖所示,它包含如下4個獨立的實體:

  1)客戶端,用來提交MapReduce作業。

  2)jobtracker,用來協調作業的執行。

  3)tasktracker,用來處理作業劃分後的任務。

  4)HDFS,用來在其它實體間共享作業檔案。

  MapReduce整個工作過程有序地包含如下工作環節:

  1)作業的提交

  2)作業的初始化

  3)任務的分配

  4)任務的執行

  5)程序和狀態的更新

  6)作業的完成 

  有關MapReduce的詳細工作細節,請見:《Hadoop權威指南(第二版)》第六章MapReduce工作機制。 

6 參考內容

  [3] Hadoop in Action

  [4] 王路情部落格

  [5] 《Hadoop權威指南(第二版)》

相關推薦

大資料技術學習筆記Hadoop框架基礎5-Hadoop高階特性HA及二次排序思想

一、回顧     -》shuffle流程         -》input:讀取mapreduce輸入的          &nbs

大資料技術學習筆記Hadoop框架基礎1-Hadoop介紹及偽分散式部署

一、學習建議     -》學習思想         -》設計思想:分散式             -》資料採集

大資料技術學習筆記Hadoop框架基礎2-MapReduce程式設計及執行流程

一、回顧     -》hadoop的功能?         -》海量資料儲存和海量計算問題         -》分散式檔案儲存框架hdfs和

大資料技術學習筆記Hadoop框架基礎3-網站日誌分析及MapReduce過程詳解

一、回顧     -》Hadoop啟動方式         -》單個程序             sbin/h

大資料技術學習筆記Hadoop框架基礎4-MapReduceshuffer過程詳解及zookeeper框架學習

一、MapReduce Shuffle     -》MapReduce執行五個階段         input           

[Hadoop] Hadoop學習筆記Hadoop基礎

1 Hadoop是什麼?   Google公司發表了兩篇論文:一篇論文是“The Google File System”,介紹如何實現分散式地儲存海量資料;另一篇論文是“Mapreduce:Simplified Data Processing on Large Clusters”,介紹如何對分散式大規模

大資料學習筆記Hadoop-HDFS

HDFS的Shell操作 基本語法 bin/hadoop fs 具體命令 OR bin/hdfs dfs 具體命令 dfs是fs的實現類。 命令大全 bin/hadoop fs [-appendToFile <localsrc> ... <d

hadoop家族學習路線圖hadoop產品介紹

工作效率 快速 性能 pan 數據處理 sha lin pig win 大數據這個詞也許幾年前你聽著還會覺得陌生,但我相信你現在聽到hadoop這個詞的時候你應該都會覺得“熟悉”!越來越發現身邊從事hadoop開發或者是正在學習hadoop的人變多了。作為一個hadoop入

Hadoop概念學習系列Hadoop、Spark學習路線(很值得推薦)

不多說,直接上乾貨! 說在前面的話   此筆,對於僅對於Hadoop和Spark初中學者。高手請忽略! 1 Java基礎:     視訊方面:           推薦《畢向東JAVA基礎視訊教程》。學習hadoop不需要過度的深入,java學習到

hadoop家族學習路線圖hadoop產品詳解

大資料這個詞也許幾年前你聽著還會覺得陌生,但我相信你現在聽到hadoop這個詞的時候你應該都會覺得“熟悉”!越來越發現身邊從事hadoop開發或者是正在學習hadoop的人變多了。作為一個hadoop入門級的新手,你會覺得哪些地方很難呢?執行環境的搭建恐怕就已經足夠讓新手頭疼

Hadoop概念學習系列Hadoop、Spark學習路線(很值得推薦)(十八)

   不多說,直接上乾貨! 說在前面的話   此筆,對於僅對於Hadoop和Spark初中學者。高手請忽略! 1 Java基礎:     視訊方面:          推薦《畢向東JAVA基礎視訊教程》。學習hadoop不需要過度的深入,java學習到javase,在Java虛

Hadoop Oozie 學習筆記(六) Hadoop Oozie概述

      網上中文資料有點少,我這裡翻譯下官網.對自己也是個梳理,希望對大家也有用.       Oozie是一個工作流引擎伺服器,用於執行Hadoop Map/Reduce和Pig 任務工作流.同時Oozie還是一個Java Web程式,執行在Java Ser

React學習筆記react基礎篇(1)

lis fun tst struct pan 流程 普通 如果 是把 一.React特點歸納   1.聲明式的視圖層:React 模板寫在 JS 文件中,而不是 html 的 <script> 標簽中。能使用所有 JS 語法,而不只有模板語法,所以更加靈活。  

React學習筆記react基礎篇(2)

應用場景 組件 單元 ren provide form 實例 show wid   上一節我已經對React中基本的組件操作進行了說明,這一節我將對組件的一些附加屬性(如:組件的生命周期和組件的樣式)以及一些其他功能進行講解 一.組件的樣式 1.外部CSS樣式表: /

大資料技術學習筆記linux基礎3-軟體管理與shell指令碼開發

一、Linux軟體管理     -》壓縮檔案管理         -》常見壓縮格式             -

大資料技術學習筆記linux基礎2-基礎環境與系統管理

  一、Linux使用者及許可權管理     -》使用者管理         -》Linux使用者的配置檔案:/etc/passwd      &nb

大資料技術學習筆記linux基礎1-基礎環境與基礎命令

一、Linux系統介紹及部署     -》常見作業系統         -》windows、Linux(類unix系統)、Android、iOS、unix(HP UNIX)   

網路資訊保安學習筆記數論基礎

一、群環域 1.群 群G,記作{G,•},定義一個二元運算•的集合,G中每一個序偶(a,b)通過運算生成G中的元素(a•b),滿足以下公理: 封閉性:如果a,b都屬於G,則a•b也屬於G 結合律:對於任意的a,b,c,都有a•(b•c)=(a•b)•c成立 單位元:

完整學習筆記Android基礎(詳版)

Android專案的目錄結構(熟悉) Activity:應用被開啟時顯示的介面 src:專案程式碼 R.java:專案中所有資原始檔的資源id Android.jar:Android的jar包,匯入此包方可使用Android的api libs:匯入第三方ja

學習筆記MongoDB基礎命令

1.選擇資料庫 命令: use DATEBASE_NAME(資料庫名) 作用:若沒有該資料庫則直接建立,若有則切換資料庫 執行效果如下: use runoob switched to db runoob db runoob