兩種模式運(yùn)行Hadoop分布式并行程序
本節(jié)和大家一起學(xué)習(xí)一下Hadoop方面的知識(shí),主要包括Hadoop的概念和兩種模式實(shí)現(xiàn)Hadoop分布式并行程序等,希望通過本節(jié)的介紹大家對(duì)Hadoop有新的認(rèn)識(shí)。
Hadoop初體驗(yàn)
Hadoop支持Linux及Windows操作系統(tǒng),但其官方網(wǎng)站聲明Hadoop的分布式操作在Windows上未做嚴(yán)格測(cè)試,建議只把Windows作為Hadoop的開發(fā)平臺(tái)。在Windows環(huán)境上的安裝步驟如下(Linux平臺(tái)類似,且更簡(jiǎn)單一些):
(1)在Windows下,需要先安裝Cgywin,安裝Cgywin時(shí)注意一定要選擇安裝openssh(在Netcategory)。安裝完成之后,把Cgywin的安裝目錄如c:\cygwin\bin加到系統(tǒng)環(huán)境變量PATH中,這是因?yàn)檫\(yùn)行Hadoop要執(zhí)行一些linux環(huán)境下的腳本和命令。
(2)安裝Java1.5.x,并將JAVA_HOME環(huán)境變量設(shè)置為Java的安裝根目錄如C:\ProgramFiles\Java\jdk1.5.0_01。
(3)到Hadoop官方網(wǎng)站http://hadoop.apache.org下載HadoopCore,最新的穩(wěn)定版本是0.16.0.將下載后的安裝包解壓到一個(gè)目錄,本文假定解壓到c:\hadoop-0.16.0。
4)修改conf/hadoop-env.sh文件,在其中設(shè)置JAVA_HOME環(huán)境變量:exportJAVA_HOME="C:\ProgramFiles\Java\jdk1.5.0_01”(因?yàn)槁窂街蠵rogramFiles中間有空格,一定要用雙引號(hào)將路徑引起來)
至此,一切就緒,可以運(yùn)行Hadoop了。以下的運(yùn)行過程,需要啟動(dòng)cygwin,進(jìn)入模擬Linux環(huán)境。在下載的HadoopCore包中,帶有幾個(gè)示例程序并且已經(jīng)打包成了hadoop-0.16.0-examples.jar。其中有一個(gè)WordCount程序,功能是統(tǒng)計(jì)一批文本文件中各個(gè)單詞出現(xiàn)的次數(shù),我們先來看看怎么運(yùn)行這個(gè)程序。Hadoop共有三種運(yùn)行模式:單機(jī)(非分布式)模式,偽分布式運(yùn)行模式,分布式運(yùn)行模式,其中前兩種運(yùn)行模式體現(xiàn)不了Hadoop分布式計(jì)算的優(yōu)勢(shì),并沒有什么實(shí)際意義,但對(duì)程序的測(cè)試及調(diào)試很有幫助,我們先從這兩種模式入手,了解基于Hadoop的分布式并行程序是如何編寫和運(yùn)行的。
單機(jī)(非分布式)模式
這種模式在一臺(tái)單機(jī)上運(yùn)行,沒有分布式文件系統(tǒng),而是直接讀寫本地操作系統(tǒng)的文件系統(tǒng)。
注意事項(xiàng):運(yùn)行bin/hadoopjarhadoop-0.16.0-examples.jarwordcounttest-intest-out時(shí),務(wù)必注意第一個(gè)參數(shù)是jar,不是-jar,當(dāng)你用-jar時(shí),不會(huì)告訴你是參數(shù)錯(cuò)了,報(bào)告出來的錯(cuò)誤信息是:Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/hadoop/util/ProgramDriver,筆者當(dāng)時(shí)以為是classpath的設(shè)置問題,浪費(fèi)了不少時(shí)間。通過分析bin/hadoop腳本可知,-jar并不是bin/hadoop腳本定義的參數(shù),此腳本會(huì)把-jar作為Java的參數(shù),Java的-jar參數(shù)表示執(zhí)行一個(gè)Jar文件(這個(gè)Jar文件必須是一個(gè)可執(zhí)行的Jar,即在MANIFEST中定義了主類),此時(shí)外部定義的classpath是不起作用的,因而會(huì)拋出java.lang.NoClassDefFoundError異常。而jar是bin/hadoop腳本定義的參數(shù),會(huì)調(diào)用Hadoop自己的一個(gè)工具類RunJar,這個(gè)工具類也能夠執(zhí)行一個(gè)Jar文件,并且外部定義的classpath有效。
偽分布式運(yùn)行模式
這種模式也是在一臺(tái)單機(jī)上運(yùn)行,但用不同的Java進(jìn)程模仿分布式運(yùn)行中的各類結(jié)點(diǎn)(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode),請(qǐng)注意分布式運(yùn)行中的這幾個(gè)結(jié)點(diǎn)的區(qū)別:從分布式存儲(chǔ)的角度來說,集群中的結(jié)點(diǎn)由一個(gè)NameNode和若干個(gè)DataNode組成,另有一個(gè)SecondaryNameNode作為NameNode的備份。從分布式應(yīng)用的角度來說,集群中的結(jié)點(diǎn)由一個(gè)JobTracker和若干個(gè)TaskTracker組成,JobTracker負(fù)責(zé)任務(wù)的調(diào)度,TaskTracker負(fù)責(zé)并行執(zhí)行任務(wù)。TaskTracker必須運(yùn)行在DataNode上,這樣便于數(shù)據(jù)的本地計(jì)算。JobTracker和NameNode則無須在同一臺(tái)機(jī)器上。
【編輯推薦】
- Hadoop機(jī)架感知及啟動(dòng)停止方法詳解
- Hadoop概念及其用法專家講解
- Hadoop集群與Hadoop性能優(yōu)化
- HadoopHBase實(shí)現(xiàn)配置簡(jiǎn)單的單機(jī)環(huán)境
- Hadoop命令手冊(cè)使用指南