1. 程式人生 > >centos下hadoop叢集搭建詳細過程

centos下hadoop叢集搭建詳細過程

Hadoop叢集搭建全過程

參考操作:課本劉鵬《雲端計算》,劉鵬《實戰hadoop》,上網google

需要軟體:VMware-workstation-9.0.exe;CentOS-6.4-i386-bin-DVD1.iso(3.51G,裡面的外掛比較全,VMtools都不用裝了,可以和windows直接設定共享資料夾,滑鼠也可以直接進出,還可以跨系統直接複製);

一、      安裝centos系統

按照常規安裝,配置如下:普通使用者wzw,密碼123456;超級使用者root,密碼123456;我安裝叢集使用的使用者是grid,密碼grid


1.1、安裝完成後,介面下調節解析度:perfercene——>display可以設定解析度;

有3種方法設定網路連線方式:

1螢幕右下角有個網路連線,雙擊即可設定bridged或者NAT方式,connect 等選項打勾;

2 在vmware下,VM——>setting——>network adapter設定 

3 直接在安裝linux的時候有選擇網路連線方式的選項。

說明:bridged橋接方式,和真實機下的ip地址以及子網掩碼,DNS的配置都是一致的。

1.2、配置ip:開啟終端,進行以下操作:

(這是在root使用者下登陸的)

$cat/etc/sysconfig/network-scripts/ifcfg-eth0

$vi/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO=static

ONBOOT="yes"

TYPE="Ethernet"

HWADDR=00:0C:29:AC:DE:B0

IPADDR=10.22.73.23

GATEWAY=10.22.73.1

DNS1=210.33.16.2

$service networkrestart

$ifconfig

$ifconfig -a

解釋:

上面就是ip配置,在我的實驗室的環境下的ip設定保持一致。

第一行是網絡卡名字

第二行是設定BOOTPROTO=static (預設是dhcp),手動配置的ip可以重啟後生效

HWADDR 是本機的實體地址,可以用命令ifconfig–a檢視,要求和本機一致

注意是ifconfig,而不是ipconfig

最後三行詩IP,子網掩碼和DNS

重啟後配置生效!

然後和windows機器ping一下,看是否能夠ping通

$ping 10.22.73.21

10.22.73.21是我的win7物理機的IP地址

1.3、虛擬機器下的linux和真實機win7共享資料夾

  在win7的E盤下,我建立了資料夾wshare1

  VMware下VM——>setting——>options——>sharefloders下設定找到E:\wshare1,對一些選項打上勾,applying即可。

進入linux終端後,可以在/mnt/hdfs/whare1/下看到我的win7下的檔案,並且可以拷貝到linux下,例如拷貝到/usr/java(這個java資料夾是你自己建立的$mkdir java

$cp /mnt/hdfs/whare1/test  /usr/java

二、      安裝SSH和java軟體(三臺機器下都分別安裝最好,

安裝的時候,為了是介面清晰,可以使用putty小軟體連線這3臺機器)

2.1、SSH無密碼驗證配置 
用root或者普通使用者wzw登入都行,需要使用哪個使用者無密碼驗證,就使用哪個使用者登入。在這個使用者的root目錄下執行如下命令:

$ssh-keygen -t rsa

通過以上命令將在/root/.ssh/ 目錄下生成id_rsa私鑰和id_rsa.pub公鑰。

$cd  /root/.ssh

$ls

若是.ssh目錄下有authorized_keys,則執行

$cat  id_rsa.pub > authorized_keys

若是.ssh目錄下沒有authorized_keys,則執行

$cp id_rsa.pub  authorized_keys

一般是拷貝
配置完畢,可通過:ssh 本機IP    測試是否需要密碼登入。 

$ ssh 10.22.73.23 可以實現用SSH連線並且不需要出入密碼。

注意:10.22.73.23是本linux系統的ip地址,也可以使其他機器的IP,執行這個命令相當於登到了其他機器上,執行exit後才能回到原先的使用者下!注意啊

另外注意拷貝或者追加的是id_rsa.pub而不是id_rsa,名字一定是authorized_keys

測試過程如下:

$ ssh 10.22.73.23

Are you sure you want to continue connecting (yes/no)?yes

$ exit               //要是不退出,就是登入到這個IP對應的機器了

$ ssh 10.22.73.23     //第二次再登陸,就不需要輸入yes了,便是成功了

看!可以無密碼登入了。要是不成功,就把.ssh 刪除(rm –rf .ssh),重新配置。

2.2、 JDK安裝及Java環境變數的配置 (注意對應自己的安裝目錄和版本)

JDK安裝 ,首先在JDK官網下載 JDK 安裝包 的linux版本
root 使用者登陸,新建資料夾 /usr/java ,把jdk安裝包(jdk-6u13-linux-i586.bin)放到/usr/java

a)      

