1. 程式人生 > >hadoop知識點總結(一)hadoop架構以及mapreduce工作機制

hadoop知識點總結(一)hadoop架構以及mapreduce工作機制

1,為什麼需要hadoop

      資料分析者面臨的問題

               資料日趨龐大,讀寫都出現效能瓶頸;

               使用者的應用和分析結果,對實時性和響應時間要求越來越高;

               使用的模型越來越複雜,計算量指數級上升。

      期待的解決方案

               解決效能瓶頸,在可見的未來不會出現新瓶頸之前的技術可以平穩過渡,如SQL;

               轉移成本,如軟硬體成本,開發成本,技能培養成本,維護成本

2,關係型資料庫和MapReduce的比較:

傳統關係型資料庫

MapReduce

資料大小

GB

PB

訪問

互動式和批處理

批處理

更新

多次讀寫

一次寫入多次讀寫

結構

靜態模式

動態模式

完整性

橫向擴充套件

非線性

線性

3,Hadoop 的優勢與特點:

  (1)Hadoop基於Java開發,為應用程式提供一組穩定可靠的API介面,實現具有高可靠性和良好擴充套件性的分散式系統,運行於大量廉價硬體裝置組成的集群系統上。

  (2)分散式檔案系統(HDFS):針對大規模資料的高容錯性和高吞吐的分散式檔案系統;它可以構建從幾臺到幾千臺由常規伺服器組成的叢集中,並提供高聚合輸入輸出的檔案讀寫訪問。

  (3)平行計算框架(MapReduce):適用於大資料量處理的分散式框架,是為離線資料分析而設計,利用資料的並行性進行分佈運算,而後彙總結果的計算框架。

  (4)NameNode是一箇中心伺服器,負責管理檔案系統的namespace和客戶端對檔案的訪問;Datanode在叢集中會有多個,一般是一個節點存在一個,負責管理其自身節點上它們附帶的儲存。在內部,一個大檔案分成一個或多個block,這些block儲存在Datanode集合裡。Namenode執行檔案系統的namespace相關操作,例如開啟、關閉、重新命名檔案和目錄,同時決定了Block到具體Datanode節點的對映。Datanode在Namenode的指揮下進行block的建立、刪除和複製工作。

  單一節點的Namenode大大簡化了系統的架構。Namenode負責保管和管理所有的HDFS元資料,因而在請求Namenode得到檔案的位置後就不需要通過Namenode參與而直接從Datanode進行。

  (5)分散式資料庫(HBase):是一個分散式的、按列儲存的、多維表結構的實時分散式資料庫,它可以提供大資料量架構化和非結構化資料高速讀寫操作,為高速線上資料服務而設計。

支援每秒數萬條級別的高速併發寫入和高速查詢;可擴充套件,資料自動切分和分佈,可動態擴容,無需停機;資料存放在HDFS檔案系統上,不會丟失;靈活的表結構,可動態增加或改變;面向列,可壓縮,有效降低磁碟I/O,提高磁碟利用率。多維表,四個維度,其中三個維度可變,適合描述複雜巢狀關係。

  (6)平行計算框架(MapReduce):適用於大資料量處理的分散式框架,是為離線資料分析而設計,利用資料的並行性進行分佈運算,而後彙總結果的計算框架。

將任務拆分、分佈、彙總,開發人員只需要實現業務邏輯;分佈任務自動失敗重試,單個任務失敗不會造成整個任務退出;和HDFS整合,使計算移到資料所在的節點執行。...

4,hadoop體系下的分析手段

  主流:Java 程式

  輕量級的指令碼語言:Pig 

  SQL技巧平穩:Hive

  NoSQL:Hbase

5,hadoop的定義

  Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺(框架)——Nutch

  包含HDFS和MapReduce兩大核心模組

  為使用者提供系統底層細節透明的分散式基礎架構。

6,hadoop專案結構

    

7,hadoop各個節點角色的劃分:

   1)hadoop1.x

             Hadoop角度:Master(主結點)和Slave(從結點)

   HDFS角度:NameNode和DataNode

   MapReduce角度:JobTracker和TaskTracker

              2)hadoop 2.x

            HDFS角度:NameNode和DataNode

             YARN角度:nodemanager和ResourceManager

