天天看點

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

本文參考:http://www.it165.net/admin/html/201311/2045.html進行學習。

一.簡述:

Hadoop是一種分布式系統基礎架構,由Apache基金會開發。使用者可以在不了解分布式底層細節的情況下,開發分布式程式,充分利用叢集的威力高速運算和存儲。Hadoop 1.2.1版本下載下傳位址:http://apache.dataguru.cn/hadoop/common/hadoop-1.2.1/

本文章配置的是完全分布模式。

hadoop 三種運作模式:

單機模式:無需任何守護程序,所有程式在單JVM上執行

僞分布模式:守護程序運作在本地機器上。

完全分布模式:守護程序運作在一個叢集上。

二、準備安裝環境

本機: windows8.1企業版X64,上面裝有VMware vSphere Client。

測試伺服器:公司一台DELL PowerEdgeT110測試伺服器(上面安裝有VMwareVsphere Esxi5.1),在Esxi上面虛拟了3個centos6.4。

JDK: jdk1.7.0_45

叢集:一個master,兩個slave,主機名稱分别是node1,node2,node3.

機器名 IP 作用
Node1 192.168.1.191 NameNode,JobTraker
Node2 192.168.1.192 DataNode,TaskTraker
Node3 192.168.1.193

三 .安裝

1.修改主機名稱并設定hosts

設定主機名:Hostname node1(三台主機上分别設定)

            Hostname node2

          Hostname node3

修改hosts:Vim/etc/hosts,寫入下列内容(三台主機都要設定)

192.168.1.191 node1

192.168.1.192 node2

192.168.1.193 node3

然後保證互ping可以通。

2.清除防火牆規則和臨時關閉selinux。

防火牆設定:

儲存規則:iptables-save>iptables-script

清除規則:iptables –F

臨時關閉selinux :

使用指令setenforce 0

3.安裝JDK

1.)下載下傳JDK. 打開http://java.sun.com/javase/downloads/index.jsp

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置
Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

mkdir -p /usr/local/java/

tar -zxvf jdk-7u45-linux-x64.tar.gz

mv jdk1.7.0_45 /usr/local/java

修改/etc/profile,添加如下内容

JAVA_HOME=/usr/local/java/jdk1.7.0_45

JRE_HOME=$JAVA_HOME/jre

CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jar

PATH=$PATH:$HOME/bin:$JAVA_HOME:$JRE_HOME:$CLASSPATH:$JAVA_HOME/bin:/home/hadoop/hadoop-1.2.1/bin

export PATH

使配置生效

source /etc/profile

4.添加使用者.

在root權限下使用以下指令添加hadoop使用者,在三個虛拟機上都添加這個使用者

useradd hadoop

将下載下傳到的hadoop-1.2.1.tar檔案放到/home/hadoop/目錄下解壓,然後修改解壓後的檔案夾的權限,指令如下:

Tar -zxvf hadoop-1.2.1.tar

Chown -R hadoop:hadoop hadoop-1.2.1

5.配置SSH無密碼登入

在Hadoop啟動以後,Namenode是通過SSH(Secure Shell)來啟動和停止各個datanode上的各種守護程序的,這就須要在節點之間執行指令的時候是不須要輸入密碼的形式,故我們須要配置SSH運用無密碼公鑰認證的形式。

     以本文中的三台機器為例,現在node1是主節點,他須要連接配接node2和node3。須要确定每台機器上都安裝了ssh,并且datanode機器上sshd服務已經啟動。

[hadoop@node1 ~]$ ssh-keygen -t rsa

這個指令将為hadoop上的使用者hadoop生成其密鑰對,詢問其儲存路徑時直接回車采用預設路徑,當提示要為生成的密鑰輸入passphrase的時候,直接回車,也就是将其設定為空密碼。生成的密鑰對id_rsa,id_rsa.pub,預設存儲在/home/hadoop/.ssh目錄下然後将id_rsa.pub的内容複制到每個機器(也包括本機)的/home/hadoop/.ssh/authorized_keys檔案中,如果機器上已經有authorized_keys這個檔案了,就在檔案末尾加上id_rsa.pub中的内容,如果沒有authorized_keys這個檔案,直接複制過去就行。

下面是具體的過程:

1.)生成密鑰對

su hadoop切換hadoop使用者

cd /home/hadoop

ssh-keygen -t rsa

在/home/hadoop目錄下會生成一個隐藏的.ssh目錄。

ll -a

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

2.) 生成authorized_keys檔案并測試

進入.ssh檔案夾,然後将id_rsa.pub複制到authorized_keys檔案,

指令如下:

cd .ssh

cp id_rsa.pub authorized_keys #生成authorized_keys檔案

ssh localhost #測試無密碼登陸,第一可能需要密碼或者使用ssh node1指令。

注:在三台主機上都要執行上述指令。

3.)在node1、node2和node3上互換公鑰。

在node2和node3執行以下指令

scp authorized_keys hadoop@node1:/tmp

#複制authorized_keys到node1的tmp目錄中去

cat /tmp/authorized_keys>>/home/hadoop/.ssh/authorized_keys

#把公鑰追加到檔案後面。