$cd  /usr

$mkdir  java

b)    下載的jdk-6u13-linux-i586.bin,通過資料夾共享,複製到目錄/usr/java 下,在命令列進入該目錄,執行命令“./ jdk-6u43-linux-i586.bin”

有時候需要增加可執行許可權,一般情況下不需要下面的操作。

[[email protected] java]#chmod a+xjdk-6u38-linux-x64.bin

[[email protected] java]# ls-lrt

total 70376

-rwxr-xr-x. 1 root root72058033 Jan 2907:21 jdk-6u38-linux-x64.bin

c)      

$cp  /mnt/hdfs/wshare1/ jdk-6u43-linux-i586.bin  /usr/java

$cd  /usr/java

$./ jdk-6u43-linux-i586.bin

命令執行完畢,將在目錄下生成資料夾jdk1.6.0_43,安裝完畢。 

d)         java環境變數配置 

root 使用者登陸,命令列中執行命令“vi /etc/profile”,並新增以下內容,配置環境變數(注意/etc/profile 這個檔案很重要,後面 Hadoop 的配置還會用到)。 (註釋:注意對應自己的安裝目錄和版本)

$vi /etc/profile

# set java environment //在profile最後面新增這一段

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

   exportJRE_HOME=/usr/java/jdk1.6.0_43/jre

   exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

   exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

在vi編輯器增加以上內容後儲存退出,並執行以下命令使配置生效 

$chmod +x /etc/profile     //增加執行許可權 

    $source /etc/profile     //生效

配置完畢後,在命令列中輸入java -version,如出現下列資訊說明java環境安裝成功。 

$ java–version

java version "1.6.0_43"

Java(TM) SE RuntimeEnvironment (build 1.6.0_43-b02)

Java HotSpot(TM) Server VM(build 16.3-b01, mixed mode)

或者使用javac驗證

$javac

三、      Linux(CentOS)下完全分散式安裝hadoop

參考課本《雲端計算》劉鵬P204頁

總共三臺機器設定:

master主機名:cnamenode(專業人士直接使用當前機器的ip作為主機名,ip是10.22.73.23)

   Slaves主機名:cdata1和cdata2(2臺slave;ip分別是10.22.73.24和10.22.73.25)

每臺機器上都新增一個相同的普通使用者grid,密碼也為grid

為了簡單,三臺機器普通使用者下的安裝資料夾也一樣,如

都在/home/grid/wzwhadoop下安裝

注意:保證ip配置能用,各機器之間能夠ping通

對於hadoop ,不同的系統會有不同的節點劃分方式。在HDFS看來,節點分為Namenode和Datanode,其中Namenode只有一個,datanode可以有多個;在MapReduce看來,節點又分為jobtracker和tasktracker,其中jobtracker只有一個,而tasktacker可以有多個。namenode和jobtracker可以部署在不同的機器上,也可以部署在同一機器上。部署namenode和/或jobtracker的機器是master,其餘的都是slaves。使用者甚至可以將namenode、datanode、jobtacker、tasktracker都部署在一臺機器上。詳細的配置方法如下。

配置之前,確保所有主機的防火牆處於關閉狀態!!!一定要先關閉防火牆(所有的結點都要),否則後面的datanode啟動會失敗。

永久關閉防火牆: chkconfig   iptables off

[[email protected] ~]# /etc/init.d/iptables stop

iptables: Flushing firewall rules:                    [   OK   ]