8,nameNode和dataNode的特點及作用,(詳細可以參考我的另外一篇文章)

  1)NameNode

                   作用——HDFS的守護程式;記錄檔案如何分割成資料塊的,以及這些資料塊被儲存到哪些節

                                    點上;對記憶體和I/O進行集中管理,負責檔案元資料的操作.Namenode是主節點,儲存  

                                    檔案的元資料如檔名,檔案目錄結構,檔案屬性(生成時間,副本數,檔案許可權)

                                     以及每個檔案的塊列表,以及塊所在的DataNode等等。

                 特點——單點(一個叢集只有唯一一個NameNode),因此發生故障將使叢集崩潰.

  2)DataNode

                       介紹:-----Datanode是檔案系統的工作節點,他們根據客戶端或者是namenode的排程儲存和檢 

                                          索資料,並且定期向namenode傳送他們所儲存的塊(block)的列表。

                        作用----- 負責把HDFS資料庫讀寫到本地檔案系統,提供真實檔案資料的儲存服務。

            特點:——多點(一個叢集可以有多個datanode),因此發生故障將使叢集崩潰.

9。SecondaryNamenode介紹

     監控HDFS狀態的輔助後臺程式

     每個叢集可以有一個或多個

     與NameNode進行通訊,定期儲存HDFS元資料快照

     當NameNode故障可以作為備用NameNode 使用

JobTracker介紹

    用於處理作業(使用者提交程式碼)的後臺程式

    決定有哪些檔案參與處理,然後切割task並分配節點

    監控task,重啟失敗的task

    每個叢集只有唯一一個JobTracker,位於Master節點

TaskTracker介紹

    位於slave節點上,與DataNode結合(程式碼與資料一起)

    管理各自節點由JobTracker分配的Task

    每個節點只有一個TaskTracker,一個TaskTracker可以啟動多個JVM,來並行執行     map或reduce任務

    與JobTracker互動

問題:1,什麼是Hadoop,你理解中的Hadoop是什麼,請舉例說明?

   2,請闡述Hadoop架構中各個程序的作用?

MapReduce程式設計模型:

  在Hadoop中,每一個MapReduce任務都被初始化為一個Job。

  每一個Job又可以分為兩個階段:

  Map:Map函式,接收一個<key,value>形式的輸入,然後產生同樣為<key,value>形式的   中間輸出;

  Reduce:Reduce函式接收一個<key,value(Listof value)>形式的輸入,然後對這個value 集合進行處理並輸出結果。

10,資料預處理與輸入分片的大小

   MapReduce任務擅長處理少量的大資料

  若是大量的小資料,則選擇先對資料進行一次預處理,將資料合併以提高MapReduce任務  的執行效率。

   或當一個Map任務執行只需幾秒時,考慮多分配些資料,讓其處理

   通常,一個Map任務執行60秒左右是比較合適的

11,  Map和Reduce任務的數量

Map/Reduce任務槽:這個叢集能夠同時執行的Map/Reduce任務的最大數量。

任務槽幫助對任務排程進行設定。

設定Map數量主要參考Map執行的時間,設定Reduce任務的資料量參考任務槽的設定,即Reduce任務數是任務槽的0.95或1.75倍。

12,Combine函式   用於本地合併資料的函式。

        作用:某些資料在本地會產生很多相同重複的資料,若此時一個一個傳遞給Reduce任務是非常耗時的;因此,MapReduce框架執行Combine函式用於本地合併,這會大大減少IO操作的消耗。合理設計該函式能有效減少網路傳輸的資料量,提高MapReduce的效率。

13,  壓縮:對Map的中間結果輸出和最終結果輸出,進行壓縮

作用:減少網路傳輸。有副作用,請根據實際情況來選擇。

14, 自定義Comparator 自定義Hadoop資料型別,以實現更加複雜的目的

作用:節省資料序列化和反序列化的時間。

MapReduce工作機制

1.JobConf常用可定製引數

引數

作用

預設值

其他實現

InputFormat

將輸入的資料集切割成小資料集InputSplits,每一個InputSplits將由一個Mapper負責處理。此外,InputFormat提供一個RecordReader的實現,將一個InputSplits解析成<key,value>對提供給map函式

TextInputFormat(針對文字檔案,按行將文字檔案切割成InputSplits,並用LineRecordReader將InputSplits解析成<key,value>對,key是行在檔案中的位置,value是檔案中的一行)

SequenceFileInputForm