現在node1上的authorized檔案已經包含了三台主機的公鑰。

最後把node1上的authorized_keys,再複制回node2和node3上。

scp /home/hadoop/.ssh/authorized_key root@node2:/home/hadoop/.ssh

4.)設定檔案權限并測試。

chmod 644 authorized_keys 此步非常重要,如果權限不對,則無密碼通路不成功。

測試三台主機之間無密碼互訪成功。

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

6.安裝hadoop

    将目前使用者切換到hadoop使用者,如果叢集内機器的環境完全一樣,可以在一台機器上配置好,然後把配置好的軟體即hadoop-0.20.203整個檔案夾拷貝到其他機器的相同位置即可。 可以将Master上的Hadoop通過scp拷貝到每一個Slave相同的目錄下,同時根據每一個Slave的Java_HOME 的不同修改其hadoop-env.sh檔案。

6.1)配置conf/hadoop-env.sh檔案

切換到hadoop-1.2.1/conf目錄下,添加JAVA_HOME路徑

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

6.2)配置/conf/core-site.xml

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

fs.default.name是NameNode的URI。hdfs://主機名:端口/

hadoop.tmp.dir :Hadoop的預設臨時路徑,這個最好配置,如果在新增節點或者其他情況下DataNode啟動不了,就删除此檔案中的tmp目錄即可。不過如果删除了NameNode機器此目錄,那麼就需要重新執行NameNode格式化的指令。

6.3)配置/conf/mapred-site.xml

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

mapred.job.tracker是JobTracker的主機(或者IP)和端口。主機:端口。其中/home/hadoop/hadoop_home/var目錄需要提前建立,并且注意用chown -R 指令來修改目錄權限。

6.4)配置/conf/hdfs-site.xml

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

   dfs.name.dir是NameNode持久存儲名字空間及事務日志的本地檔案系統路徑。 當這個值是一個逗号分割的目錄清單時,nametable資料将會被複制到所有目錄中做備援備份。

   dfs.replication是資料需要備份的數量,預設是3,如果此數大于叢集的機器數會出錯。

此處的name1和data1等目錄不能提前建立,如果提前建立會出問題。

6.5)配置master和slaves主從節點

配置conf/masters和conf/slaves來設定主從結點,注意最好使用主機名,并且保證機器之間通過主機名可以互相通路,每個主機名一行。

vi masters:輸入:

node1

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

vi slaves:輸入

node2

node3

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

配置結束,把配置好的hadoop檔案夾拷貝到另外兩台主機中,并且保證上面的配置對于其他機器而言正确,

scp -r /home/hadoop/hadoop-1.2.1 root@node2:/home/hadoop/

#輸入node2的root密碼即可傳輸,如果java安裝路徑不一樣,需要修改conf/hadoop-env.sh

四、Hadoop啟動與測試

1、)格式化一個新的分布式檔案系統

hadoop namenode -format #格式化檔案系統

如下圖(我的hadoop已經使用,不想重新格式化選擇了No)

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

2、)啟動所有節點

/home/hadoop/hadoop-1.2.1/bin/start-all.sh

3、)檢視叢集的狀态:

hadoop dfsadmin -report

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

4、)Hadoop測試

浏覽NameNode和JobTracker的網絡接口,它們的位址預設為:

NameNode - http://192.168.1.191:50070/

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

JobTracker - http://192.168.1.191:50030/

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

要想檢查守護程序是否正在運作,可以使用 jps 指令(這是用于JVM 程序的ps 實用程式)。這個指令列出 5 個守護程序及其程序辨別符。

将輸入檔案拷貝到分布式檔案系統:

1.bin/hadoop fs -mkdir input #建立input目錄

2.bin/hadoop fs -put conf/core-site.xml input #拷貝檔案到input目錄

3.bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z]' #使用Hadoop運作示例

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

到此為止,hadoop已經配置完成。

五、Hadoop一些常用的操作指令

1、hdfs常用操作:

hadoop dfs -ls 列出HDFS下的檔案

hadoop dfs -ls input 列出HDFS下某個文檔中的檔案

hadoop dfs -put 1.txt input/2.txt 上傳檔案到指定目錄并重新命名,隻有所有DataNode都接收完資料才算成功。

hadoop dfs -get input/1.txt test.txt 從HDFS下載下傳檔案并重新命名為test.txt,同put一樣可操作檔案也可操作目錄

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

hadoop dfs -rmr out 删除指定檔案從HDFS上

hadoop dfs -cat in/* 檢視HDFS上in目錄的内容

hadoop dfsadmin -report 檢視HDFS的基本統計資訊,結果如下

hadoop dfsadmin -safemode leave 退出安全模式

hadoop dfsadmin -safemode enter 進入安全模式

2、負載均衡

start-balancer.sh,可以使DataNode節點上選擇政策重新平衡DataNode上的資料塊的分布。

六.遇到的問題。

1) 執行jps時,找不到此指令。

答:這是由于jdk的環境沒有配置好。

Centos6.4 +Hadoop 1.2.1叢集完全分布模式配置

2)SSH無密碼通路配置好之後,還是讓輸入密碼?

答:檔案權限問題。執行chmod 644 authorized_keys