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