iptables: Setting chains to policyACCEPT:filter            [  OK  ]

iptables: Unloading modules:                                        [  OK  ]

最好設定開機就不啟動防火牆:(我是這樣設定,防止以後出錯)

[[email protected] ~]# vi /etc/sysconfig/selinux

SELINUX=disable

(1)   配置NameNode和DataNode

配置成功的關鍵在於確保各機器上的主機名和IP地址之間能正確解析。修改每臺機器的/etc/hosts檔案,如果該臺機器作namenode用,則需要在檔案中新增叢集中所有機器的IP地址及其對應 主機名;如果該臺機器僅作為datanode用,則只需要在檔案中新增本機和namenode的IP地址及其對應的主機名。

對每臺機器,用root使用者登入,修改/etc/hosts

$vi /etc/hosts

[[email protected] /]# cat  /etc/hosts

127.0.0.1   localhost

10.22.73.23  cnamenode

10.22.73.24  cdata1

10.22.73.25  cdata2

第一行127.0.0.1環回地址也可以不要,有時候建議不要!

修改後,重新登入系統,才會出現[[email protected] /]的形式。

把另外2臺機器cdata1和cdata2作為DataNode節點,用它們的root使用者登入,分別配置它們的/etc/hosts。如下

[[email protected] /]# cat  /etc/hosts

127.0.0.1   localhost

10.22.73.24  cdata1

10.22.73.23  cnamenode

[[email protected] /]# cat  /etc/hosts

127.0.0.1   localhost

10.22.73.25  cdata2

10.22.73.23  cnamenode

(2)在所有使用者上建立相同的使用者grid,密碼grid

$useradd –m grid

$passwd grid

(3)SSH 配置:主要是實現master訪問各個slaves不需要輸入密碼。

用主機的grid使用者登入。具體步驟見本文第二部分安裝SSH。三臺機器獨自安裝,

再次敘述如下:

每個機器,就是每臺主機下都執行

$ssh-keygen -t rsa

生成.ssh目錄,這個目錄都有2項id_rsa和id_rsa.pub

這時候進入.ssh,執行

$cd .ssh

$cp id_rsa.pub authorized_keys

測試過程:

[[email protected] .ssh]$ ssh 10.22.73.25   //本機ip

Are you sure you want to continue connecting (yes/no)? yes    //第一次要輸入yes

[[email protected] ~]$ exit

[[email protected] .ssh]$ ssh 10.22.73.25

[[email protected] ~]$ exit

[[email protected] .ssh]$

這時候,master的.ssh中有三項,把master的id_rsa.pub分別複製到每個slavers上,並重新命名為master_rsa.pub

如下:登入cdata1

進入目錄.ssh

$cd .ssh

$scp cnamenode:~/.ssh/id_rsa.pub ./master_rsa.pub

[[email protected] .ssh]$ ls

authorized_keys  id_rsa  id_rsa.pub known_hosts  master_rsa.pub

[[email protected] .ssh]$ cat master_rsa.pub > authorized_keys

這時候,master就可以無密碼訪問cdata1了,測試如下:

登入到cnamenode主機:

[[email protected] .ssh]$ ssh 10.22.73.24

Last login: Wed Oct  9 20:03:56 2013from cnamenode

[[email protected] ~]$ exit

logout

Connection to 10.22.73.24 closed.

[[email protected] .ssh]$

對cdata2也進行同樣的操作。這裡不再寫了。

表面上看,這兩個結點的ssh免密碼登入已經配置成功,但是我們還需要對主結點master也要進行上面的同樣工作,這一步有點讓人困惑,但是這是有原因的,具體原因現在也說不太好,據說是真實物理結點時需要做這項工作,因為jobtracker有可能會分佈在其它結點上,jobtracker有不存在master結點上的可能性。

(4)在所有機器上配置Hadoop(使用普通使用者grid登入)

下面首先在cnamenode上配置,hadoop-1.2.0-bin.tar存在win7的E盤下E:\wshare1下,被linux自動掛載在/mnt/hdfs/wshare1下,先拷貝至linux的/home/grid/wzwhadoop下(wzwhadoop是我預先建立的目錄),再解壓,過程如下:

