Hadoop概論淺學(xué)

Hadoop生態(tài)圈

這里寫圖片描述

可以把hadoop想象成一個很大的生態(tài)圈(本來就是),或者說想象成一個動物園吧,之后的東西就比較好理解了个榕。(我也不知道為啥python的教程一般都是動物做封面忠烛,難道已經(jīng)暗喻加入了動物園生態(tài)圈了坯墨?)


HDFS

HDFS(Hadoop Distributed File System)是一個分布式文件系統(tǒng)寂汇,是谷歌的GFS山寨版本。它具有高容錯性并提供了高吞吐量的數(shù)據(jù)訪問捣染,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用健无,它提供了一個高度容錯性和高吞吐量的海量數(shù)據(jù)存儲解決方案。

  • 高吞吐量訪問:HDFS的每個Block分布在不同的Rack上液斜,在用戶訪問時累贤,HDFS會計算使用最近和訪問量最小的服務(wù)器給用戶提供。由于Block在不同的Rack上都有備份少漆,所以不再是單數(shù)據(jù)訪問臼膏,所以速度和效率是非常快的示损。另外HDFS可以并行從服務(wù)器集群中讀寫渗磅,增加了文件讀寫的訪問帶寬。
  • 高容錯性:系統(tǒng)故障是不可避免的检访,如何做到故障之后的數(shù)據(jù)恢復(fù)和容錯處理是至關(guān)重要的始鱼。HDFS通過多方面保證數(shù)據(jù)的可靠性,多份復(fù)制并且分布到物理位置的不同服務(wù)器上脆贵,數(shù)據(jù)校驗功能医清、后臺的連續(xù)自檢數(shù)據(jù)一致性功能都為高容錯提供了可能。
  • 線性擴(kuò)展:因為HDFS的Block信息存放到NameNode上卖氨,文件的Block分布到DataNode上会烙,當(dāng)擴(kuò)充的時候僅僅添加DataNode數(shù)量,系統(tǒng)可以在不停止服務(wù)的情況下做擴(kuò)充筒捺,不需要人工干預(yù)柏腻。

HDFS架構(gòu)

這里寫圖片描述
  • NameNode:在Hadoop1.X中只有一個Master節(jié)點,管理HDFS的名稱空間和數(shù)據(jù)塊映射信息系吭、配置副本策略和處理客戶端請求五嫂;
  • Secondary NameNode:輔助NameNode,分擔(dān)NameNode工作肯尺,定期合并fsimage和fsedits并推送給NameNode沃缘,緊急情況下可輔助恢復(fù)NameNode;
  • DataNode:Slave節(jié)點蟆盹,實際存儲數(shù)據(jù)孩灯、執(zhí)行數(shù)據(jù)塊的讀寫并匯報存儲信息給NameNode闺金;

MapReduce

MapReduce 是現(xiàn)今一個非常流行的分布式計算框架逾滥,它被設(shè)計用于并行計算海量數(shù)據(jù)。MapReduce 框架的核心步驟主要分兩部分:Map 和Reduce。當(dāng)你向MapReduce 框架提交一個計算作業(yè)時寨昙,它會首先把計算作業(yè)拆分成若干個Map 任務(wù)讥巡,然后分配到不同的節(jié)點上去執(zhí)行,每一個Map 任務(wù)處理輸入數(shù)據(jù)中的一部分舔哪,當(dāng)Map 任務(wù)完成后欢顷,它會生成一些中間文件,這些中間文件將會作為Reduce 任務(wù)的輸入數(shù)據(jù)捉蚤。Reduce 任務(wù)的主要目標(biāo)就是把前面若干個Map 的輸出匯總到一起并輸出抬驴。從高層抽象來看,MapReduce的數(shù)據(jù)流圖如下圖所示:

這里寫圖片描述

MapReduce流程圖

這里寫圖片描述

MapReduce工作流程

  • 在集群中的任意一個節(jié)點提交MapReduce程序
  • JobClient收到作業(yè)后缆巧,JobClient向JobTracker請求獲取一個Job ID
  • 將運行作業(yè)所需要的資源文件復(fù)制到HDFS上(包括MapReduce程序打包的JAR文件布持、配置文件和客戶端計算所得的輸入劃分信息),這些文件都存放在JobTracker專門為該作業(yè)創(chuàng)建的文件夾中陕悬,文件夾名為該作業(yè)的Job ID
  • 獲得作業(yè)ID后题暖,提交作業(yè)
  • .JobTracker接收到作業(yè)后,將其放在一個作業(yè)隊列里捉超,等待作業(yè)調(diào)度器對其進(jìn)行調(diào)度胧卤,當(dāng)作業(yè)調(diào)度器根據(jù)自己的調(diào)度算法調(diào)度到該作業(yè)時,會根據(jù)輸入劃分信息為每個劃分創(chuàng)建一個map任務(wù)拼岳,并將map任務(wù)分配給TaskTracker執(zhí)行
  • 對于map和reduce任務(wù)枝誊,TaskTracker根據(jù)主機(jī)核的數(shù)量和內(nèi)存的大小有固定數(shù)量的map槽和reduce槽。這里需要強(qiáng)調(diào)的是:map任務(wù)不是隨隨便便地分配給某個TaskTracker的惜纸,這里有個概念叫:數(shù)據(jù)本地化(Data-Local)侧啼。意思是:將map任務(wù)分配給含有該map處理的數(shù)據(jù)塊的TaskTracker上,同時將程序JAR包復(fù)制到該TaskTracker上來運行堪簿,這叫“運算移動痊乾,數(shù)據(jù)不移動”
  • TaskTracker每隔一段時間會給JobTracker發(fā)送一個心跳,告訴JobTracker它依然在運行椭更,同時心跳中還攜帶著很多的信息哪审,比如當(dāng)前map任務(wù)完成的進(jìn)度等信息。當(dāng)JobTracker收到作業(yè)的最后一個任務(wù)完成信息時虑瀑,便把該作業(yè)設(shè)置成“成功”湿滓。當(dāng)JobClient查詢狀態(tài)時,它將得知任務(wù)已完成舌狗,便顯示一條消息給用戶
  • 運行的TaskTracker從HDFS中獲取運行所需要的資源叽奥,這些資源包括MapReduce程序打包的JAR文件、配置文件和客戶端計算所得的輸入劃分等信息
  • TaskTracker獲取資源后啟動新的JVM虛擬機(jī)
  • 運行每一個任務(wù)

補(bǔ)充

  • JobTracker:是一個后臺服務(wù)進(jìn)程痛侍,啟動之后朝氓,會一直監(jiān)聽并接收來自各個TaskTracker發(fā)送的心跳信息,包括資源使用情況和任務(wù)運行情況等信息。在hadoop中每個應(yīng)用程序被表示成一個作業(yè)赵哲,每個作業(yè)又被分成多個任務(wù)待德,JobTracker的作業(yè)控制模塊則負(fù)責(zé)作業(yè)的分解和狀態(tài)監(jiān)控(主要包括TaskTracker狀態(tài)監(jiān)控、作業(yè)狀態(tài)監(jiān)控和任務(wù)狀態(tài)監(jiān)控)枫夺。

Map過程:

Step1:每個輸入分片會讓一個map任務(wù)來處理将宪,默認(rèn)情況下,以HDFS的一個塊的大邢鹋印(默認(rèn)為64M)為一個分片较坛,當(dāng)然我們也可以設(shè)置塊的大小。map輸出的結(jié)果會暫且放在一個環(huán)形內(nèi)存緩沖區(qū)中(該緩沖區(qū)的大小默認(rèn)為100M扒最,由io.sort.mb屬性控制)燎潮,當(dāng)該緩沖區(qū)快要溢出時(默認(rèn)為緩沖區(qū)大小的80%,由io.sort.spill.percent屬性控制)扼倘,會在本地文件系統(tǒng)中創(chuàng)建一個溢出文件确封,將該緩沖區(qū)中的數(shù)據(jù)寫入這個文件;

