Linux CentOS下Hadoop僞分佈模式安裝筆記

一. 概要
       經過幾天的調試,終於在Linux Cent OS 5.0下成功搭建Hadoop測試環境。本次測試在一臺服務器上進行僞分佈式搭建。Hadoop 僞分佈式模式是在單機上模擬 Hadoop 分佈式,單機上的分佈式並不是真正的僞分佈式,而是使用線程模擬分佈式。Hadoop 本身是無法區分僞分佈式和分佈式的,兩種配置也很相似,唯一不同的地方是僞分佈式是在單機器上配置,數據節點和名字節點均是一個機器。雖然Hadoop的安裝步驟並不複雜,但是我在安裝期間還是遇到了很多瑣碎的問題,現將自己搭建Hadoop的詳細過程和遇到的問題記錄下來。
 
二. 環境搭建
      搭建測試環境所需的軟件包括:jdk1.6.0_20、hadoop-0.20.2.tar.gz。測試服務器操作系統Linux Cent OS 5.0。
 
1.  SSH無密碼驗證配置
     Hadoop 需要使用SSH 協議,namenode 將使用SSH 協議啓動 namenode和datanode 進程,僞分佈式模式數據節點和名稱節點均是本身,必須配置 SSH localhost無密碼驗證。
    用root用戶登錄,在家目錄下執行如下命令:ssh-keygen -t rsa 
[root@master ~]# ssh-keygen -t  rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  & 按回車默認路徑 &
Created directory '/root/.ssh'.  &創建/root/.ssh目錄&
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master
     通過以上命令將在/root/.ssh/ 目錄下生成id_rsa私鑰和id_rsa.pub公鑰。進入/root/.ssh目錄在namenode節點下做如下配置:
[root@master .ssh]# cat id_rsa.pub > authorized_keys
配置完畢,可通過ssh 本機IP 測試是否需要密碼登錄。
 
2. JDK安裝及Java環境變量的配置
2.1 JDK安裝
     root 用戶登陸,新建文件夾 /usr/program ,下載 JDK 安裝包
jdk-6u13-linux-i586.bin,複製到目錄/usr/ program 下,在命令行進入該目錄,執行命令“./ jdk-6u20-linux-i586.bin”,命令運行完畢,將在目錄下生成文件夾jdk1.6.0_20,安裝完畢。 
2.2 java環境變量配置
        root 用戶登陸,命令行中執行命令“vi /etc/profile”,並加入以下內容,配置環境變量(注意/etc/profile 這個文件很重要,後面 Hadoop 的配置還會用到)。 
# set java environment
   export JAVA_HOME=/usr/program/jdk1.6.0_20
   export JRE_HOME=/usr/program/jdk1.6.0_20/jre
   export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
在vi編輯器增加以上內容後保存退出,並執行以下命令使配置生效
    chmod +x  /etc/profile ;增加執行權限
    source  /etc/profile ;
配置完畢後,在命令行中輸入java -version,如出現下列信息說明java環境安裝成功。
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)
 
2. Hadoop配置
   下載 hadoop-0.20.2.tar.gz,將其解壓到/usr/local/hadoop 目錄下,解壓後目錄形式是/usr/local/hadoop/hadoop-0.20.2。使用如下命令:
  tar zxvf  hadoop-0.19.1.tar.gz 進行hadoop壓縮文件解壓。
2.1   進入/usr/local/hadoop/hadoop-0.20.2/conf, 配置Hadoop配置文件
2.1.1 配置hadoop-env.sh文件
添加 # set java environment
             export JAVA_HOME=/usr/program/jdk1.6.0_20
編輯後保存退出。
 
2.1.2 配置core-site.xml
[root@master conf]# vi core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
   <property>
     <name>fs.default.name</name>
     <value>hdfs://202.173.253.36:9000/</value>
   </property>
   <property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/local/hadoop/hadooptmp</value>
   </property>
</configuration>
 
2.1.3 配置hdfs-site.xml
[root@master conf]# vi  hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/usr/local/hadoop/hdfs/name</value>
  </property>
  <property>
     <name>dfs.data.dir</name>
     <value>/usr/local/hadoop/hdfs/data</value>
  </property>
  <property>
     <name>dfs.replication</name>
     <value>1</value>
  </property>
</configuration>
    
2.1.4 配置mapred-site.xml
[root@master conf]# vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
  <property>
     <name>mapred.job.tracker</name>
     <value>202.173.253.36:9001</value>
  </property>
  <property>
     <name>mapred.local.dir</name>
     <value>/usr/local/hadoop/mapred/local</value>
  </property>
  <property>
     <name>mapred.system.dir</name>
     <value>/tmp/hadoop/mapred/system</value>
  </property>
</configuration>
 
2.1.5 配置masters文件和slaves文件
[root@master conf]# vi masters
202.173.253.36
[root@master conf]# vi slaves
202.173.253.36
注:因爲在僞分佈模式下,作爲master的namenode與作爲slave的datanode是同一臺服務器,所以配置文件中的ip是一樣的。
 
2.1.6 編輯主機名
[root@master ~]# vi /etc/hosts
# Do not remove the following line, or various programs
 that require network functionality will fail.
127.0.0.1                      localhost
202.173.253.36            master
202.173.253.36            slave
注:因爲是在僞分佈模式下,所以master與slave是一臺機
 
2.2 Hadoop啓動
2.2.1 進入 /usr/local/hadoop/hadoop-0.20.2/bin目錄下,格式化namenode
[root@master bin]# hadoop namenode -format
10/07/19 10:46:41 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/202.173.253.36
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
Re-format filesystem in /usr/local/hadoop/hdfs/name ? (Y or N) Y
10/07/19 10:46:43 INFO namenode.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel
10/07/19 10:46:43 INFO namenode.FSNamesystem: supergroup=supergroup
10/07/19 10:46:43 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/07/19 10:46:43 INFO common.Storage: Image file of size 94 saved in 0 seconds.
10/07/19 10:46:43 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/name has been successfully formatted.
10/07/19 10:46:43 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/202.173.253.36
************************************************************/ 
 2.2.2 啓動hadoop所有進程
在/usr/local/hadoop/hadoop-0.20.2/bin 目錄下,執行start-all.sh命令
啓動完成後,可用jps命令查看hadoop進程是否啓動完全。正常情況下應該有如下進程:
10910 NameNode
11431 Jps
11176 SecondaryNameNode
11053 DataNode
11254 JobTracker
11378 TaskTracker  
       我在搭建過程中,在此環節出現的問題最多,經常出現啓動進程不完整的情況,要不是datanode無法正常啓動,就是namenode或是TaskTracker啓動異常。解決的方式如下:
1.在Linux下關閉防火牆:使用service iptables stop命令;
2.再次對namenode進行格式化:在/usr/local/hadoop/hadoop-0.20.2/bin 目錄下執行hadoop namenode -format命令
3.對服務器進行重啓
4.查看datanode或是namenode對應的日誌文件,日誌文件保存在/usr/local/hadoop/hadoop-0.20.2/logs目錄下。仔細查看日誌報錯的原因,(上次日誌報錯的信息忘記了)解決方法是進入/usr/local/hadoop/hdfs/name 和usr/local/hadoop/hdfs/data目錄下,將目錄下的文件全部刪除。
5.再次在/bin目錄下用start-all.sh命令啓動所有進程,通過以上的幾個方法應該能解決進程啓動不完全的問題了。
 
2.2.3  查看集羣狀態
在 bin目錄下執行:hadoop dfsadmin  -report
[root@master bin]# hadoop dfsadmin -report
Configured Capacity: 304427253760 (283.52 GB)
Present Capacity: 282767941632 (263.35 GB)
DFS Remaining: 282767904768 (263.35 GB)
DFS Used: 36864 (36 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 1 (1 total, 0 dead)
Name: 202.173.253.36:50010
Decommission Status : Normal
Configured Capacity: 304427253760 (283.52 GB)
DFS Used: 36864 (36 KB)
Non DFS Used: 21659312128 (20.17 GB)
DFS Remaining: 282767904768(263.35 GB)
DFS Used%: 0%
DFS Remaining%: 92.89%
Last contact: Mon Jul 19 11:07:22 CST 2010
 
2.3 在WEB頁面下查看Hadoop工作情況
打開IE瀏覽器輸入部署Hadoop服務器的IP:
 
 
 
3. Hadop使用
一個測試例子wordcount
      計算輸入文本中詞語數量的程序。WordCount在Hadoop主目錄下的java程序包hadoop-0.20.2-examples.jar 中,執行步驟如下:
在/usr/local/hadoop/hadoop-0.20.2/bin/目錄下進行如下操作:
hadoop fs -mkdir  bxy(新建目錄名稱,可任意命名)
[root@master log]# hadoop fs -copyFromLocal secure.2 bxy
 (找一個任意文件將其copy到bxy文件夾) 
在/usr/local/hadoop/hadoop-0.20.2下執行:
[root@master hadoop-0.20.2]# hadoop jar hadoop-0.20.2-examples.jar wordcount bxy  output (提交作業,此處需注意bxy與output是一組任務,下次再執行wordcount程序,還要新建目錄bxy1與output1不能跟bxy與output重名)
執行完畢後,可進入web界面刷新查看running job及completed job的顯示。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章