$cp /mnt/hdfs/wshare1/hadoop-1.2.0-bin.tar /home/grid/wzwhadoop

$cd /home/grid/wzwhadoop

$tar –zxvf hadoop-1.2.0-bin.tar

就生成了hadoop-1.2.0目錄,進入此目錄,可以看到conf,bin等一些配置目錄

$cd hadoop-1.2.0

(a)   編輯3個安裝檔案hadoop-1.2.0/conf目錄下的core-site.xml,hdfs-site.xml ,mapred-site.xml 如下:

[[email protected] conf]$ cat 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://cnamenode:9000</value>

 </property>

 <property>

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

 <value>/home/grid/hadooptmp</value>

</property>

</configuration>

[[email protected] conf]$  cathdfs-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.replication</name>

<value>1</value>

</property>

</configuration>

[[email protected] conf]$ cat 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>10.22.73.23:9001</value>

</property>

</configuration>

(b)編輯conf/masters,修改為master的主機名,每個主機名佔一行,此處即為cnamenode。

[[email protected] conf]$ cat masters

cnamenode

(c)編輯conf/slaves,加入所有的slaves的主機名,即cdata1和cdata2

[[email protected] conf]$ cat slaves

cdata1

cdata2

(d)把Hadoop安裝資料夾(hadoop-1.2.0)拷貝至cdata1和cdata2機器上

這時候,cdata1和cdata2機器都能ping通,並且實現了SSH無密碼驗證配置。

$scp  –r  hadoop-1.2.0 cdata1:/home/grid

$scp  –r  hadoop-1.2.0 cdata2:/home/grid

(e)分別編輯3臺機器上的conf/hadoop-env.sh檔案,將JAVA_HOME變數設定為各自JAVA安裝的根目錄,不同機器可以使用不同的java版本。(為了不產生混淆,最好都裝在相同目錄下,我就是這麼幹的,這裡的java一開始實在各自的超級使用者root下安裝配置的,詳見第二部分)

$vi hadoop-env.sh

配置hadoop-env.sh檔案 ,在檔案hadoop-env.sh的最後面新增以下環境變數

# set java environment

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

(註釋:注意修改成對應自己的java安裝目錄和版本)

現在hadoop叢集已經部署完成。如果要加入或者刪除節點,只需要修改NameNode的master和slaves檔案。

(5)hadoop執行

注意,在啟動守護程序之前,一定要先關閉防火牆(所有的結點都要),否則datanode啟動失敗。在root下修改。

[[email protected] ~]#/etc/init.d/iptables stop

iptables: Flushingfirewall rules:                           [ OK  ]

iptables: Setting chainsto policy ACCEPT:filter           [  OK  ]

iptables: Unloadingmodules:                               [ OK  ]

最好設定開機就不啟動防火牆:

[[email protected] ~]# vi/etc/sysconfig/selinux

SELINUX=disable

用普通使用者grid登入。格式化檔案系統,啟動守護程序的命令如下:

$cd  hadoop-1.2.0

$bin/hadoop namenode –format

執行結果如下:

[[email protected]]$ bin/hadoop namenode -format

13/10/10 05:03:50 INFOnamenode.NameNode: STARTUP_MSG:

/************************************************************

STARTUP_MSG: Starting NameNode

STARTUP_MSG:   host = cnamenode/10.22.73.23

STARTUP_MSG:   args = [-format]

STARTUP_MSG:   version = 1.2.0

STARTUP_MSG:   build =https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;compiled by 'hortonfo' on Mon May  6 06:59:37UTC 2013

STARTUP_MSG:   java = 1.6.0_43

************************************************************/

Re-format filesystem in/home/grid/hadooptmp/dfs/name ? (Y or N) Y

13/10/10 05:03:54 INFOutil.GSet: Computing capacity for map BlocksMap

13/10/10 05:03:54 INFOutil.GSet: VM type       = 32-bit

13/10/10 05:03:54 INFOutil.GSet: 2.0% max memory = 1013645312

13/10/10 05:03:54 INFOutil.GSet: capacity      = 2^22 = 4194304entries

13/10/10 05:03:54 INFOutil.GSet: recommended=4194304, actual=4194304

13/10/10 05:03:54 INFOnamenode.FSNamesystem: fsOwner=grid

13/10/10 05:03:54 INFOnamenode.FSNamesystem: supergroup=supergroup

13/10/10 05:03:54 INFOnamenode.FSNamesystem: isPermissionEnabled=true

13/10/10 05:03:54 INFOnamenode.FSNamesystem: dfs.block.invalidate.limit=100

13/10/10 05:03:54 INFOnamenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0min(s), accessTokenLifetime=0 min(s)

13/10/10 05:03:54 INFOnamenode.FSEditLog: dfs.namenode.edits.toleration.length = 0

13/10/10 05:03:54 INFOnamenode.NameNode: Caching file names occuring more than 10 times

13/10/10 05:03:54 INFOcommon.Storage: Image file of size 110 saved in 0 seconds.

13/10/10 05:03:54 INFOnamenode.FSEditLog: closing edit log: position=4, editlog=/home/grid/hadooptmp/dfs/name/current/edits

13/10/10 05:03:54 INFOnamenode.FSEditLog: close success: truncate to 4,editlog=/home/grid/hadooptmp/dfs/name/current/edits

13/10/10 05:03:54 INFOcommon.Storage: Storage directory /home/grid/hadooptmp/dfs/name has beensuccessfully formatted.

13/10/10 05:03:54 INFOnamenode.NameNode: SHUTDOWN_MSG:

/************************************************************

SHUTDOWN_MSG: Shuttingdown NameNode at cnamenode/10.22.73.23

************************************************************/

注意出現“successfully formatted”,說明格式化成功!接著

[[email protected]]$ bin/start-all.sh

starting namenode, loggingto/home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-namenode-cnamenode.out

cdata2: starting datanode,logging to /home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-datanode-cdata2.out

cdata1: starting datanode,logging to/home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-datanode-cdata1.out

cnamenode: startingsecondarynamenode, logging to /home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-secondarynamenode-cnamenode.out

starting jobtracker,logging to/home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-jobtracker-cnamenode.out

cdata1: startingtasktracker, logging to /home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-tasktracker-cdata1.out

cdata2: startingtasktracker, logging to/home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-tasktracker-cdata2.out

[[email protected]]$ jps

15127 Jps

14750 NameNode

14923 SecondaryNameNode

15010 JobTracker

Jps檢視程序有4項(JpsNameNode SecondaryNameNodeJobTracker)出現上述情況表示安裝成功!

在slaves下檢視,如下(包括jps有3個程序,必須要有DataNodeheTaskTracker):

[[email protected] hadoop-1.2.0]$ jps

7130 TaskTracker

7202 Jps

7040 DataNode

[[email protected] ~]$ jps

7145 TaskTracker

7217 Jps

7041 DataNode

註釋:當這項啟動不成功的時候,檢查:臨時資料夾hadooptmp有木有刪除;各機器防火牆有木有關閉;hadoop-grid-namenode-cnamenode.out等這些檔案的許可權有沒有chmod 777。後2個操作都是在root使用者下進行的

關閉hadoop程序,在cnamenode主機grid使用者下,進入hadoop安裝目錄下,如下:

$bin/stop-all.sh

再次啟動hadoop的時候,要重新格式化namenode,注意:格式化之前必須刪除namenode及datanode上的tmp資料夾,tmp資料夾就是core-site.xml檔案裡hadoop.tmp.dir所指定的資料夾。防止格式化造成的namespaceID不一致,不過格式化後hdfs上的資料會丟失。操作如下:

$cd /home/grid/

$rm –rf hadooptmp

(6)在瀏覽器下輸入地址檢視:

(7)執行wordcount例項。

假如資料夾/home/grid/下有個input.txt檔案。

[[email protected] hadoop-1.2.0]$ bin/hadoop dfs -put/home/grid/input.txt  in

[[email protected] hadoop-1.2.0]$ bin/hadoop dfs –ls

[[email protected] hadoop-1.2.0]$ bin/hadoop jar hadoop-examples-1.2.0.jarwordcount in out

// 可以統計數結果

[[email protected] hadoop-1.2.0]$ bin/hadoop dfs -cat out/*

也可以把檔案複製到本地檢視

[[email protected] hadoop-1.2.0]$ bin/hadoop dfs -get out output

[[email protected] hadoop-1.2.0]$cat output/*

停止hadoop守護程序。

[[email protected] hadoop-1.2.0]$ bin/stop-all.sh

stopping jobtracker

cdata2: stopping tasktracker

cdata1: stopping tasktracker

stopping namenode

cdata2: stopping datanode

cdata1: stopping datanode

cnamenode: stopping secondarynamenode 

附加:

可用到的命令:

$find –name 檔名           //查詢某個檔案在哪

安裝中有可能出現問題的幾大塊是:防火牆,ssh配置,java安裝,hadoop配置,檔案許可權賦予。可能出現的問題:

1、java到底安裝在超級使用者還是普通使用者?

我是安裝在超級使用者root下的,這樣修改環境變數更容易一些,不需要許可權的限制了。

2、防火牆:一定要先關閉所有機器的防火牆,最好設定成開機不啟動,如文中所述。

3、SSH配置,一定要安裝文中的步驟,不成功就刪除重新配置!在這我走了不少彎路。

4、hadoop配置,一定要注意每個細節,知道每個檔案代表的什麼意思。

5、檔案許可權賦予,文中也有提到。chmod這個命令實在root使用者下使用的!

6、其他問題:

1 datanode無法啟動,在master主節點機器上,/home/grid/hadoop安裝資料夾下,輸入$bin/hadoopdfsadmin -report檢視叢集啟動情況,發現datanode根本沒有起起來,或者格式化所有節點的時候,根本不successful

解決 :首先檢查各個xml配置檔案是否正確寫入,jdk環境變數是否寫了,ssh是否通,也可能提示你core-site.xml檔案裡面有錯誤,xml檔案裡第一行不能是空行,如果是自己寫的很有可能是最上面兩行之間有空行,或者全形字元,這時就從master主機中把同樣的檔案用scp命令傳到slave主機,覆蓋掉原來的檔案即可

以上操作都是在bin/stop-all.sh之下操作的,必須先停掉所有節點

刪除所有tmp資料夾和logs資料夾,tmp檔案就是core-site.xml檔案裡hadoop.tmp.dir所指定的資料夾,logs在/home/hadoop/hadoop安裝資料夾 下,然後再重新格式化所有節點,start-all.sh

2 master上NameNade,JobTrackerand SecondNamenode守護程序成功啟動,但是在node1和node2上的DatanNode沒有啟動成功,可能原因:  由於master的/etc/hosts配置中把主機名和127.0.0.1繫結,要把這項刪掉,並配置實際IP與主機名的對映,這樣namenode才能在正確監聽。最有可能是namenode和datanode的namespaceID不一致.

3 若出現:

[[email protected]]$ bin/start-all.sh

starting namenode, loggingto /home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-namenode-cnamenode.out

log4j:ERRORsetFile(null,true) call failed.

java.io.FileNotFoundException:/home/grid/wzwhadoop/hadoop-1.2.0/libexec/../logs/hadoop-grid-namenode-cnamenode.log(Permission denied)

      at java.io.FileOutputStream.openAppend(Native Method)

      atjava.io.FileOutputStream.<init>(FileOutputStream.java:192)

      atjava.io.FileOutputStream.<init>(FileOutputStream.java:116)

      at org.apache.log4j.FileAppender.setFile(FileAppender.java:290)

      atorg.apache.log4j.FileAppender.activateOptions(FileAppender.java:164)

解決方法:修改錯誤中提示的所有不能找到的logs裡檔案的許可權,之後重啟hadoop叢集(logs直接在hadoop安裝目錄下)

[[email protected]  logs]# chmod 777hadoop-grid-namenode-cnamenode.out

[[email protected]  logs]#chmod 777 hadoop-hadoop-jobtracker-grid.out.5
[[email protected]  logs]# chmod 777hadoop-hadoop-jobtracker-grid.log