版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
大數(shù)據(jù)技術導論第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.1
認識Hadoop2.2
HDFS2.3
MapReduce2.4
zookeeper1.3.2數(shù)據(jù)存儲技術分布式數(shù)據(jù)庫Bigtable分布式文件系統(tǒng)GFS分布式并行處理技術MapreduceHDFSHBaseMapReduce2.1認識hadoop第二章大數(shù)據(jù)生態(tài)系統(tǒng)1.1.1大數(shù)據(jù)產生歷史必然——谷歌三駕馬車2.1認識hadoop第二章大數(shù)據(jù)生態(tài)系統(tǒng)第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2
HDFS2.1認識Hadoop2.3
MapReduce2.4
zookeeper2.2.1HDFS體系結構2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.1HDFS體系結構2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.1HDFS體系結構2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)(1)HDFS=1個NameNode+1個SecondaryNameNode+多個DataNode;(2)NameNode稱為名稱節(jié)點、命名空間、主節(jié)點、元數(shù)據(jù)節(jié)點,主要存放元數(shù)據(jù)(meta);賬本。(3)SecondaryNameNode稱為從元數(shù)據(jù)節(jié)點,是命名空間的冷備份(Namenode秘書),高可用(HA)解決方案,HDFS2.0采用另外一種機制。(4)DataNode稱為數(shù)據(jù)節(jié)點,是存放數(shù)據(jù)的物理空間,以塊(block)為基本單位;(5)NameNode和DataNode是主從結構;(6)塊是HDFS操作最小單位,一般為128M;(7)元數(shù)據(jù)(meta)=文件目錄結構信息(catalogue)+操作日志信息(log),數(shù)據(jù)的描述信息(8)NameNode只存放catalogue,和SecondaryNameNode之間只相差3秒的catalogue;(9)DataNode按機架(rack)進行組織,圖3.5有兩個機架;(10)客戶端只能同NameNode交互;2.2.1HDFS體系結構2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)(11)一個數(shù)據(jù)塊通常要備份3份。第一份放到任務發(fā)起用戶所在節(jié)點,如果請求是集群外發(fā)起,就隨機選一不忙的節(jié)點;第二份放到與第一份不同的機架的節(jié)點上,第三份放到與第一份所在機架不同節(jié)點上,如圖中標記黑色的塊;(12)DataNode定時向NameNode發(fā)送狀態(tài)信息(心跳,Heartbeats),維護Block到本地文件系統(tǒng)(HDFSClient)的映射關系;(13)NameNode主要任務是:監(jiān)控心跳、負載平衡、數(shù)據(jù)塊備份的位置信息;(14)冷備份每3秒進行一次,SecondaryNameNode冷備份過程見圖3.6;完成edits和fsimage同步,觸發(fā)冷備份的條件:3600秒或edits大于64M(15)NameNode結構見圖3.7;(16)HDFS白話描述:如果把HDFS比作一本書,Namenode存儲的是書的目錄,Datanode存儲的就是書的正文內容,一章是一個文件,一節(jié)是一個塊,目錄稱為元數(shù)據(jù),目錄指明的各章節(jié)頁碼稱為映射,用戶訪問數(shù)據(jù),首先要訪問Namenode;(17)HDFS優(yōu)點:采用抽象的塊概念可以帶來以下幾個明顯的好處:支持大規(guī)模文件存儲;簡化系統(tǒng)設計;適合數(shù)據(jù)備份;(18)HDFS缺點:塊的大小遠遠大于普通文件系統(tǒng),所以不適合存儲小文件。2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)NameNode(主節(jié)點,其結構見圖)2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)元數(shù)據(jù)細節(jié)2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)SecondaryNameNode(冷備份)冷備份過程如圖所示。在冷備份合并過程中發(fā)生的操作記錄在edits.new中。2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(1)讀數(shù)據(jù)過程
類似圖書館借書。第1步:訪問圖書館網(wǎng)站(Namenode),提出請求;第2步:返回請求結果(Metadata);第3不:去圖書館借書(Datanode);第4步:拿到想借的書(Read)2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(2)讀數(shù)據(jù)算法描述2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(3)讀數(shù)據(jù)代碼實現(xiàn)importjava.io.BufferedReader;importjava.io.InputStreamReader;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.fs.FSDataInputStream;publicclassChapter3{publicstaticvoidmain(String[]args){try{Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");FileSystemfs=FileSystem.get(conf);Pathfile=newPath("test");FSDataInputStreamgetIt=fs.open(file);BufferedReaderd=newBufferedReader(newInputStreamReader(getIt));Stringcontent=d.readLine();//讀取文件一行System.out.println(content);d.close();//關閉文件fs.close();//關閉hdfs}catch(Exceptione){e.printStackTrace();}
}}}2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(4)寫數(shù)據(jù)策略
寫數(shù)據(jù)包括增、刪、改,與讀數(shù)據(jù)過程不同。
第一個副本放置在上傳文件的數(shù)據(jù)節(jié)點;如果是集群外提交,則隨機挑選一臺磁盤不太滿、CPU不太忙的節(jié)點。
第二個副本放置在與第一個副本不同的機架的節(jié)點上。
第三個副本與第一個副本相同機架的其他節(jié)點上。
更多副本隨機節(jié)點2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(5)寫數(shù)據(jù)算法描述2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(6)寫數(shù)據(jù)代碼實現(xiàn)importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.Path;publicclassChapter3{publicstaticvoidmain(String[]args){try{Configurationconf=newConfiguration();conf.set("fs.defaultFS","hdfs://localhost:9000");conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");FileSystemfs=FileSystem.get(conf);byte[]buff="Helloworld".getBytes();//要寫入的內容Stringfilename="test";//要寫入的文件名FSDataOutputStreamos=fs.create(newPath(filename));os.write(buff,0,buff.length);System.out.println("Create:"+filename);os.close();fs.close();}catch(Exceptione){e.printStackTrace();}2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(7)數(shù)據(jù)出錯與恢復HDFS具有較高的容錯性,可以兼容廉價的硬件,它把硬件出錯看作一種常態(tài),而不是異常,并設計了相應的機制檢測數(shù)據(jù)錯誤和進行自動恢復,主要包括以下幾種情形:名稱節(jié)點出錯、數(shù)據(jù)節(jié)點出錯和數(shù)據(jù)出錯。①名稱節(jié)點出錯
名稱節(jié)點保存了所有的元數(shù)據(jù)信息,其中,最核心的兩大數(shù)據(jù)結構是FsImage和Editlog,如果這兩個文件發(fā)生損壞,那么整個HDFS實例將失效。因此,HDFS設置了備份機制,把這些核心文件同步復制到備份服務器SecondaryNameNode上。當名稱節(jié)點出錯時,就可以根據(jù)備份服務器SecondaryNameNode中的FsImage和Editlog數(shù)據(jù)進行恢復。②數(shù)據(jù)節(jié)點出錯
每個數(shù)據(jù)節(jié)點會定期向名稱節(jié)點發(fā)送“心跳”信息,向名稱節(jié)點報告自己的狀態(tài)
當數(shù)據(jù)節(jié)點發(fā)生故障,或者網(wǎng)絡發(fā)生斷網(wǎng)時,名稱節(jié)點就無法收到來自一些數(shù)據(jù)節(jié)點的心跳信息,這時,這些數(shù)據(jù)節(jié)點就會被標記為“宕機”,節(jié)點上面的所有數(shù)據(jù)都會被標記為“不可讀”,名稱節(jié)點不會再給它們發(fā)送任何I/O請求。這時,有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點的不可用,會導致一些數(shù)據(jù)塊的副本數(shù)量小于冗余因子。
名稱節(jié)點會定期檢查這種情況,一旦發(fā)現(xiàn)某個數(shù)據(jù)塊的副本數(shù)量小于冗余因子,就會啟動數(shù)據(jù)冗余復制,為它生成新的副本。HDFS和其它分布式文件系統(tǒng)的最大區(qū)別就是可以調整冗余數(shù)據(jù)的位置。
2.2HDFS第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.2.2HDFS存儲原理(7)數(shù)據(jù)出錯與恢復③數(shù)據(jù)出錯
網(wǎng)絡傳輸和磁盤錯誤等因素,都會造成數(shù)據(jù)錯誤。
客戶端在讀取到數(shù)據(jù)后,會采用md5和sha1對數(shù)據(jù)塊進行校驗,以確定讀取到正確的數(shù)據(jù)。
在文件被創(chuàng)建時,客戶端就會對每一個文件塊進行信息摘錄,并把這些信息寫入到同一個路徑的隱藏文件里面。
當客戶端讀取文件的時候,會先讀取該信息文件,然后,利用該信息文件對每個讀取的數(shù)據(jù)塊進行校驗,如果校驗出錯,客戶端就會請求到另外一個數(shù)據(jù)節(jié)點讀取該文件塊,并且向名稱節(jié)點報告這個文件塊有錯誤,名稱節(jié)點會定期檢查并且重新復制這個塊。第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.3
MapReduce2.1認識Hadoop2.4
zookeeper2.2
HDFSContents2.3.12.3.2實例分析:WordCount2.3.32.3.4MapReduce體系結構MapReduce工作流程MapReduce編程實踐分布式并行編程MapReduce模型簡介2.3.1MapReduce體系結構Map和Reduce函數(shù)問題:在MapReduce出現(xiàn)之前,已經有并行計算框架了,那么為什么Google還需要MapReduce?MapReduce與傳統(tǒng)的并行計算框架相比有什么優(yōu)勢?一、分布式并行編程回顧傳統(tǒng)并行計算框架MapReduce集群架構/容錯性共享式(共享內存/共享存儲),容錯性差非共享式,容錯性好硬件/價格/擴展性刀片服務器、高速網(wǎng)、SAN,價格貴,擴展性差普通PC機,便宜,擴展性好編程/學習難度what-how,難what,簡單適用場景實時、細粒度計算、計算密集型批處理、非實時、數(shù)據(jù)密集型分布式并行編程MapReduce模型簡介2.3.2MapReduce體系結構Map和Reduce函數(shù)輸入和輸出都是鍵值對二、MapReduce模型簡介2、一個例子二、MapReduce模型簡介(1)MapReduce將復雜的、運行于大規(guī)模集群上的并行計算過程高度地抽象為兩個函數(shù):Map和Reduce(2)編程容易,不需要掌握分布式并行編程細節(jié),也可以很容易把自己的程序運行在分布式系統(tǒng)上,完成海量數(shù)據(jù)的計算(3)MapReduce采用“分而治之”策略,一個存儲在分布式文件系統(tǒng)中的大規(guī)模數(shù)據(jù)集,會被切分成許多獨立的分片(split),這些分片可以被多個Map任務并行處理(4)MapReduce設計的一個理念就是“計算向數(shù)據(jù)靠攏”,而不是“數(shù)據(jù)向計算靠攏”,因為,移動數(shù)據(jù)需要大量的網(wǎng)絡傳輸開銷(5)MapReduce框架采用了Master/Slave架構,包括一個Master和若干個Slave。Master上運行JobTracker,Slave上運行TaskTracker
2、基本思想3、MapReduce的體系結構MapReduce體系結構主要由四個部分組成,分別是:Client、JobTracker、TaskTracker以及Task二、MapReduce模型簡介1)Client用戶編寫的MapReduce程序通過Client提交到JobTracker端用戶可通過Client提供的一些接口查看作業(yè)運行狀態(tài)2)JobTrackerJobTracker負責資源監(jiān)控和作業(yè)調度JobTracker監(jiān)控所有TaskTracker與Job的健康狀況,一旦發(fā)現(xiàn)失敗,就將相應的任務轉移到其他節(jié)點JobTracker會跟蹤任務的執(zhí)行進度、資源使用量等信息,并將這些信息告訴任務調度器(TaskScheduler),而調度器會在資源出現(xiàn)空閑時,選擇合適的任務去使用這些資源二、MapReduce模型簡介3)TaskTrackerTaskTracker會周期性地通過“心跳”將本節(jié)點上資源的使用情況和任務的運行進度匯報給JobTracker,同時接收JobTracker發(fā)送過來的命令并執(zhí)行相應的操作(如啟動新任務、殺死任務等)TaskTracker使用“slot”等量劃分本節(jié)點上的資源量(CPU、內存等)。一個Task獲取到一個slot后才有機會運行,而Hadoop調度器的作用就是將各個TaskTracker上的空閑slot分配給Task使用。slot分為Mapslot和Reduceslot兩種,分別供MapTask和ReduceTask使用4)TaskTask分為MapTask和ReduceTask兩種,均由TaskTracker啟動二、MapReduce模型簡介分布式并行編程MapReduce模型簡介2.3.2MapReduce體系結構Map和Reduce函數(shù)程序WordCount輸入一個包含大量單詞的文本文件輸出文件中每個單詞及其出現(xiàn)次數(shù)(頻數(shù)),并按照單詞字母順序排序,每個單詞和其頻數(shù)占一行,單詞和頻數(shù)之間有間隔輸入輸出HelloWorldHelloHadoopHelloMapReduceHadoop1Hello3MapReduce1World1三、Map和Reduce函數(shù)
一個WordCount執(zhí)行過程的實例三、Map和Reduce函數(shù)三、Map和Reduce函數(shù)三、Map和Reduce函數(shù)函數(shù)輸入輸出說明Map<k1,v1>如:<行號,”abc”>List(<k2,v2>)如:<“a”,1><“b”,1><“c”,1>1.將小數(shù)據(jù)集進一步解析成一批<key,value>對,輸入Map函數(shù)中進行處理2.每一個輸入的<k1,v1>會輸出一批<k2,v2>。<k2,v2>是計算的中間結果Reduce<k2,List(v2)>如:<“a”,<1,1,1>><k3,v3><“a”,3>輸入的中間結果<k2,List(v2)>中的List(v2)表示是一批屬于同一個k2的value2編寫Map處理邏輯Map輸入為<偏移量,一行文本>,范型<LongWritable,Text>Map輸出為<單詞,1>,范型<Text,IntWritable>2編寫Map處理邏輯publicclassWordCountMapperextendsMapper<LongWritable,Text,Text,IntWritable>{
//對數(shù)據(jù)進行打散
@Override
protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{
//1.接入數(shù)據(jù)hellorebahellomimi
Stringline=value.toString();
//2.對數(shù)據(jù)進行切分
String[]words=line.split("");
//3.寫出以<hello,1>
for(Stringw:words){
//寫出reducer端
context.write(newText(w),newIntWritable(1));
}
}
}3編寫Reduce處理邏輯Reduce的輸入數(shù)據(jù)為<”China”,<1,1,1>>
,范型<Text,Iterable容器>
Reduce輸出數(shù)據(jù)為<”China”,3>
,范型<Text,IntWritable>publicclassWordCountReducerextendsReducer<Text,IntWritable,Text,IntWritable>{//key->單詞values->次數(shù)11111@Overrideprotectedvoidreduce(Textkey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{//1.記錄出現(xiàn)的次數(shù)
intsum=0;for(IntWritablev:values){sum+=v.get();}//2.累加求和輸出
context.write(key,newIntWritable(sum));}}7.6.3編寫Reduce處理邏輯工作流程概述MapReduce各個執(zhí)行階段2.3.3MapReduce工作流程Shuffle過程詳解應用程序執(zhí)行過程3.1.2阿里云一、工作流程概述不同的Map任務之間不會進行通信不同的Reduce任務之間也不會發(fā)生任何信息交換用戶不能顯式地從一臺機器向另一臺機器發(fā)送消息所有的數(shù)據(jù)交換都是通過MapReduce框架自身去實現(xiàn)的工作流程概述MapReduce各個執(zhí)行階段2.3.3MapReduce工作流程Shuffle過程詳解應用程序執(zhí)行過程3.1.2阿里云二、MapReduce各個執(zhí)行階段HDFS以固定大小的block為基本單位存儲數(shù)據(jù),而對于MapReduce而言,其處理單位是split。split是一個邏輯概念,它只包含一些元數(shù)據(jù)信息,比如數(shù)據(jù)起始位置、數(shù)據(jù)長度、數(shù)據(jù)所在節(jié)點等。它的劃分方法完全由用戶自己決定。關于Split(分片)3.1.2阿里云二、MapReduce各個執(zhí)行階段Reduce任務的數(shù)量最優(yōu)的Reduce任務個數(shù)取決于集群中可用的reduce任務槽(slot)的數(shù)目通常設置比reduce任務槽數(shù)目稍微小一些的Reduce任務個數(shù)(這樣可以預留一些系統(tǒng)資源處理可能發(fā)生的錯誤)Map任務的數(shù)量Hadoop為每個split創(chuàng)建一個Map任務,split的多少決定了Map任務的數(shù)目。大多數(shù)情況下,理想的分片大小是一個HDFS塊3.1.2阿里云二、MapReduce各個執(zhí)行階段工作流程概述MapReduce各個執(zhí)行階段2.3.2MapReduce工作流程Shuffle過程詳解應用程序執(zhí)行過程1.Shuffle過程簡介3.1.2阿里云三、Shuffle過程詳解2.Map端的Shuffle過程每個Map任務分配一個緩存MapReduce默認100MB緩存設置溢寫比例0.8分區(qū)默認采用哈希函數(shù)排序是默認的操作排序后可以合并(Combine)合并不能改變最終結果在Map任務全部結束之前進行歸并歸并得到一個大的文件,放在本地磁盤文件歸并時,如果溢寫文件數(shù)量大于預定值(默認是3)則可以再次啟動Combiner,少于3不需要JobTracker會一直監(jiān)測Map任務的執(zhí)行,并通知Reduce任務來領取數(shù)據(jù)合并(Combine)和歸并(Merge)的區(qū)別:兩個鍵值對<“a”,1>和<“a”,1>,如果合并,會得到<“a”,2>,如果歸并,會得到<“a”,<1,1>>3.1.2阿里云三、Shuffle過程詳解3.Reduce端的Shuffle過程Reduce端的Shuffle過程Reduce任務通過RPC向JobTracker詢問Map任務是否已經完成,若完成,則領取數(shù)據(jù)Reduce領取數(shù)據(jù)先放入緩存,來自不同Map機器,先歸并,再合并,寫入磁盤多個溢寫文件歸并成一個或多個大文件,文件中的鍵值對是排序的當數(shù)據(jù)很少時,不需要溢寫到磁盤,直接在緩存中歸并,然后輸出給Reduce3.1.2阿里云三、Shuffle過程詳解工作流程概述MapReduce各個執(zhí)行階段2.3.2MapReduce工作流程Shuffle過程詳解應用程序執(zhí)行過程3.1.2阿里云四、MapReduce應用程序執(zhí)行過程應用場景自然連接2.3.4MapReduce編程實踐實戰(zhàn)一、MapReduce應用場景MapReduce可以很好地應用于各種計算問題關系代數(shù)運算(選擇、投影、并、交、差、連接)分組與聚合運算矩陣-向量乘法矩陣乘法應用場景自然連接2.3.4MapReduce編程實踐實戰(zhàn)假設有關系R(A,B)和S(B,C),對二者進行自然連接操作使用Map過程,把來自R的每個元組<a,b>轉換成一個鍵值對<b,<R,a>>,其中的鍵就是屬性B的值。把關系R包含到值中,這樣做使得我們可以在Reduce階段,只把那些來自R的元組和來自S的元組進行匹配。類似地,使用Map過程,把來自S的每個元組<b,c>,轉換成一個鍵值對<b,<S,c>>所有具有相同B值的元組被發(fā)送到同一個Reduce進程中,Reduce進程的任務是,把來自關系R和S的、具有相同屬性B值的元組進行合并Reduce進程的輸出則是連接后的元組<a,b,c>,輸出被寫到一個單獨的輸出文件中二、用MapReduce實現(xiàn)關系的自然連接用MapReduce實現(xiàn)關系的自然連接應用場景自然連接2.3.4MapReduce編程實踐實戰(zhàn)三、MapReduce實踐1 任務要求2 編寫Map處理邏輯3 編寫Reduce處理邏輯4 編寫main方法5 編譯打包代碼以及運行程序1任務要求文件A的內容如下:ChinaismymotherlandIloveChina文件B的內容如下:IamfromChina期望結果如右側所示:I2is1China3my1love1am1from1motherland12編寫Map處理邏輯Map輸入類型為<key,value>期望的Map輸出類型為<單詞,1>2編寫Map處理邏輯publicclassWordCountMapperextendsMapper<LongWritable,Text,Text,IntWritable>{
//對數(shù)據(jù)進行打散
@Override
protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{
//1.接入數(shù)據(jù)hellorebahellomimi
Stringline=value.toString();
//2.對數(shù)據(jù)進行切分
String[]words=line.split("");
//3.寫出以<hello,1>
for(Stringw:words){
//寫出reducer端
context.write(newText(w),newIntWritable(1));
}
}
}3編寫Reduce處理邏輯在Reduce處理數(shù)據(jù)之前,Map的結果首先通過Shuffle階段進行整理Reduce階段的任務:對輸入數(shù)字序列進行求和Reduce的輸入數(shù)據(jù)為<key,Iterable容器>Reduce任務的輸入數(shù)據(jù):<”I”,<1,1>><”is”,1>……<”from”,1><”China”,<1,1,1>>
publicclassWordCountReducerextendsReducer<Text,IntWritable,Text,IntWritable>{//key->單詞values->次數(shù)11111@Overrideprotectedvoidreduce(Textkey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{//1.記錄出現(xiàn)的次數(shù)
intsum=0;for(IntWritablev:values){sum+=v.get();}//2.累加求和輸出
context.write(key,newIntWritable(sum));}}7.6.3編寫Reduce處理邏輯4編寫main方法publicclassWordCountDriver{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException,InterruptedException{Configurationconf=newConfiguration();Jobjob=Job.getInstance(conf);//1.創(chuàng)建job任務
job.setJarByClass(WordCountDriver.class);//2.指定jar包位置
job.setMapperClass(WordCountMapper.class);//3.關聯(lián)使用的Mapper類
job.setReducerClass(WordCountReducer.class);//4.關聯(lián)使用的Reducer類
job.setMapOutputKeyClass(Text.class);//5.設置mapper階段輸出的數(shù)據(jù)類型
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);//6.設置reducer階段輸出的數(shù)據(jù)類型
job.setOutputValueClass(IntWritable.class);
FileInputFormat.setInputPaths(job,newPath(args[0]));//7.設置數(shù)據(jù)輸入的路徑
FileOutputFormat.setOutputPath(job,newPath(args[1]));//8.設置數(shù)據(jù)輸出的路徑
boolean
rs=job.waitForCompletion(true);//9.提交任務
System.exit(rs?0:1);}}5編譯打包代碼以及運行程序實驗步驟:使用java編譯程序,生成.class文件將.class文件打包為jar包運行jar包(需要啟動Hadoop)查看結果Hadoop2.x版本中的依賴jarHadoop2.x版本中jar不再集中在一個hadoop-core*.jar中,而是分成多個jar,如使用Hadoop2.6.0運行WordCount實例至少需要如下三個jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar通過命令
hadoopclasspath
可以得到運行Hadoop程序所需的全部classpath信息將Hadoop的classhpath信息添加到CLASSPATH變量中,在~/.bashrc中增加如下幾行:exportHADOOP_HOME=/usr/local/hadoopexportCLASSPATH=$($HADOOP_HOME/bin/hadoopclasspath):$CLASSPATH
執(zhí)行
source~/.bashrc
使變量生效,接著就可以通過
javac
命令編譯WordCount.java接著把.class文件打包成jar,才能在Hadoop中運行:運行程序:第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.4zookeeper2.1認識Hadoop2.3
MapReduce2.2
HDFS什么是zookeeperzookeeper功能2.4.1Zookeeper概述zookeeper結構第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.4.1zookeeper概述一、問題提出HDFSMapReduceHBASE如果HDFS、MapReduce……的主節(jié)點出故障怎么辦?2.4.1zookeeper概述第二章大數(shù)據(jù)生態(tài)系統(tǒng)分布式集群協(xié)調器二、什么是zookeeper配置管理命名服務提供分布式同步集群管理第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.4.1zookeeper概述三、zookeeper能做什么第二章大數(shù)據(jù)生態(tài)系統(tǒng)2.4.1zookeeper概述1、命名服務:一個分布式系統(tǒng)的各節(jié)點可能需要一個規(guī)范的、各節(jié)點的唯一的命名(例如節(jié)點名、CPU編號等),ZK可以實現(xiàn)這個的應用場景。2、配置管理:各個節(jié)點也會有一致的信息,例如每個節(jié)點的主配置信息。3、提供分布式同步:
為了管理方便,新加入的節(jié)點也需要快速同步這些信息。4、集群管理:
(1)集群狀態(tài)監(jiān)控和通知:分布式系統(tǒng)中的每個節(jié)點需要知道整個系統(tǒng)的狀態(tài)、知道系統(tǒng)中每個節(jié)點的狀態(tài):當有新節(jié)點加入時它需要知道、當有節(jié)點出現(xiàn)故障時它需要知道、當有節(jié)點退出時它需要知道。ZK就是這樣一個“通知工具”。(2)協(xié)調資源搶占(鎖):當分布式系統(tǒng)的多個節(jié)點試圖同時搶占唯一資源時(例如同時寫入一個文件),就需要對這個唯一資源的使用進行協(xié)調。這是ZK的“協(xié)調者”功能。(3)分派計算任務:如何協(xié)調1000個需要同時處理的任務到分布式系統(tǒng)的13個節(jié)點?如何保證執(zhí)行失敗的任務能被重新執(zhí)行?如何在某個節(jié)點崩潰的情況下,接管其正在處理的任務?配置管理——訂閱/發(fā)布訂閱者(客戶端)通過一定的方法告訴Zookeeper服務器,自己對哪個節(jié)點的數(shù)據(jù)感興趣,那么在服務端數(shù)據(jù)發(fā)生變化時,就會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農業(yè)大棚租賃合同范例
- 人工協(xié)議合同范例
- 參考合同范例
- 外貿代工合同范例英文
- 分期采購合同范例
- 三人合作建廠協(xié)議合同范例
- 國內石材生產合同模板
- 人力社保勞務合同范例
- 合同范例 律師費
- 嘉定區(qū)軟件園廠房合同范例
- 除塵室PLC控制系統(tǒng)設計
- 湖北省普通高中學生綜合素質評價管理系統(tǒng)介紹
- 三一集團生產區(qū)6S標準
- 營養(yǎng)不良的五階梯治療詳解演示文稿
- 乳鼠腎細胞的原代培養(yǎng)盛心磊
- 青島東北亞大宗商品交易中心可行性研究報告
- 八年級科學上冊 《生命活動的調節(jié)》同步練習1 浙教版
- 硫酸儲罐標準
- 2023年6月四級聽力第一套真題及聽力原文
- GB/T 40016-2021基礎零部件通用元數(shù)據(jù)
- 千年菩提路解說詞
評論
0/150
提交評論