Step2:在寫入磁盤之前再菊,線程首先根據(jù)reduce任務(wù)的數(shù)目將數(shù)據(jù)劃分為相同數(shù)目的分區(qū)爪喘,也就是一個reduce任務(wù)對應(yīng)一個分區(qū)的數(shù)據(jù)。這樣做是為了避免有些reduce任務(wù)分配到大量數(shù)據(jù)纠拔,而有些reduce任務(wù)卻分到很少數(shù)據(jù)秉剑,甚至沒有分到數(shù)據(jù)的尷尬局面。其實分區(qū)就是對數(shù)據(jù)進(jìn)行hash的過程稠诲。然后對每個分區(qū)中的數(shù)據(jù)進(jìn)行排序侦鹏,如果此時設(shè)置了Combiner,將排序后的結(jié)果進(jìn)行Combia操作臀叙,這樣做的目的是讓盡可能少的數(shù)據(jù)寫入到磁盤略水;

Step3:當(dāng)map任務(wù)輸出最后一個記錄時,可能會有很多的溢出文件劝萤,這時需要將這些文件合并渊涝,目的是為了盡量減少每次寫入磁盤的數(shù)據(jù)量和盡量減少下一復(fù)制階段網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。


Reduce過程

Step1:Reduce會接收到不同map任務(wù)傳來的數(shù)據(jù)床嫌,并且每個map傳來的數(shù)據(jù)都是有序的跨释。如果reduce端接受的數(shù)據(jù)量相當(dāng)小,則直接存儲在內(nèi)存中(緩沖區(qū)大小由mapred.job.shuffle.input.buffer.percent屬性控制厌处,表示用作此用途的堆空間的百分比)鳖谈,如果數(shù)據(jù)量超過了該緩沖區(qū)大小的一定比例(由mapred.job.shuffle.merge.percent決定),則對數(shù)據(jù)合并后溢寫到磁盤中阔涉;

Step2:隨著溢寫文件的增多缆娃,后臺線程會將它們合并成一個更大的有序的文件捷绒,這樣做是為了給后面的合并節(jié)省時間。其實不管在map端還是reduce端龄恋,MapReduce都是反復(fù)地執(zhí)行排序疙驾,合并操作凶伙;

Step3:合并的過程中會產(chǎn)生許多的中間文件(寫入磁盤了)郭毕,但MapReduce會讓寫入磁盤的數(shù)據(jù)盡可能地少,并且最后一次合并的結(jié)果并沒有寫入磁盤函荣,而是直接輸入到reduce函數(shù)显押。


Hive

Hive是Facebook開發(fā)的構(gòu)建于Hadoop集群之上的數(shù)據(jù)倉庫應(yīng)用,它提供了類似于SQL語法的HQL語句作為數(shù)據(jù)訪問接口傻挂,這使得普通分析人員的應(yīng)用Hadoop的學(xué)習(xí)曲線變小乘碑。

  • Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表金拒,并使用sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運行兽肤。其優(yōu)點是學(xué)習(xí)成本低,可以通過類SQL語句快速實現(xiàn)簡單的MapReduce統(tǒng)計绪抛,不必開發(fā)專門的MapReduce應(yīng)用资铡,十分適合數(shù)據(jù)倉庫的統(tǒng)計分析
  • Hive是建立在 Hadoop 上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。它提供了一系列的工具幢码,可以用來進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL)笤休,這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規(guī)模數(shù)據(jù)的機(jī)制症副。Hive 定義了簡單的類 SQL 查詢語言店雅,稱為 HQL,它允許熟悉 SQL 的用戶查詢數(shù)據(jù)贞铣。同時闹啦,這個語言也允許熟悉 MapReduce 開發(fā)者的開發(fā)自定義的 Mapper 和 Reducer 來處理內(nèi)建的Mapper 和Reducer 無法完成的復(fù)雜的分析工作。

HIve架構(gòu)

這里寫圖片描述

客戶端組件

  • CLI:command line interface辕坝,啟動的時候會同時啟動一個Hive副本亥揖,Client是Hive的客戶端,用戶連接至Hive Server圣勒。在啟動 Client模式的時候费变,需要指出Hive Server所在節(jié)點,并且在該節(jié)點啟動Hive Server圣贸。--hive shell
  • WUI:用戶接口挚歧,通過瀏覽器訪問Hive。
  • JDBC/ODBC:開放的API客戶端吁峻。--(java 訪問hive)

服務(wù)端組件

  • Thrift服務(wù):thrift是facebook開發(fā)的一個軟件框架滑负,它用來進(jìn)行可擴(kuò)展且跨語言的服務(wù)的開發(fā)在张,Hive集成了該服務(wù),能讓不同的編程語言調(diào)用hive的接口矮慕。
  • Metastore組件:元數(shù)據(jù)服務(wù)組件帮匾,這個組件存儲Hive的元數(shù)據(jù),Hive的元數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫里痴鳄,Hive支持的關(guān)系數(shù)據(jù)庫有derby和mysql瘟斜。元數(shù)據(jù)對于Hive十分重要,因此Hive支持把metastore服務(wù)獨立出來痪寻,安裝到遠(yuǎn)程的服務(wù)器集群里螺句,從而解耦Hive服務(wù)和metastore服務(wù),保證Hive運行的健壯性橡类。
  • Driver組件:該組件包括Complier蛇尚、Optimizer和Executor,它的作用是將HiveQL(類SQL)語句進(jìn)行解析顾画、編譯優(yōu)化取劫,生成執(zhí)行計劃,然后調(diào)用底層的mapreduce計算框架研侣。

HBase

Hadoop Database谱邪,是一個高可靠性、高性能义辕、面向列虾标、可伸縮的分布式存儲系統(tǒng),利用HBase技術(shù)可在廉價PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲集群灌砖。Google運行MapReduce來處理Bigtable中的海量數(shù)據(jù)璧函,HBase同樣利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù);Google Bigtable利用 Chubby作為協(xié)同服務(wù)基显,HBase利用Zookeeper作為對應(yīng)蘸吓。

這里寫圖片描述

Pig

一種操作hadoop的輕量級腳本語言,是一種數(shù)據(jù)流語言撩幽,用來快速輕松的處理巨大的數(shù)據(jù)库继。Pig可以非常方便的處理HDFS和HBase的數(shù)據(jù),和Hive一樣,Pig可以非常高效的處理其需要做的窜醉,通過直接操作Pig查詢可以節(jié)省大量的勞動和時間宪萄。當(dāng)你想在你的數(shù)據(jù)上做一些轉(zhuǎn)換,并且不想編寫MapReduce jobs就可以用Pig.

這里寫圖片描述

Hive .vs Pig

  1. Hive更適合于數(shù)據(jù)倉庫的任務(wù)榨惰,Hive主要用于靜態(tài)的結(jié)構(gòu)以及需要經(jīng)常分析的工作拜英。Hive與SQL相似促使 其成為Hadoop與其他BI工具結(jié)合的理想交集。
  2. Pig賦予開發(fā)人員在大數(shù)據(jù)集領(lǐng)域更多的靈活性琅催,并允許開發(fā)簡潔的腳本用于轉(zhuǎn)換數(shù)據(jù)流以便嵌入到較大的 應(yīng)用程序居凶。
  3. Pig相比Hive相對輕量虫给,它主要的優(yōu)勢是相比于直接使用Hadoop Java APIs可大幅削減代碼量。正因為如此侠碧,Pig仍然是吸引大量的軟件開發(fā)人員抹估。
  4. Hive和Pig都可以與HBase組合使用,Hive和Pig還為HBase提供了高層語言支持弄兜,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計處理變的非常簡單.

Hive .vs Hbase

  1. Hive是建立在Hadoop之上為了減少MapReduce jobs編寫工作的批處理系統(tǒng)药蜻,HBase是為了支持彌補(bǔ)Hadoop對實時操作的缺陷的項目 。
  2. 想象你在操作RMDB數(shù)據(jù)庫挨队,如果是全表掃描谷暮,就用Hive+Hadoop,如果是索引訪問蒿往,就用HBase+Hadoop.
  3. Hive query就是MapReduce jobs可以從5分鐘到數(shù)小時不止盛垦,HBase是非常高效的,肯定比Hive高效的多瓤漏。