SequenceFileInputForm

提供一個RecordWriter的實現,負責輸出最終結果

TextOutputFormat(用LineRecordWriter將最終結果寫成純文字檔案,每個<key,value>對一行,key和value之間用tab分隔)

SequenceFileOutputForm

OutputKeyClass

輸出的最終結果中key的型別

LongWritable

OutputValueClass

輸出的最終結果中value的型別

Text

MapperClass

Mapper類,實現map函式,完成輸入的<key,value>到中間結果的對映

IdentityMapper(將輸入的<key,value>原封不動的輸出為中間結果)

LongSumReducer,

LogRegexMapper,

InverseMapper

CombinerClass

實現combine函式,將中間結果中的重複key做合併

Null(不對中間結果中的重複key做合併)

ReducerClass

實現reduce函式,對中間結果做合併,形成最終結果

IdentityReducer(將中間結果直接輸出為最終結果)

AccumulatingReducer,LongSumReducer

InputPath

設定Job的輸入目錄,Job執行時會處理輸入目錄下的所有檔案

Null

OutputPath

設定Job的輸出目錄,Job的最終結果會寫入輸出目錄之下

Null

MapOutputKeyClass

設定map函式輸出的中間結果中key的型別

如果使用者沒有設定,使用OutputKeyClass

MapOutputValueClass

設定Map函式輸出的中間結果中value的型別

如果使用者沒有設定,使用OutputValueClass

OutputKeyComparator

對結果中的key進行排序時,使用的比較器

WritableComparable

PartitionerClass

對中間結果key排序後,用Partition函式將其劃分為R份,每一份由一個Reducer負責處理。

HashPartitioner(使用Hash函式做partition)

KeyFieldBasedPartitioner

PipesPartitioner

2, Hadoop執行MapReduce作業的工作原理

 

(1)作業的提交

  作業提交後,使用者不能對作業進行修改,只能監控或強制終止;

在作業提交之前,使用者需做好所有引數的配置工作。(配置工作包括:

程式程式碼map和reduce,Map和Reduce介面的配置,配置四個引數;

Map介面的輸出型別和Reduce介面的輸入型別一致;輸入輸出路徑

必須保證輸出路徑下不存在該資料夾;其他型別設定)

(2)作業的初始化

  當JobTracker接收到對其submitJob()方法的呼叫後,會把此呼叫放入一個內部的佇列中,交由作業排程器進行排程,並對其進行初始化;初始化包括建立一個表示正在執行作業的物件,封裝任務和記錄資訊,以便跟蹤任務的狀態和程序。

  初始化步驟:作業排程器從HDFS中讀取已經計算好的輸入分片   資訊;

  為每個分片建立一個map任務; 

  建立Reduce任務的數量根據輸入資料劃分資訊來設定個數;

  排程器建立相應數量的要執行的Reduce任務;

  任務在此時被指定ID。

(3)任務分配

  TaskTracker和JobTracker之間的通訊和任務的分配是通過“心跳”機制來完成的。

(4)任務執行

  通過從HDFS中把作業的JAR檔案複製到taskTracker所在的檔案系統,從而實現作業的JAR檔案本地化;

  taskTracker將應用程式所需要的全部檔案從分散式快取複製到本地磁碟;

  taskTracker為任務新建一個本地工作目錄,並把JAR檔案中的內容解壓到這個資料夾下;

  taskTracker新建一個TaskRunner例項來執行該任務。

(5)進度和狀態的更新

當提交作業後,Hadoop會進入完全自動化的執行過程;但使用者往往需要能夠知曉作業的執行狀態;

因此,任務在執行時,對其進度(任務完成百分比)保持追蹤,對於使用者來說是非常重要的。

(6)作業的完成

當JobTracker收到作業最後一個任務已完成的通知後,便把作業的狀態設定為“成功”;

在JobClient查詢狀態時,便知道任務已成功完成,於是JobClient列印一條訊息告知使用者,然後從runJob()方法返回;

最後,JobTracker將清空作業的工作狀態,指示taskTracker也清空作業的工作狀態。

(7)失敗:在實際情況下,使用者程式碼存在軟體錯誤,程序會崩潰,機器會產生故障。

3,shuff和排序

    MapReduce確保每個Reduce的輸入都按鍵排序;

系統執行排序的過程——將map輸出作為輸入傳給Reduce——稱為shuffle;

