Hadoop的安裝與配置及示例程序wordcount的運行


前言

最近在學習Hadoop,文章只是記錄我的學習過程,難免有不足甚至是錯誤之處,請大家諒解並指正!Hadoop版本是最新發布的Hadoop-0.21.0版本,其中一些Hadoop命令已發生變化,為方便以后學習,這里均采用最新命令。具體安裝及配置過程如下:

1 機器配置說明

總共有3台機器:hzau01、hzau02、hzau03

IP地址分別為:192.168.0.4、192.168.0.17、192.168.0.6

操作系統為:Linux2.6.33.3-85.fc13.i686.PAE

jdk版本為:jdk1.6.0_23

hadoop版本為:hadoop-0.21.0

hzau01作為NameNode、JobTracker,其他兩台台作為DataNode、TaskTracker

2  查看機器間是否能相互通信(使用ping命令)

用root登錄,在NameNode上修改/etc/hosts文件,加入三台機器的IP地址和機器名,如下:

192.168.0.4  hzau01

192.168.0.17  hzau02

192.168.0.6  hzau03

      設置好后驗證下各機器間是否ping通,用機器名或是IP地址都可以,例如ping hzau02或ping 192.168.0.17

Hadoop要求所有機器上hadoop的部署目錄結構要相同並且有一個相同的用戶名的帳戶,我的默認路徑為/home/garon

3  ssh設置及關閉防火牆

1)fedora裝好后默認啟動sshd服務,如果不確定的話可以查一下 [garon@hzau01 ~]$ service sshd status

如沒有啟動的話,先啟動 [root@hzau01 ~]# service sshd start

建立ssh無密碼登錄,在NameNode上 [garon@hzau01 ~]ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa(''為兩個單引號)

會在~/.ssh/生成兩個文件:id_dsa和id_dsa.pub,這兩是成對出現的,把id_dsa.pub文件追加到DataNode上的authorized_keys

[garon@hzau01 ~]$ scp ~/.ssh/id_dsa.pub hzau02:/home/garon/.ssh (注意其中目標機器后面的:與要傳到的文件路徑之間沒有空格,即sc706:與/home/hadoop/之間沒有空格)

   scp ~/.ssh/id_dsa.pub hzau03:/home/garon/.ssh

登錄到DataNode上,[garon@hzau02 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ,其余一台一樣,注意:追加完后必須修改NameNode和DataNode上的.ssh和authorized_keys的權限,chmod命令,參數600,完成后測試下,例如ssh hzau02時不需要密碼就可以登錄,就可以知道ssh設置成功。

2)關閉防火牆(NameNode和DataNode都必須關閉)

 [root@hzau01 ~]# service iptables stop

注意:每次重新開機啟動hadoop前都必須關閉

4 安裝jdk1.6(集群中機子都一樣)

下載jdk-6u23-ea-bin-b03-linux-i586-18_oct_2010.bin,之后直接安裝,我的安裝路徑為:/usr/java/jdk1.6.0_23,安裝后添加如下語句到/etc/profile中:

export JAVA_HOME="/usr/java/jdk1.6.0_23"

export JRE_HOME=/usr/java/jdk1.6.0_23/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

5 安裝hadoop(集群中機子都一樣)

在官網http://apache.etoak.com//hadoop/core/下載hadoop-0.21.0.tar.gz

[garon@hzau01 ~]$ tar xzvf hadoop-0.21.0.tar.gz

將hadoop的安裝路徑添加到/etc/profile中:

export HADOOP_HOME=/home/garon/hadoop-0.21.0

export PATH=$HADOOP_HOME/bin:$PATH

為了讓/etc/profile生效,source一下 [garon@hzau01 ~]$ source /etc/profile

6 配置hadoop

其配置文件在/conf目錄下

1)配置JAVA環境

[garon@hzau01 ~]$$ vi ~/hadoop/hadoop-0.21.0/conf/hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.6.0_23

2)配置conf/core-site.xml、conf/hdfs-site.xml、conf/mapred-site.xml文件

[garon@hzau01 hadoop-0.21.0]$ vi conf/core-site.xml

<configuration>

     <property>

          <name>hadoop.tmp.dir</name>

          <value>/home/garon/hadoopgaron</value>

     </property>

     <property>

          <name>fs.default.name</name>

          <value>hdfs://hzau01/</value>

     </property>

</configuration>

[garon@hzau01 hadoop-0.21.0]$ vi conf/mapred-site.xml

<configuration>

     <property>

          <name>mapred.jobtracker.address</name>

          <value>hzau01:9001</value>

     </property>

</configuration>

[garon@hzau01 hadoop-0.21.0]$ vi conf/hdfs-site.xml

<configuration>

     <property>

          <name>dfs.name.dir</name>

          <value>/home/garon/hadoopname</value>

     </property>

     <property>

          <name>dfs.data.dir</name>

          <value>/home/garon/hadoopdata</value>

     </property>

     <property>

          <name>dfs.replication</name>

          <value>1</value>

     </property>

</configuration>

3)將NameNode上完整的hadoop拷貝到DataNode上,可先將其進行壓縮后直接scp過去或是用盤拷貝過去

4) 配置NameNode上的conf/masters和conf/slaves

masters:192.168.0.4

slaves:192.168.0.17

192.168.0.6

7 運行hadoop

1)格式化文件系統

[garon@hzau01 bin]$ hdfs namenode -format

注意:格式化時要防止NameNode的namespace ID與DataNode的namespace ID的不一致,因為每格式化一次會產生Name、Data、tmp等臨時文件記錄信息,多次格式化會產生很多,會導致ID的不同,造成hadoop不能運行

2)啟動hadoop

[garon@hzau01 bin]$ start-dfs.sh

[garon@hzau01 bin]$ start-mapred.sh

3)用jps命令查看進程,NameNode上的結果如下:

5334 JobTracker

5215 SecondaryNameNode

5449 Jps

5001 NameNode

4)查看集群狀態

[garon@hzau01 bin]$ hdfs dfsadmin -report

確保運行的DataNode個數是正確的,我的是2個,這樣可以查看哪個DataNode沒有運行

8 運行Wordcount.java程序

1)先在本地磁盤上建立兩個文件f1和f2

[garon@hzau01 bin]$ echo ”Hello world Bye world" > ~/input/f1

[garon@hzau01 bin]$ echo ”hello hadoop bye hadoop” > ~/input/f2

2)在hdfs上建立一個input目錄

[garon@hzau01 bin]$ hadoop fs -mkdir /tmp/input

3)將f1和f2拷貝到hdfs的input目錄下

[garon@hzau01 bin]$ hadoop fs -put /home/garon/input /tmp

4)查看hdfs上有沒有f1,f2

[garon@hzau01 bin]$ hadoop fs -ls /tmp/input

5)執行wordcount(確保hdfs上沒有output目錄)

[garon@hzau01 bin]$ hadoop jar ../hadoop-mapred-examples-0.21.0.jar wordcount /tmp/input /output

6)運行完成,查看結果

       [garon@hzau01 bin]$ hadoop fs -cat /output/part-r-00000

       Bye        1

       Hello        1

       bye        1

       hadoop   2

       hello        1

       world 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM