配置環境
配置前的說明
部署偽分布式與集群式Hadoop的絕大部分操作都是一樣的,細節上區別在於集群式是在兩台機子上部署的,兩台機子都要執行下列操作,而偽分布式都是在一台機子上操作,以下全部操作如沒有特別說明,則偽分布式操作與集群式操作等同。
環境說明
偽分布式Hadoop
l 本次hadoop配置的為偽分布模式,即在一個機子上作為namenode,又作為datanode。
l 操作系統:CentOS5.5
l JDK:1.6.0_26
l Hadoop:hadoop-0.21.0
集群分布式Hadoop
l 本次hadoop配置的為集群分布模式,即在一個機子上作為namenode,另一台機子作為datanode。
l 操作系統:CentOS5.5
l JDK:1.6.0_26
l Hadoop:hadoop-0.21.0
l 網絡配置:
網絡配置
查看主機名
使用下面命令進行查看主機名,若要更改,請查看下一步操作。
hostname
修改主機名
第一步,查看主機IP地址。
用下面命令即可查看,本機IP為192.168.1.101(以下操作請使用root用戶方可執行)
ifconfig
第二步,若想更改主機名,則可以通過修改文件“/etc/sysconfig/network”中的HOSTNAME后面的值,即可改成我們想要的名字。
用下面命令進行修改主機名。
nano /etc/sysconfig/network
第三步,修改文件“/etc/hosts”。
使用命令打開后更改為如圖所示的樣子。將原有的全部注釋(前面加#),namenode為第一個,datanode為第二個,因為偽分布式模式是namenode和datanode為同一個的,所以兩個都是一樣。
nano /etc/hosts
集群模式則修改為如圖所示。(兩個機子修改為一樣的,第一個為namenode,第二個datanode)
SSH無密碼驗證配置
關於SSH服務
還要安裝rsync,執行命令sudo yum install rsync
創建hadoop用戶
使用root用戶創建hadoop用戶,依次執行下列命令即可。(集群模式則每台機器都需要這樣操作)
useradd hadoop(新增用戶)
passwd hadoop (輸入兩次密碼,但輸入期間是無任何字符顯示的)
生成SSH密鑰
注銷,切換到用戶hadoop下,執行下列命令。
cd /home/hadoop
ssh-keygen -t rsa(一路回車,選擇默認的保存路徑)
進入.ssh目錄:cd .ssh
cp id_rsa.pub authorized_keys
ssh 你的主機名
不需要輸入密碼即為成功,輸入exit退出,若要輸入密碼,則在.ssh目錄下執行命令chmod 600 authorized_keys后即可。
上述為偽分布式SSH配置成功,若為集群式還需要下列一個操作方可。
將namenode上的公鑰拷貝到datanode,namenode機器在hadoop用戶的用戶目錄下(/home/hadoop)下執行命令ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@(datanode的主機名)。
執行命令SSH datanode的主機名。若不需要密碼則為成功。
JDK配置
下載JDK
使用root用戶登錄后,執行命令yum install jdk。若找不到,則去官網下載(https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u22-oth-JPR@CDS-CDS_Developer)
安裝JDK
新建目錄/usr/java,將源碼包jdk-6u22-linux-i586.bin復制到該目錄下,執行命令chmod a+x jdk-6u22-linux-i586.bin。
執行命令 ./jdk-6u22-linux-i586.bin進行安裝。
配置環境變量
修改文件“/etc/profile”來添加環境變量。執行下面命令打開文件。
nano /etc/profile
在文件最后添加下面幾行:
export JAVA_HOME=/usr/java/jdk1.6.0_26
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
source /etc/profile使變量生效。
驗證安裝成功
執行命令java –version可得
若不成功則查看環境變量是否設置錯誤。
Hadoop配置
安裝hadoop
以下操作若不能執行,則使用visudo(該命令需要root權限)給hadoop用戶添加最高權限,發生權限不足時,在每條命令前加sudo即可。
如圖所示。該命令使用vi編輯器,若不熟悉操作則按77G后按i鍵
添加一行hadoop ALL=(ALL) ALL后按esc鍵,輸入:wq即可保存退出。
注銷,切換到hadoop用戶下。新建目錄sudo mkdir /usr/local/hadoop,
將hadoop-0.21.0.tar.gz解壓縮到該目錄下,在壓縮包所在的文件夾下執行sudo tar -xvzf hadoop-0.21.0.tar.gz –C /usr/local/hadoop
配置環境變量
修改/etc/profile文件,在文件最后添加兩行。
export HADOOP_HOME=/usr/local/hadoop/hadoop-0.21.0
export PATH=$HADOOP_HOME/bin:$PATH
配置/usr/local/hadoop/hadoop-0.21.0/conf/hadoop-env.sh文件,在文件最后添加JAVA_HOME環境變量,export JAVA_HOME=/usr/java/jdk1.6.0_26/
配置master和slave
兩個文件在/usr/local/hadoop/hadoop-0.21.0/conf/下面,
master文件填寫
192.168.1.101(namenode的IP)
slave文件填寫
192.168.1.101(datanode的IP)
因為是偽分布,所以都一樣,且只有一個。
若為集群,則為
master文件填寫
192.168.1.147(namenode的IP)
slave文件填寫
192.168.1.103(datanode的IP)
配置三個xml文件
三個xml文件都是在/usr/local/hadoop/hadoop-0.21.0/conf/
配置core-site.xml
創建文件夾mkdir /usr/hadoop/hadoop-0.21.0/tmp
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://yeweipeng(你的master機器名):9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/hadoop-0.21.0/tmp</value>
</property>
</configuration>
配置 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1(datanode的數目)</value>
</property>
</configuration>
配置 mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>yeweipeng(你的master機器名):9001</value>
</property>
</configuration>
啟動和測試Hadoop
准備工作
使用root權限關閉防火牆,執行/etc/init.d/iptables stop,運行命令/etc/init.d/iptables status查看防火牆狀態。
使用hadoop用戶,將目錄切換到/usr/local/hadoop/hadoop-0.21.0/bin下,格式化目錄節點,hadoop namenode –format。
集群模式,上述兩個操作只需要namenode機器操作,datanode則不需要。
啟動hadoop
在/usr/local/hadoop/hadoop-0.21.0/bin下執行start-all.sh啟動hadoop。
用jps查看進程,如圖所示有六個進程則為正確(偽分布式)
若為集群則在namenode機器上有4個進程。分別是JobTracker,NameNode,Jps,SecondaryNameNode。而datanode有3個,分別是TaskTracker,DataNode,Jps。
網頁查看集群
打開http://yeweipeng(主機名):50070查看節點狀況
打開http://yeweipeng(主機名):50030查看job狀況 ;
測試
創建目錄haoop fs -mkdir test
上傳haoop fs -put 你要上傳的目錄
下載haoop fs -get 雲端的目錄 本地目錄
配置中出現的錯誤
問題:啟動成功后,發現在master查看live nodes為0
解決方案如下:
將文件/etc/hosts內原有的文件內容注釋掉,添加namenode和datanode的IP地址與主機名。
問題:JAVA_HOME is not set
解決方案如下:
配置/conf/hadoop-env.sh文件時,只是修改了JAVA_HOME的值,並沒有將前面的注釋號#刪除掉,所以導致此種問題。
問題:啟動hadoop后,執行jps命令只有一個jps進程
解決方案如下:
只有一個進程的原因在於三個xml文件,master,slave的設置錯誤。
1. 在配置過程的xml文件我們將主機名都寫為master導致錯誤,則將其改為namenode的主機名方可。
2. master上只能有namenode的IP地址,不得有datanode的地址。同理,slave上只能有datanode的IP地址,不得有namenode的。
問題:偽分布式配置SSH后,無論如何都需要輸入密碼
解決方案如下:
更改authorized_keys的權限為600
chmod 600 authorized_keys
參考資料
http://blog.csdn.net/hyclq/article/details/6095904
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
http://blog.csdn.net/zhaogezhuoyuezhao/article/details/7328313