1.關(guān)于MapReduce:
map函數(shù):
reduce函數(shù):
combiner(合并函數(shù)):在reduce函數(shù)處理前,提前處理map函數(shù)產(chǎn)生的數(shù)據(jù)
2.Hadoop分布式文件系統(tǒng)(Hadoop Distributed Filesystem):
HDFS以流式數(shù)據(jù)訪問模式來(lái)存儲(chǔ)超大文件,運(yùn)行與商用硬件集群上。
3.Hadoop I/O:
A.保證HDFS存儲(chǔ)的數(shù)據(jù)的完整性
B.進(jìn)行文件壓縮,有兩大好處:一是減少存儲(chǔ)文件所需要的空間;二是加速數(shù)據(jù)在網(wǎng)絡(luò)上和磁盤上的傳輸。
C.序列化:指將結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)牛,以便在網(wǎng)絡(luò)上傳輸或?qū)懙酱疟P進(jìn)行永久存儲(chǔ)。序列化在分布式數(shù)據(jù)處理的兩大領(lǐng)域經(jīng)常出現(xiàn):進(jìn)程間通信和永久存儲(chǔ)。Hadoop擁有自己的序列化格式Writable。
D基于文件的數(shù)據(jù)結(jié)構(gòu):對(duì)于某些應(yīng)用,需要特殊的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)自己的數(shù)據(jù)。所以Hadoop開發(fā)了SequencFile組件幫助開發(fā)人員對(duì)小文件的存儲(chǔ)實(shí)現(xiàn)符合需求的數(shù)據(jù)結(jié)構(gòu)。
4.MapReduce 應(yīng)用開發(fā):
利用MapReduce編寫程序流程:a.編寫map函數(shù)和reduce函數(shù),最好使用單元測(cè)試來(lái)確保函數(shù)的運(yùn)行符合預(yù)期 b.寫一個(gè)驅(qū)動(dòng)程序來(lái)運(yùn)行作業(yè),使用小型數(shù)據(jù)集測(cè)試驅(qū)動(dòng)程序能不能正常運(yùn)行,同時(shí)以此來(lái)調(diào)試mapper和reducer。c.程序通過小型數(shù)據(jù)集的測(cè)試后,可準(zhǔn)備運(yùn)行到集群上。這時(shí)程序會(huì)暴露出許多問題,可以Hadoop提供的IsolationRunner進(jìn)行調(diào)試。 ? ?d.程序正確運(yùn)行后,進(jìn)行優(yōu)化調(diào)整。首先要執(zhí)行一些標(biāo)志檢查,借此加快MapReduce的運(yùn)行,然后做一些任務(wù)剖析。Hadoop提供了鉤子來(lái)輔助分析過程。
5.Hadoop相關(guān)高級(jí)組件:
A.Pig:它是一種探索大規(guī)模數(shù)據(jù)集的腳本語(yǔ)言,它為大型數(shù)據(jù)集的處理提供了更高層次的抽象。MapReduce的一個(gè)缺點(diǎn)是開發(fā)周期過程,數(shù)據(jù)處理需要多個(gè)MapReduce過程才能實(shí)現(xiàn),而Pig進(jìn)行了高度封裝,幫助程序員關(guān)注業(yè)務(wù)。
B.Hive:它是一個(gè)構(gòu)建在Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)框架,是應(yīng)FB每天產(chǎn)生的海量網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行管理和機(jī)器學(xué)習(xí)的需求而產(chǎn)生的和發(fā)展的。它的設(shè)計(jì)目的是讓精通SQL技能的分析師能夠在大規(guī)模數(shù)據(jù)集上運(yùn)行查詢。
C. HBase:它是一個(gè)在HDFS上開發(fā)的面向列的分布式數(shù)據(jù)庫(kù),如果需要實(shí)時(shí)地隨機(jī)讀/寫超大規(guī)模數(shù)據(jù)集,就可以使用HBase這一Hadoop應(yīng)用。
D. ZooKeeper:它是Hadoop的分布式協(xié)調(diào)服務(wù),可提供一組工具,使你在構(gòu)建分布式應(yīng)用時(shí)能夠?qū)Σ糠质∵M(jìn)行爭(zhēng)取處理。部分失敗指的是當(dāng)一條消息在網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)之間傳送時(shí),如果出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤,發(fā)送者無(wú)法知道接受者是否已經(jīng)收到這個(gè)消息。接受者可能在出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤之前就已經(jīng)收到這條信息,也有可能沒有收到,又或接受者的進(jìn)程已經(jīng)死掉。發(fā)送者能夠獲得真實(shí)情況的唯一途徑就是重新連接接受者,并向它發(fā)出詢問。這就是部分失?。杭次覀兩踔敛恢酪粋€(gè)操作是否已經(jīng)失敗。
E.開源工具Sqoop: