編寫(xiě)可擴(kuò)展、分布式的數(shù)據(jù)密集型程序和基礎(chǔ)知識(shí)
成都創(chuàng)新互聯(lián)服務(wù)電話:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)頁(yè)制作領(lǐng)域十余年,包括花箱等多個(gè)行業(yè)擁有多年的網(wǎng)站維護(hù)經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián),為企業(yè)錦上添花。理解Hadoop和MapReduce
編寫(xiě)和運(yùn)行一個(gè)基本的MapReduce程序
1、什么是Hadoop
Hadoop是一個(gè)開(kāi)源的框架,可編寫(xiě)和運(yùn)行分布式應(yīng)用處理大規(guī)模數(shù)據(jù)。
Hadoop與眾不同之處在于以下幾點(diǎn):
方便——Hadoop運(yùn)行在由一般商用機(jī)器構(gòu)成的大型集群上,或者云計(jì)算服務(wù)之上;
健壯——Hadoop致力于在一般商用硬件上運(yùn)行,其架構(gòu)假設(shè)硬件會(huì)頻繁地出現(xiàn)失效;
可擴(kuò)展——Hadoop通過(guò)增加集群節(jié)點(diǎn),可以線性地?cái)U(kuò)展以處理更大的數(shù)據(jù)集;
簡(jiǎn)單——Hadoop運(yùn)行用戶快速編寫(xiě)出高效的并行代碼。
2、了解分布式系統(tǒng)和Hadoop
理解分布式系統(tǒng)(向外擴(kuò)展)和大型單機(jī)服務(wù)器(向上擴(kuò)展)之間的對(duì)比,考慮現(xiàn)有I/O技術(shù)的性價(jià)比。
理解Hadoop和其他分布式架構(gòu)(SETI@home)的區(qū)別:
Hadoop設(shè)計(jì)理念是代碼向數(shù)據(jù)遷移,而SETI@home設(shè)計(jì)理念是數(shù)據(jù)遷移。
要運(yùn)行的程序在規(guī)模上比數(shù)據(jù)小幾個(gè)數(shù)量級(jí),更容易移動(dòng);此外,在網(wǎng)絡(luò)上移動(dòng)數(shù)據(jù)要比在其上加載代碼更花時(shí)間,不如讓數(shù)據(jù)不動(dòng)而將可執(zhí)行代碼移動(dòng)到數(shù)據(jù)所在機(jī)器上去。
3、比較SQL數(shù)據(jù)庫(kù)和Hadoop
SQL(結(jié)構(gòu)化查詢語(yǔ)言)是針對(duì)結(jié)構(gòu)化數(shù)據(jù)設(shè)計(jì)的,而Hadoop最初的許多應(yīng)用針對(duì)的是文本這種非結(jié)構(gòu)化數(shù)據(jù)。讓我們從特定的視角將Hadoop與典型SQL數(shù)據(jù)庫(kù)做更詳細(xì)的比較:
用向外擴(kuò)展代替向上擴(kuò)展——擴(kuò)展商用關(guān)系型數(shù)據(jù)庫(kù)的代價(jià)會(huì)更加昂貴的
用鍵/值對(duì)代替關(guān)系表——Hadoop使用鍵/值對(duì)作為基本數(shù)據(jù)單元,可足夠靈活地處理較少結(jié)構(gòu)化的數(shù)據(jù)類型
用函數(shù)式編程(MapReduce)代替聲明式查詢(SQL)——在MapReduce中,實(shí)際的數(shù)據(jù)處理步驟是由你指定的,很類似于SQL引擎的一個(gè)執(zhí)行計(jì)劃
用離線處理代替在線處理——Hadoop是專為離線處理和大規(guī)模數(shù)據(jù)分析而設(shè)計(jì)的,并不適合那種對(duì)幾個(gè)記錄隨機(jī)讀寫(xiě)的在線事務(wù)處理模式
4、理解MapReduce
MapReduce是一種數(shù)據(jù)處理模型,大的優(yōu)點(diǎn)是容易擴(kuò)展到多個(gè)計(jì)算節(jié)點(diǎn)上處理數(shù)據(jù);
在MapReduce模型中,數(shù)據(jù)處理原語(yǔ)被稱為mapper和reducer;
分解一個(gè)數(shù)據(jù)處理應(yīng)用為mapper和reducer有時(shí)是繁瑣的,但是一旦一MapReduce的形式寫(xiě)好了一個(gè)應(yīng)用程序,僅需修改配置就可以將它擴(kuò)展到集群中幾百、幾千,甚至幾萬(wàn)臺(tái)機(jī)器上運(yùn)行。
[動(dòng)手?jǐn)U展一個(gè)簡(jiǎn)單程序]
少量文檔處理方式:對(duì)于每個(gè)文檔,使用分詞過(guò)程逐個(gè)提取單詞;對(duì)于每個(gè)單詞,在多重集合wordcount中的相應(yīng)項(xiàng)上加1;最后display()函數(shù)打印出wordcount中的所有條目。
大量文檔處理方式:將工作分布到多臺(tái)機(jī)器上,每臺(tái)機(jī)器處理這些文檔的不同部分,當(dāng)所有機(jī)器都完成時(shí),第二個(gè)處理階段將合并這些結(jié)果。
一些細(xì)節(jié)可能會(huì)妨礙程序按預(yù)期工作,如文檔讀取過(guò)量導(dǎo)致中央存儲(chǔ)服務(wù)器的帶寬性能跟不上、多重集合wordcount條目過(guò)多超過(guò)計(jì)算機(jī)的內(nèi)存容量。此外,第二階段只有一個(gè)計(jì)算機(jī)處理wordcount任務(wù),容易出現(xiàn)瓶頸,所以可以采用分布的方式運(yùn)轉(zhuǎn),以某種方式將其分割到多臺(tái)計(jì)算機(jī)上,使之能夠獨(dú)立運(yùn)行,即需要在第一階段后將wordcount分區(qū),使得第二階段的每臺(tái)計(jì)算機(jī)僅需處理一個(gè)分區(qū)。
為了使它工作在一個(gè)分布式計(jì)算機(jī)集群上,需要添加以下功能:
存儲(chǔ)文件到許多計(jì)算機(jī)上(第一階段)
編寫(xiě)一個(gè)基于磁盤(pán)的散列表,使得處理不受內(nèi)存容量限制
劃分來(lái)自第一階段的中間數(shù)據(jù)(即wordcount)
洗牌這些分區(qū)到第二階段中合適的計(jì)算機(jī)上
MapReduce程序執(zhí)行分為兩個(gè)主要階段,為mapping和reducing,每個(gè)階段均定義為一個(gè)數(shù)據(jù)處理函數(shù),分別稱為mapper和reducer。在mapping階段,MapReduce獲取輸入數(shù)據(jù)并將數(shù)據(jù)單元裝入mapper;在reduce階段,reducer處理來(lái)自mapper的所有輸出,并給出最終結(jié)果。簡(jiǎn)而言之,mapper意味著將輸入進(jìn)行過(guò)濾與轉(zhuǎn)換,使reducer可以完成聚合。
另外,為了擴(kuò)展分布式的單詞統(tǒng)計(jì)程序,不得不編寫(xiě)了partitioning和shuffling函數(shù)。
在MapReduce框架中編寫(xiě)應(yīng)用程序就是定制化mapper和reducer的過(guò)程,以下是完整的數(shù)據(jù)流:
應(yīng)用的輸入必須組織為一個(gè)鍵/值對(duì)的列表list(
含有鍵/值對(duì)的列表被拆分,進(jìn)而通過(guò)調(diào)用mapper的map函數(shù)對(duì)每個(gè)單獨(dú)的鍵/值對(duì)
所有mapper的輸出被聚合到一個(gè)包含
每個(gè)reducer分別處理每個(gè)被聚合起來(lái)的
5、用Hadoop統(tǒng)計(jì)單詞——運(yùn)行第一個(gè)程序
Linux操作系統(tǒng)
JDK1.6以上運(yùn)行環(huán)境
Hadoop操作環(huán)境
Usage:hadoop [—config configdir] COMMAND
這里COMMAND為下列其中一個(gè):
namenode -format 格式化DFS文件系統(tǒng)
secondarynamenode 運(yùn)行DFS的第二個(gè)namenode
namenode 運(yùn)行DFS的namenode
datanode 運(yùn)行一個(gè)DFS的datanode
dfsadmin 運(yùn)行一個(gè)DFS的admin客戶端
fsck 運(yùn)行一個(gè)DFS文件系統(tǒng)的檢查工具
fs 運(yùn)行一個(gè)普通的文件系統(tǒng)用戶客戶端
balancer 運(yùn)行一個(gè)集群負(fù)載均衡工具
jobtracker 運(yùn)行MapReduce的jobtracker節(jié)點(diǎn)
pipes 運(yùn)行一個(gè)pipes作業(yè)
tasktracker 運(yùn)行一個(gè)MapReduce的tasktracker節(jié)點(diǎn)
job 處理MapReduce作業(yè)
version 打印版本
jar
distcp
archive -archiveName NAME
daemonlog 獲取或設(shè)置每個(gè)daemon的log級(jí)別
CLASSNAME 運(yùn)行名為CLASSNAME的類大多數(shù)命令會(huì)在使用w/o參數(shù)
時(shí)打出幫助信息。
運(yùn)行單詞統(tǒng)計(jì)示例程序的命令形式如下:
hadoop jar hadoop-*-examples.jar wordcount [-m
編譯修改后的單詞統(tǒng)計(jì)程序的命令形式如下:
javac -classpath hadoop-*-core.jar -d playground/classes playground/src/WordCount.java
jar -cvf playground/src/wordcount.jar -C playground/classes/
運(yùn)行修改后的單詞統(tǒng)計(jì)程序的命令形式如下:
hadoop jar playground/wordcount.jar org.apache.hadoop.examples.WordCount input output
代碼清單 WordCount.java
package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { public static class TokenizerMapper extends Mapper
在(1)的位置上wordcount以默認(rèn)配置使用了Java的StringTokenizer,這里僅基于空格來(lái)分詞。為了在分詞過(guò)程中忽略標(biāo)準(zhǔn)的標(biāo)點(diǎn)符號(hào),將它們加入到stringTokenizer的定界符列表中:
StringTokenizer itr = new StringTokenizer(value.toString(),” \t\n\r\f,.:;?![]’");
因?yàn)橄M麊卧~統(tǒng)計(jì)忽略大小寫(xiě),把它們轉(zhuǎn)換為T(mén)ext對(duì)象前先將所有的單詞都變成小寫(xiě):
word.set(itr.nextToken().toLowerCase());
希望僅僅顯示出現(xiàn)次數(shù)大于4次的單詞:
if (sum > 4) context.write(key, result);
6、hadoop歷史
創(chuàng)始人:Doug Cutting
2004年左右——Google發(fā)表了兩篇論文來(lái)論述Google文件系統(tǒng)(GFS)和MapReduce框架。
2006年1月——雅虎聘用Doug,讓他和一個(gè)專項(xiàng)團(tuán)隊(duì)一起改進(jìn)Hadoop,并將其作為一個(gè)開(kāi)源項(xiàng)目。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。