hadoop集群環境的搭建


       今天終於把hadoop集群環境給搭建起來了,能夠運行單詞統計的示例程序了。

集群信息如下:

主機名

Hadoop角色

Hadoop jps命令結果

Hadoop用戶

Hadoop安裝目錄

master

Master

slaves

NameNode

DataNode

JobTracker

TaskTracker

SecondaryNameNode

創建相同的用戶的組名:hadoop。

安裝hadoop-0.20.2時使用hadoop用戶,並且hadoop的文件夾歸屬也是hadoop:hadoop

/opt/hadoop

slave1

slaves

DataNode

TaskTracker

slave2

slaves

DataNode

TaskTracker

  注:master即使master又是slave.

搭建步驟如下:

  一、首先是搞好master

  1、創建用戶組

    groupadd hadoop  添加一個組

    useradd hadoop -g hadoop  添加用戶

  2、jdk的安裝

    這里安裝的版本是jdk-7u9-linux-i586.tar.gz ,使用 tar -zsvf jdk-7u9-linux-i586.tar.gz  -C /opt/  命令將其解壓到/opt目錄下,並將解壓后的文件夾jdk-7u9-linux-i586改名為java.

    jdk安裝好就要配置環境變量了,使用vi /etc/profile命令編輯添加如下內容:

    export JAVA_HOME=/opt/java/jdk
    exprot PATH=$JAVA_HOME/bin:$PATH

    配置好之后要用命令source /etc/profile使配置文件生效,這樣jdk就安裝完畢了。安裝完之后不要忘了將所有者設置為hadoop。

使用命令chown -R hadoop:hadoop java/

  3.hadoop的安裝

    hadoop的版本是hadoop-0.20.2.tar.gz,也把它解壓到/opt目錄下面,改名為hadoop。

    hadoop也要設置環境變量,使用vi /etc/profile命令編輯添加如下內容:

    export HADOOP_HOME=/opt/hadoop

    export PATH=$HADOOP_HOME/bin:$PATH

    同樣也要執行source /etc/profile使配置文件生效,然后執行命令使用命令chown -R hadoop:hadoop hadoop/將其所有者改為hadoop

  4、修改地址解析文件/etc/hosts,加入

    192.168.137.110 master

    192.168.137.111 slave1

    192.168.137.112 slave2

  5、修改hadoop的配置文件

  首先切換到hadoop用戶,su hadoop

  ①修改hadoop目錄下的conf/hadoop-env.sh文件

    加入java的安裝路徑export JAVA_HOME=/opt/java/jdk

  ②把hadoop目錄下的conf/core-site.xml文件修改成如下:

 1 <property>
 2   <name>hadoop.tmp.dir</name>
 3   <value>/hadoop</value>
 4 </property>
 5 <property>
 6   <name>fs.default.name</name>
 7   <value>hdfs://master:9000</value>
 8 </property>
 9 <property> 
10   <name>dfs.name.dir</name>           
11   <value>/hadoop/name</value> 
12 </property> 

  ③把hadoop目錄下的conf/ hdfs-site.xml文件修改成如下:

1 <property>
2     <name>dfs.replication</name>  
3     <value>3</value>
4 </property>
5 <property>
6     <name>dfs.data.dir</name>  
7     <value>/hadoop/data</value>
8 </property>

  ④把hadoop目錄下的conf/ mapred-site.xml文件修改成如下:

 1 <property>
 2     <name>mapred.job.tracker</name>  
 3     <value>master:9001</value>
 4 </property>
 5 <property>
 6     <name>mapred.system.dir</name>  
 7     <value>/hadoop/mapred_system</value>
 8 </property>
 9 <property>
10     <name>mapred.local.dir</name>  
11     <value>/hadoop/mapred_local</value>
12 </property>

  ⑤把hadoop目錄下的conf/ masters文件修改成如下:

    master

  ⑥把hadoop目錄下的conf/ slaves文件修改成如下:

    master

    slave1

    slave2

  6、復制虛擬機

      我使用Virtual Box的克隆功能,將主機master完全克隆兩份:slave1和slave2,並修改相應的主機名和IP地址,這樣就可以簡單地保持hadoop環境基本配置相同。

  7、SSH設置無密碼驗證

      切換到Hadoop用戶,在Hadoop家目錄下面創建.ssh目錄,並在master節點上生成密鑰對:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa   。然后一直按[Enter]鍵,按默認的選項生成密鑰對保存在.ssh/id_rsa文件中。

    然后執行如下命令:

