就目前來(lái)說(shuō)Hadoop已經(jīng)成為處理大數(shù)據(jù)的問(wèn)題的必備的組件把鉴,許多的大廠都已經(jīng)在使用Hadoop軟件棧處理自己的問(wèn)題归园,那為什么Hadoop技術(shù)棧這么流行?
其實(shí)不外乎幾個(gè)原因:首先Hadoop是完全開(kāi)源的廊遍,雖然Oracle也可以搭建集群但是畢竟Oracle不是開(kāi)源的踪旷,其次是當(dāng)數(shù)據(jù)量大的時(shí)候Oracle的計(jì)算也會(huì)變得很慢。其次是Hadoop的社區(qū)比較活躍衙解,這樣解決問(wèn)題的成本就會(huì)很低阳柔,因?yàn)楹芸赡芤恍﹩?wèn)題早已經(jīng)被別人解決了。最后是Hadoop已經(jīng)被很多企業(yè)投入使用蚓峦,有了實(shí)戰(zhàn)的經(jīng)驗(yàn)舌剂,同時(shí)Hadoop有很廣泛的大數(shù)據(jù)解決面。
Hadoop1.0和Hadoop2.0
要學(xué)習(xí)hadoop首先就要認(rèn)識(shí)Hadoop的版本問(wèn)題暑椰,因?yàn)榫W(wǎng)上很多資料都是很混淆的霍转,有的介紹的其實(shí)是Hadoop1.0的問(wèn)題,有的資料都搞混Hadoop1.0與Hadoop2.0,這對(duì)學(xué)習(xí)很不利一汽。
首先我們應(yīng)該知道Hadoop1.0最大的問(wèn)題是單點(diǎn)故障問(wèn)題
Hadoop2.0就是針對(duì)Hadoop1.0的問(wèn)題進(jìn)行解決與優(yōu)化谴忧。根據(jù)上圖我們知道,Hadoop1.0只支持單一的計(jì)算模型MapReduce,Hadoop2.0加入Yarn資源調(diào)度器角虫,可以支持多種類(lèi)型的計(jì)算模型沾谓,Yarn同時(shí)可以給不同的計(jì)算任務(wù)進(jìn)行計(jì)算資源的分配。
Hadoop2.0
- HDFS 主要提供了分布式存儲(chǔ)系統(tǒng)戳鹅,供了高可靠性均驶、高擴(kuò)展性和高吞吐率的數(shù)據(jù)存儲(chǔ)服務(wù),同時(shí)基于對(duì)數(shù)據(jù)的操作基本屬于順序讀取的流式讀取枫虏,并且Hadoop可以承載草大文件的存儲(chǔ)妇穴。
- Yarn 主要負(fù)責(zé)集群的資源的管理,同時(shí)也可以進(jìn)行資源的分配隶债。
- Mapreduce分布式計(jì)算框架,具有易于編程腾它、高容錯(cuò)性和高擴(kuò)展性等優(yōu)點(diǎn).
HDFS
HDFS的基本原理,就是將大文件切分為同樣大小的數(shù)據(jù)塊(128MB),進(jìn)行冗余(3份)存儲(chǔ)在不同的機(jī)器上死讹。同時(shí)調(diào)控集群的負(fù)載均衡瞒滴。
如上圖所示,在Hadoop2.0中Namenode節(jié)點(diǎn)有兩個(gè)為了解決但節(jié)點(diǎn)故障問(wèn)題赞警,不過(guò)現(xiàn)在的備份節(jié)點(diǎn)是屬于靜態(tài)綁定妓忍,如果兩個(gè)節(jié)點(diǎn)都故障,就不得使用冷啟動(dòng)方式啟動(dòng)愧旦。
Yarn
了解Hadoop1.0的一定知道其是通過(guò)JobTracker和TaskTracker進(jìn)行任務(wù)與資源的分配世剖,但是也存在單節(jié)點(diǎn)故障的問(wèn)題。Yarn目前很復(fù)雜笤虫,但目前也符合主/從的模式旁瘫,由上圖知祖凫,ResourceManager管理著NodeManage從節(jié)點(diǎn)。具有良好的擴(kuò)展性和高可用性酬凳。
MapReduce
上圖是MapReduce計(jì)算的過(guò)程蝙场,主要分為input,splitting,Mapping,shuffing,Reducing,output五個(gè)過(guò)程。但是其他復(fù)雜過(guò)程都被封裝了粱年,我們只需要進(jìn)行編寫(xiě)Mapping和Reducing的過(guò)程售滤。
Hadoop生態(tài)系統(tǒng)
Hive
最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問(wèn)題,其是構(gòu)建在HDFS數(shù)據(jù)倉(cāng)庫(kù)上的,其底層就是MapReduce計(jì)算實(shí)現(xiàn)台诗。Hive定義了一種HiveQL語(yǔ)言完箩,可以使Hive通過(guò)簡(jiǎn)單的類(lèi)SQL語(yǔ)句實(shí)現(xiàn)MapReduce程序。
SELECT word, COUNT(*) FROM doc LATERAL VIEW explode(split(text, ' ')) lTable
as word GROUP BY word;
pig
pig與hive類(lèi)似拉队,但是pig不管數(shù)據(jù)是不是關(guān)系型的弊知,有無(wú)元數(shù)據(jù),是否嵌套都可以進(jìn)行操作粱快,而且pig也可以在其他平臺(tái)上進(jìn)行使用秩彤。
定義了一種數(shù)據(jù)流語(yǔ)言——Pig Latin
① 加載數(shù)據(jù) input = load ‘/input/data’ as (line:chararray);
② 將字符串分割成單詞 words = foreach input generate flatten(TOKENIZE(line)) as word;
③ 對(duì)單詞進(jìn)行分組 grpd = group words by word;
④ 統(tǒng)計(jì)每組中單詞數(shù)量 cntd = foreach grpd generate group, COUNT(words);
⑤ 打印結(jié)果 dump cntd;
Mahout
基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的分布 式計(jì)算框架
mahout主要包含以下5部分
頻繁挖掘模式:挖掘數(shù)據(jù)中頻繁出現(xiàn)的項(xiàng)集。
聚類(lèi):將諸如文本事哭、文檔之類(lèi)的數(shù)據(jù)分成局部相關(guān)的組漫雷。
分類(lèi):利用已經(jīng)存在的分類(lèi)文檔訓(xùn)練分類(lèi)器,對(duì)未分類(lèi)的文檔進(jìn)行分類(lèi)鳍咱。
推薦引擎(協(xié)同過(guò)濾):獲得用戶(hù)的行為并從中發(fā)現(xiàn)用戶(hù)可能喜歡的事物降盹。
頻繁子項(xiàng)挖掘:利用一個(gè)項(xiàng)集(查詢(xún)記錄或購(gòu)物記錄)去識(shí)別經(jīng)常一起出現(xiàn)的項(xiàng)目。
Hbase
Table:表:類(lèi)似于傳統(tǒng)傳統(tǒng)數(shù)據(jù)庫(kù)中的表
Column Family:列簇:Table在水平方向有一個(gè)或者多個(gè)
Column Family 組成
一個(gè)Column Family中可以由任意多個(gè)Column組 成
Row Key: 行鍵 ?Table的主鍵 ?Table中的記錄按照Row Key排序 ?Timestamp: 時(shí)間戳
每行數(shù)據(jù)均對(duì)應(yīng)一個(gè)時(shí)間戳 ?版本號(hào)
Client:
包含訪問(wèn)HBase的接口谤辜,并維護(hù)cache來(lái)加快對(duì)HBase的訪問(wèn)蓄坏。說(shuō)白了,就是用來(lái)訪問(wèn)HBase的客戶(hù)端丑念。
HMaster:
這個(gè)東西是HBase的主節(jié)點(diǎn)涡戳,用來(lái)協(xié)調(diào)Client端應(yīng)用程序和HRegionServer的關(guān)系,管理分配HRegion給HRegionserver服務(wù)器脯倚。
HRegionServer:
Hbase的從節(jié)點(diǎn)渔彰,管理當(dāng)前自己這臺(tái)服務(wù)器上面的HRegion,HRegion是Hbase表的基礎(chǔ)單元組建挠将,存儲(chǔ)了分布式的表胳岂。HRegionserver負(fù)責(zé)切分在運(yùn)行過(guò)程中變得過(guò)大的HRegion编整。
HRegion:
一個(gè)Table可以有多個(gè)HRegion舔稀,HBase使用rowKey將表水平切割成多個(gè)HRegion,每個(gè)HRegion都紀(jì)錄了它的StartKey和EndKey(第一個(gè)HRegion的StartKey為空掌测,最后一個(gè)HRegion的EndKey為空)内贮,由于RowKey是排序的产园,因而Client可以通過(guò)HMaster快速的定位每個(gè)RowKey在哪個(gè)HRegion中。HRegion由HMaster分配到相應(yīng)的HRegionServer中夜郁,然后由HRegionServer負(fù)責(zé)HRegion的啟動(dòng)和管理什燕,和Client的通信,負(fù)責(zé)數(shù)據(jù)的讀(使用HDFS)竞端。每個(gè)HRegionServer可以同時(shí)管理1000個(gè)左右的HRegion屎即,出處請(qǐng)參看論文:BigTable(5 Implementation節(jié)):Each tablet server manages a set of tablets(typically we have somewhere between ten to a thousand tablets per tablet server))。
MemStore:
它是一個(gè)寫(xiě)緩存事富,數(shù)據(jù)先WAL[write ahead log](也就是HLog它是一個(gè)二進(jìn)制文件技俐,所有寫(xiě)操作都會(huì)先保證將數(shù)據(jù)寫(xiě)入這個(gè)Log文件后,才會(huì)真正更新MemStore统台,最后寫(xiě)入HFile中)雕擂,在寫(xiě)入MemStore后,由MemStore根據(jù)一定的算法將數(shù)據(jù)Flush到底層HDFS文件中(HFile)贱勃,一般而言井赌,對(duì)于每個(gè)HRegion中的每個(gè)Column Family來(lái)說(shuō),有一個(gè)自己的MemStore贵扰。
StoreFile:
1個(gè)HStore仇穗,由一個(gè)MemStore和0~N個(gè)StoreFile組成。
HFile:
用于存儲(chǔ)HBase的數(shù)據(jù)(Cell/KeyValue)戚绕,在HFile中的數(shù)據(jù)是按RowKey仪缸、Column Family、Column排序列肢,對(duì)于相同的數(shù)據(jù)單元恰画,排序則按照時(shí)間戳(Timestamp)倒敘排列。
Zookeeper:
HBase內(nèi)置有zookeeper瓷马,但一般我們會(huì)有其他的Zookeeper集群來(lái)監(jiān)管master和regionserver拴还,Zookeeper通過(guò)選舉,保證任何時(shí)候欧聘,集群中只有一個(gè)活躍的HMaster片林,HMaster與HRegionServer 啟動(dòng)時(shí)會(huì)向ZooKeeper注冊(cè),存儲(chǔ)所有HRegion的尋址入口怀骤,實(shí)時(shí)監(jiān)控HRegionserver的上線和下線信息费封。并實(shí)時(shí)通知給HMaster,存儲(chǔ)HBase的schema和table元數(shù)據(jù)蒋伦,默認(rèn)情況下弓摘,HBase 管理ZooKeeper 實(shí)例,Zookeeper的引入使得HMaster不再是單點(diǎn)故障痕届。一般情況下會(huì)啟動(dòng)兩個(gè)HMaster韧献,非Active的HMaster會(huì)定期的和Active HMaster通信以獲取其最新?tīng)顟B(tài)末患,從而保證它是實(shí)時(shí)更新的,因而如果啟動(dòng)了多個(gè)HMaster反而增加了Active HMaster的負(fù)擔(dān)锤窑。
Zookeeper
Zookeeper本質(zhì)上是一個(gè)MapReduce程序璧针。
連接Hadoop與傳統(tǒng)數(shù)據(jù)庫(kù)之間的橋梁 支持多種數(shù)據(jù)庫(kù),包括MySQL渊啰、DB2等 插拔式探橱,用戶(hù)可根據(jù)需要支持新的數(shù)據(jù)庫(kù) 本質(zhì)上是一個(gè)MapReduce程序 充分利用了MR分布式并行的特點(diǎn),充分利用MR容錯(cuò)性
Oozie
如何對(duì)這些框架和作業(yè)進(jìn)行統(tǒng)一管理和調(diào)度?
不同作業(yè)之間存在依賴(lài)關(guān)系(DAG)绘证;
周期性作業(yè)
定時(shí)執(zhí)行的作業(yè)
作業(yè)執(zhí)行狀態(tài)監(jiān)控與報(bào)警(發(fā)郵件走搁、短信等)
開(kāi)源版本
Apache Hadoop
CDH
HDP
建議選擇公司發(fā)行版,比如CDH或HDP
不用考慮不同軟件間的版本匹配