Mahout

Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目腾夯,提供一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序蔬充。AMahout包含許多實現(xiàn)蝶俱,包括聚類、分類饥漫、推薦過濾榨呆、頻繁子項挖掘。此外庸队,通過使用 Apache Hadoop 庫积蜻,Mahout 可以有效地擴(kuò)展到云中。

這里寫圖片描述
這里寫圖片描述

Zookeeper

Zookeeper 作為 Hadoop 項目中的一個子項目彻消,一個分布式的服務(wù)框架竿拆,主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題,是 Hadoop 集群管理的一個必不可少的模塊宾尚,它主要用來控制集群中的數(shù)據(jù)丙笋,如它管理 Hadoop 集群中的NameNode,還有 Hbase 中 Master Election煌贴、Server 之間狀態(tài)同步等御板。

這里寫圖片描述

Oozie

Oozie是一個工作流引擎服務(wù)器,用于運行Hadoop Map/Reduce和Pig 任務(wù)工作流.同時Oozie還是一個Java Web程序,運行在Java Servlet容器中,如Tomcat.

這里寫圖片描述

最后

至此,hadoop的生態(tài)圈介紹的差不多了牛郑,對于想深入的話怠肋,這些是遠(yuǎn)遠(yuǎn)不夠的,我這個只是為了吃早飯的時候井濒,可以看一下灶似,記一下各個部分功能大體列林,也算是一種初步了解,希望對你也有些幫助


致謝

@yeruby--對MapReduce過程的理解
@石山園--Hadoop入門進(jìn)階課程5
@石山園--Hadoop入門進(jìn)階課程8
@lifuxiangcaohui--Hive總結(jié)(九)Hive體系結(jié)構(gòu)
@天戈朱--Hive(一):架構(gòu)及知識體系
@u011308691--Hive初識功能架構(gòu)
@轉(zhuǎn)--JobTracker和TaskTracker概述
@zhoubl668--Mahout推薦算法API詳解
@轉(zhuǎn)--分布式服務(wù)框架 Zookeeper
@清霧沁仙--Hadoop Oozie 學(xué)習(xí)筆記(六) Hadoop Oozie概述

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪惭,一起剝皮案震驚了整個濱河市希痴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌春感,老刑警劉巖砌创,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲫懒,居然都是意外死亡嫩实,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門窥岩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甲献,“玉大人,你說我怎么就攤上這事颂翼』稳鳎” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵朦乏,是天一觀的道長球及。 經(jīng)常有香客問我,道長呻疹,這世上最難降的妖魔是什么吃引? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮刽锤,結(jié)果婚禮上镊尺,老公的妹妹穿的比我還像新娘。我一直安慰自己姑蓝,他們只是感情好鹅心,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纺荧,像睡著了一般旭愧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宙暇,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天输枯,我揣著相機(jī)與錄音,去河邊找鬼占贫。 笑死桃熄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的型奥。 我是一名探鬼主播瞳收,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼碉京,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了螟深?” 一聲冷哼從身側(cè)響起谐宙,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎界弧,沒想到半個月后凡蜻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡垢箕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年划栓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片条获。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡忠荞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出月匣,到底是詐尸還是另有隱情钻洒,我是刑警寧澤奋姿,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布锄开,位于F島的核電站,受9級特大地震影響称诗,放射性物質(zhì)發(fā)生泄漏萍悴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一寓免、第九天 我趴在偏房一處隱蔽的房頂上張望癣诱。 院中可真熱鬧,春花似錦袜香、人聲如沸撕予。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实抡。三九已至,卻和暖如春欢策,著一層夾襖步出監(jiān)牢的瞬間吆寨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工踩寇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留啄清,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓俺孙,卻偏偏與公主長得像辣卒,于是被迫代替她去往敵國和親掷贾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容