$ ssh ~/.ssh

$ cp id_rsa.pub authorized_keys

$ scp authorized_keys slave1:/home/hadoop/.ssh

$ scp authorized_keys slave2:/home/hadoop/.ssh

    執行遠程復制文件的時候記得要把slave1和slave2的防火牆關掉。復制完畢后記得要到slave1和slave2去修改該文件的權限。

從master向slave1和slave2發起SSH連接,第一次登錄時需要輸入密碼,以后就不需要了。

$ ssh slave1

$ ssh slave2

我們只需要配置從master向slaves發起SSH連接不需要密碼就可以了,但這樣只能在master(即在主機master)啟動或關閉hadoop服務。

  8、運行hadoop

    使用Hadoop用戶,切換到hadoop/bin目錄下

    格式化分布式文件系統./hadoop namenode -format

    執行命令./start-all.sh啟動hadoop

    在master上執行jps命令查看運行的進程如下:

[hadoop@master hadoop]$ jps
3200 SecondaryNameNode
3271 JobTracker
3370 TaskTracker
3002 NameNode
3106 DataNode
5687 Jps

    在slave1和slave2上執行jps結果如下:

[hadoop@slave1 ~]$ jps
1477 DataNode
3337 Jps
1547 TaskTracker

    訪問http://master:50070可以查看分布式文件系統的狀態

  9、運行單詞統計程序

    WordCount是hadoop自帶的實例,統計一批文本文件中各單詞出現的資料,輸出到指定的output目錄中,輸出目錄如果已經存在會報錯。

$ cd /opt/hadoop
$ hadoop fs -mkdir input
$ hadoop fs -copyFromLocal /opt/hadoop/*.txt input/
$ hadoop jar hadoop-0.20.2-examples.jar wordcount input output
$ hadoop fs -cat output/*    #最后查看結果

運行結果如下:

13/06/16 19:32:26 INFO input.FileInputFormat: Total input paths to process : 4
13/06/16 19:32:26 INFO mapred.JobClient: Running job: job_201306161739_0002
13/06/16 19:32:27 INFO mapred.JobClient:  map 0% reduce 0%
13/06/16 19:32:35 INFO mapred.JobClient:  map 50% reduce 0%
13/06/16 19:32:36 INFO mapred.JobClient:  map 100% reduce 0%
13/06/16 19:32:47 INFO mapred.JobClient:  map 100% reduce 100%
13/06/16 19:32:49 INFO mapred.JobClient: Job complete: job_201306161739_0002
13/06/16 19:32:49 INFO mapred.JobClient: Counters: 18
13/06/16 19:32:49 INFO mapred.JobClient:   Job Counters 
13/06/16 19:32:49 INFO mapred.JobClient:     Launched reduce tasks=1
13/06/16 19:32:49 INFO mapred.JobClient:     Rack-local map tasks=2
13/06/16 19:32:49 INFO mapred.JobClient:     Launched map tasks=4
13/06/16 19:32:49 INFO mapred.JobClient:     Data-local map tasks=2
13/06/16 19:32:49 INFO mapred.JobClient:   FileSystemCounters
13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_READ=179182
13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_READ=363457
13/06/16 19:32:49 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=358510
13/06/16 19:32:49 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=133548
13/06/16 19:32:49 INFO mapred.JobClient:   Map-Reduce Framework
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input groups=10500
13/06/16 19:32:49 INFO mapred.JobClient:     Combine output records=10840
13/06/16 19:32:49 INFO mapred.JobClient:     Map input records=8968
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce shuffle bytes=179200
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce output records=10500
13/06/16 19:32:49 INFO mapred.JobClient:     Spilled Records=21680
13/06/16 19:32:49 INFO mapred.JobClient:     Map output bytes=524840
13/06/16 19:32:49 INFO mapred.JobClient:     Combine input records=47258
13/06/16 19:32:49 INFO mapred.JobClient:     Map output records=47258
13/06/16 19:32:49 INFO mapred.JobClient:     Reduce input records=10840

  運行該程序一定得注意將slave1和slave2的防火牆給關閉,否則會報異常的。

  


免責聲明!

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



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