Shuffle屬於不斷被優化和改進的程式碼庫的一部分,提出它的目的只有一個——出於效率的考慮進行預排序;Shuffle是MapReduce的“心臟”,是奇蹟發生的地方

(1)Shuffle過程在Map端,對Map的結果進行劃分,排序,分割,將屬於同一個劃分的輸出,合併在一起,並寫入磁碟,按照不同的劃分將結果傳送給對應的Reduce。Map輸出的劃分與Reduce的對應關係由JobTracker確定。

     (2)在寫磁碟過程中,map函式的輸出繼續被寫到緩衝區,但如果此期間緩衝區被填滿;Map任務必須等待,直到寫磁碟過程完成;寫磁碟將按輪詢方式寫到指定作業的特定子目錄中的目錄中。

     (3) Shuffle過程在Reduce端分成三個階段:複製Map輸出、排序合併以及Reduce處理.

          1) 複製Map輸出:Map輸出檔案位於執行Map任務的tasktracker的本地磁碟;

現在,tasktracker需要為分割槽檔案執行Reduce任務;Reduce任務需要叢集上若干個Map任務的Map輸出,作為其分割槽檔案;每個Map任務的完成時間可能不同,因此只要有一個任務完成,Reduce任務就開始複製其輸出;這就是Reduce任務的複製階段。

          2) 排序合併:在Reduce複製Map的輸出結果的同時,Reduce任務進入排序合併階段;

此階段重點是合併,因為排序在map端進行;該階段的任務是將從各個MapTaskTracker上覆制的Map輸出檔案進行整合,並維持資料原來的順序.

          3) Reduce處理: Reduce端的最後階段就是對合並的檔案進行Reduce處理。

4,配置的調優

在shuffle這一過程中,完成單位任務使用時間最多的一般都是IO操作;總的原則是給shuffle過程儘量多的提供記憶體空間;但一定要保證Map函式和Reduce函式能有足夠的記憶體來執行;執行Map任務和Reduce任務的JVM,記憶體大小由mapred.child.java.opts屬性來設定。

          在map端,可以通過避免多次溢位寫磁碟來獲得最佳效能;通過合理的設定io.sort.*屬性來減少這種情況下的溢位寫次數;具體來說,如果可以,應增加io.sort.mb的值。

在reduce端,中間資料全部駐留在記憶體中,就能獲得最佳效能;一般,此情況是不可能發生的;若reduce函式的記憶體需求不大,可把mapred.inmem.merge.threshold設定為0,把mapred.job.reduce.input.buffer.percent設定為1.0,或更小值,則會帶來效能的提升。

相關推薦

hadoop知識點總結hadoop架構以及mapreduce工作機制

1,為什麼需要hadoop       資料分析者面臨的問題                資料日趨龐大,讀寫都出現效能瓶頸;                使用者的應用和分析結果,對實時性和響應時間要求越來越高;                使用的模型越來越複雜,計算量

Hadoop知識點總結

HADOOP hadoop的概念 Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力進行高速運算和儲存。 它主要有以下幾個優點: 高可靠性:Hadoop按位儲存和處理

Hadoop Core_MapReduce總結

一、 分散式計算框架 MapReduce 1、產生背景 Web2.0 時代,資料爆炸式、指數級增長,大資料分散式計算需求頻繁 通過單機記憶體擴充套件來增強計算能力,已經無法承載大規模資料量的計算 分散式計算開發和維護的複雜與多變,對程式設計師要求太高

Hadoop Core_HDFS總結

一、產生背景 傳統的本地檔案系統(單機式),在資料量增長過快、資料備份、資料安全性、操作使用便捷性上存在嚴重不足。 二、架構設計 2.1. 定義 HDFS(Hadoop Distributed File System)Hadoop分散式檔案系統。 2.2. 元件角色 1)Na

react native 知識點總結

修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v

Mybatis核心知識點總結

nfa 邏輯 efault Go 不常用 pojo code ive 圖片 一、初識Mybatis框架   mybatis是一個持久層的框架,是apache下的頂級項目。   mybatis托管到goolecode下,再後來托管到github下(https://github

Android知識點總結

1、android:layout_weight 屬性的意義 1、權重的值指的是每個部件所佔剩餘空間的大小,該值與同級部件所佔空間大小有關。 2、例如,我們定義一個權重為 2 的 View,另一個 View 的權重是 1,那麼總數就是 3;這時第一個 View 佔據 2/3 的空間,第二個佔據

關於javaweb的“網上書店”專案知識點總結

這是本人第一次寫部落格,主要記錄用java作專案的一些技術點,方便自己日後回憶。 本次java專案是傳智播客的“網上書店”專案,用的架構是 jsp + servlet +javabean,這個專案是本人的第一個專案。 以下是自己在做專案的過程中自己覺得需要注意的知識點: 一、request.

dubbo實用知識點總結

1. dubbo基礎架構 架構 特性 服務提供者 服務消費者 配置可以用dubbo.properties來替換 2. 註解配置 提供方(注意:serivce註解是dubbo的service) 消費者 3. API 服務提供者 服務消費者

IOS 知識點總結

###IOS執行緒講解 對於單核的處理器,可以把多個操作放到不同的執行緒,當用戶操作完UI之後其他後續任務在其他執行緒操作,當CPU空閒時繼續其他操作; 對於多核操作,操作任務可以分散到多個空閒的CPU中繼續執行; 一個核(CPU)可以有多個執行緒,但其實

[學習筆記]菜鳥教程Swift知識點總結

目錄基本語法資料型別變數、常量可選型別字面量運算子 基本語法 Swift 的多行註釋可以巢狀在其他多行註釋內部。寫法是在一個多行註釋塊內插入另一個多行註釋。第二個註釋塊封閉時,後面仍然接著第一個註釋塊

Javascript知識點總結

詞法結構 1、Javascript是一種區分大小的弱型別語言 2、識別符號和保留字 識別符號:變數的名字。規則:可由字母、數字、下劃線和$組成,數字不能開頭 關鍵字:Javascript語言中本身使用的名字 常見的有 var、i

Java SE基礎知識點總結

沒辦法了,從頭學起。不過還是要告誡自己戒驕戒躁,沉住氣,一步一步來,打好地基才是蓋高樓最好的捷徑!又是一部長篇連載,遂分享出來,與君共享~ 編譯、執行java程式需要經過哪些主要步驟? 編寫原始碼

C/C++面試知識點總結

目錄: 一、基礎知識     1.C/C++     2.STL     6.資料庫 一、基礎知識 1.C/C++ (1).struct大小的確定 由於記憶體對齊的原則,在32位機器上,記憶體是4位元組對齊,也就是說,不

for迴圈知識點總結

C++的for迴圈語句格式: for (initialization; test-expression; update-expression) body 1、關鍵字for與括號通常要有空格,函式名與括號之間通常省略空格。 2、迴圈步驟 1)設定初始值。C++中括號內初始化部

前端知識點總結盒子模型你是怎麼理解的?

從今天開始打算陸陸續續寫一些前端方面的知識點總結,也方便自己鞏固和複習。如果有人能看見還幫助了你,那也是極好的hhhh。分析與解答:1.盒子模型有兩種,W3C的標盒模型和IE的怪異盒模型(1)W3C定義的標準盒模型包括margin、border、padding、content

Oracle 資料庫基礎知識點總結

 1.資料庫表的完整性  ①實體完整性:靠主鍵來維護,資料唯一且不能為空 ②參照完整性:靠外來鍵來維護,主鍵表無記錄外見表則無法操作資料 ③域完整性:check()約束 not null 約

【軟考篇】--軟考知識點總結

        軟考到現在準備工作也做的差不多了,在做選擇題的過程中,發現了一些自己的薄弱點,總是愛出錯的幾個點, 這裡稍微進行一下總結。        編譯程式和解釋程式        編譯程式

面經知識點總結

目錄 1、$(document).ready和window.onload的區別 前者是DOM樹載入完畢就執行,不必等待頁面中圖片或其他外部檔案都載入完畢,並且可以寫多個ready 後者是頁面所有元素都載入完畢,包括圖片等所有元素,並且只能執行

python高階知識點總結

一、什麼是檢視?-- 通俗的講,檢視就是一條SELECT語句執行後返回的結果集。-- 所以我們在建立檢視的時候,主要的工作就落在建立這條SQL查詢語句上。-- 檢視的特點-- 檢視是對若干張基本表的引用,一張虛表,查詢語句執行的結果,-- 不儲存具體的資料(基本表資料發生了改