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