hadoop環境安裝及簡單Map-Reduce樣本

來源:互聯網
上載者:User

一.參考書:《hadoop權威指南--第二版(中文)》

二.hadoop環境安裝

1.安裝sun-jdk1.6版本

1)目前我只在一台伺服器(CentOS5.5)上搭建hadoop環境,因此先卸載已安裝的java1.4版本

卸載命令:yum -y remove java

2)下載sun-jdk1.6,地址:http://download.oracle.com/otn-pub/java/jdk/6u33-b04/jdk-6u33-linux-x64-rpm.bin

3)安裝java(進入jdk安裝檔案所在目錄) 

添加bin檔案許可權:chmod a+x *

安裝,sudo  ./jdk-6u33-linux-x64-rpm.bin

        (若是在普通使用者下安裝,需要在/etc/sudoers檔案下添加語句,表示目前使用者可以擁有root許可權,具體命令如下

a. su root

b. chmod u+w /etc/sudoers

c. vim /etc/sudoers

d.在root    ALL=(ALL)       ALL下面添加一行 “username(你要建立的sudoer使用者名稱) ALL=(ALL)  ALL”,儲存退出

e. chmod u-w /etc/sudoers

        )

4)設定JAVA_HOME

編輯使用者目錄下的.bashrc檔案,設定JAVA_HOE命令:export JAVA_HOME=/usr

2.安裝hadoop

1)從http://hadoop.apache.org/common/releases.html#Download上下載相應版本的hadoop(本人下載的是1.0.3版本)

2)解壓檔案

命令:tar -xzf  hadoop-1.0.3.tar.gz

3)測試hadoop是否安裝成功(進入hadoop安裝目錄,依次執行以下命令)

a. mkdir input 

b. cp conf/*.xml input 
c. bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 
d. cat output/*  (顯示“1      dfsadmin” 表示hadoop安裝成功)

4)設定環境變數

export HADOOP_HOME=/home/username/hadoop/hadoop-1.0.3
export PATH=$PATH:$HADOOP_HOME/bin
export CLASSPATH=.:$HADOOP_HOME/hadoop-core-1.0.3.jar:$HADOOP_HOME/lib:$CLASSPATH

三.簡單Map-Reduce樣本

一開始按照書上20~23頁(也可參考該頁面http://answers.oreilly.com/topic/455-get-started-analyzing-data-with-hadoop/)上的內容運行簡單的MaxTemperature樣本,一直沒用過。在命令列環境下,輸入

% export HADOOP_CLASSPATH=build/classes% hadoop MaxTemperature input/ncdc/sample.txt output

就顯示:ClassNotFound類似的錯誤,然後修改,又拋出IOException,後在網上找了好久,得到一個可行的方案。

1.參考連結

http://hadoop.apache.org/common/docs/stable/mapred_tutorial.html

http://blog.endlesscode.com/2010/06/16/simple-demo-of-mapreduce-in-java/

2.主要步驟

mkdir MaxTemperature
javac -d MaxTemperature MaxTemperature.java
jar cvf MaxTemperature.jar -C MaxTemperature/ .
hadoop jar MaxTemperature.jar MaxTemperature sample.txt output

注意事項:

將map,reduce類的代碼複製到MaxTemperature.java中,添加static屬性,執行javac命令如遇到Iterator報錯時,則添加相應包,如下

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

四.一點感想

今天第一次搭建hadoop環境,主要困難在於按照書上說明一步一步操作時,遇到了錯誤,這時不確定是書上的知識過時了還是我的操作失誤,加之對java不太熟悉,由此浪費了好幾個小時的時間。最後,找到了一個正確的方案,成功運行了Map-Reduce的簡單樣本(單機模式)。總體來說,走出了第一步,有點小成就感。希望能利用這個暑假深入研究hadoop。加油~

五.補充

參考書《Hadoop權威指南(中文第二版)》中第25頁說明了,Hadoop從0.20.0版本開始在類型上不相容先前的API,要重寫以前的應用程式才能使新的API發揮作用。這就說明了用舊的API會報一些奇怪的類似ClassNotFound的錯誤了。

在這裡補充下新增的API和舊的API之間的一些明顯區別(摘自書中):

1.新的API傾向於使用抽象類別,而不是介面,因為這更容易擴充。例如,你可以添加一個方法(用預設的實現)到一個抽象類別而不需修改類之前的實現方法。在新的API中,Mapper和Reducer是抽象類別。
2.新的API是在org.apache.hadoop.mapreduce包(和子包)中的。之前版本的API則是放在org.apache.hadoop.mapred中的。
3.新的API廣泛使用context object(內容物件),並允許使用者代碼與MapReduce系統進行通訊。例如,MapContext基本上充當著JobConf的OutputCollector和Reporter的角色。
4.新的API同時支援"推"和"拉"式的迭代。在這兩個新老API中,鍵/值記錄對被推mapper中,但除此之外,新的API允許把記錄從map()方法中拉出,這也適用於reducer。"拉"式的一個有用的例子是分批處理記錄,而不是一個接一個。
5.新的API統一了配置。舊的API有一個特殊的JobConf對象用於作業配置,這是一個對於Hadoop通常的Configuration對象的擴充(用於配置守護進程,請參見5.1節)。在新的API中,這種區別沒有了,所以作業配置通過Configuration來完成。
6.作業控制的執行由Job類來負責,而不是JobClient,它在新的API中已經蕩然無存。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.