本文參考: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
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauMDO2ADN4AzNx8CXxEzMxAjMvwFduVWboNWY0RXYvwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.jpg)
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
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 此步非常重要,如果權限不對,則無密碼通路不成功。
測試三台主機之間無密碼互訪成功。
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路徑
6.2)配置/conf/core-site.xml
fs.default.name是NameNode的URI。hdfs://主機名:端口/
hadoop.tmp.dir :Hadoop的預設臨時路徑,這個最好配置,如果在新增節點或者其他情況下DataNode啟動不了,就删除此檔案中的tmp目錄即可。不過如果删除了NameNode機器此目錄,那麼就需要重新執行NameNode格式化的指令。
6.3)配置/conf/mapred-site.xml
mapred.job.tracker是JobTracker的主機(或者IP)和端口。主機:端口。其中/home/hadoop/hadoop_home/var目錄需要提前建立,并且注意用chown -R 指令來修改目錄權限。
6.4)配置/conf/hdfs-site.xml
dfs.name.dir是NameNode持久存儲名字空間及事務日志的本地檔案系統路徑。 當這個值是一個逗号分割的目錄清單時,nametable資料将會被複制到所有目錄中做備援備份。
dfs.replication是資料需要備份的數量,預設是3,如果此數大于叢集的機器數會出錯。
此處的name1和data1等目錄不能提前建立,如果提前建立會出問題。
6.5)配置master和slaves主從節點
配置conf/masters和conf/slaves來設定主從結點,注意最好使用主機名,并且保證機器之間通過主機名可以互相通路,每個主機名一行。
vi masters:輸入:
node1
vi slaves:輸入
node2
node3
配置結束,把配置好的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)
2、)啟動所有節點
/home/hadoop/hadoop-1.2.1/bin/start-all.sh
3、)檢視叢集的狀态:
hadoop dfsadmin -report
4、)Hadoop測試
浏覽NameNode和JobTracker的網絡接口,它們的位址預設為:
NameNode - http://192.168.1.191:50070/
JobTracker - http://192.168.1.191:50030/
要想檢查守護程序是否正在運作,可以使用 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運作示例
到此為止,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一樣可操作檔案也可操作目錄
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的環境沒有配置好。
2)SSH無密碼通路配置好之後,還是讓輸入密碼?
答:檔案權限問題。執行chmod 644 authorized_keys