hadoop集羣安裝過程詳解
一,環境:
1,主機規劃:
集羣中包括4個節點:1個Master,2個Salve,節點之間局域網連接,可以相互ping通。
機器名稱 | IP地址 |
hadoop01 | 192.168.0.31 |
hadoop02 | 192.168.0.32 |
hadoop03 | 192.168.0.33 |
三個節點上均是CentOS6.3 x86_64系統,並且有一個相同的用戶hadoop。hadoop01做爲master配置NameNode和JobTracker的角色,負責總管分佈式數據和分解任務的執行;另外兩臺配置DataNode和TaskTracker的角色,負責分佈式數據存儲以及任務的執行。安裝目錄統一爲/usr/local下
2,軟件版本:
hadoop-1.2.1.tar.gz,jdk-7u25-linux-x64.rpm
二,準備工作,三臺機器都需要做 ,將三臺機器selinux,iptables停用。
1,安裝jdk
[root@hadoop01 ~]# rpm -ivh jdk-7u25-linux-x64.rpm
[root@hadoop01 ~]# cd /usr/java/
[root@hadoop01 java]# ls
default jdk1.7.0_25 latest
[root@hadoop01 java]# ln -s jdk1.7.0_25 jdk
[root@hadoop01 java]# vim /etc/profile
[root@hadoop01 java]# source /etc/profile 讓其java命令立即生效
[root@hadoop01 java]# java 執行java命令,如果能正常執行就表示java安裝完成
2,添加一個hadoop用戶,用來運行hadoop集羣
3,做三臺機器之間做雙機互信,原因master通過遠程啓動datanode進程和tasktracker進程,如果不做雙機互信,會導致每次啓動集羣服務都會需要密碼
[root@hadoop01 ~]# vim /etc/hosts
將hosts文件分別複製到另外兩臺。
4,切換到hadoop用戶,對其用做雙機互信,先在三臺機器先執行ssh-keygen生成公鑰與私鑰。
將公鑰複製到別的機器,需要對hadoop01,hadoop03,都做相同的動作。
[hadoop@hadoop01 ~]$ ssh-copy-id -i hadoop03
[hadoop@hadoop01 ~]$ ssh-copy-id -i hadoop01
5,同步時間,三臺機器啓用ntpd服務,另外兩臺執行相同的操作
[root@hadoop01 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp.api.bz &> /dev/null
三,配置master,也就hadoop01
[root@hadoop01 ~]# tar xf hadoop-1.2.1.tar.gz -C /usr/local/
[root@hadoop01 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1
[root@hadoop01 ~]# su - hadoop
[hadoop@hadoop01 ~]$ cd /usr/local/hadoop-1.2.1/
(1)Hadoop的配置文件都存儲在conf下,配置文件解釋
hadoop-env.sh:用於定義hadoop運行環境相關的配置信息,比如配置JAVA_HOME環境變量、爲hadoop的JVM指定特定的選項、指定日誌文件所在的目錄路徑以及master和slave文件的位置等;
core-site.xml: 用於定義系統級別的參數,它作用於全部進程及客戶端,如HDFS URL、Hadoop的臨時目錄以及用於rack-aware集羣中的配置文件的配置等,此中的參數定義會覆蓋core-default.xml文件中的默認配置;
hdfs-site.xml: HDFS的相關設定,如文件副本的個數、塊大小及是否使用強制權限等,此中的參數定義會覆蓋hdfs-default.xml文件中的默認配置;
mapred-site.xml:mapreduce的相關設定,如reduce任務的默認個數、任務所能夠使用內存的默認上下限等,此中的參數定義會覆蓋mapred-default.xml文件中的默認配置;
masters: hadoop的master,secondary-masters主機列表,當啓動Hadoop時,其會在當前主機上啓動NameNode和JobTracker,然後通過SSH連接此文件中的主機以作爲備用NameNode;
slaves:Hadoop集羣的slave(datanode)和tasktracker的主機列表,master啓動時會通過SSH連接至此列表中的所有主機併爲其啓動DataNode和taskTracker進程;
Hadoop-metrics2.properties:控制metrics在hadoop上如何發佈屬性
Log4j.properties:系統日誌文件、namenode審計日誌、tarsktracker子進程的任務日誌屬性
(2)修改hadoop-env.sh
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/hadoop-env.sh
(3)修改core-site.xml
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/core-site.xml
hadoop.tmp.dir屬性用於定義Hadoop的臨時目錄,其默認爲/tmp/hadoop-${username}。HDFS進程的許多目錄默認都在此目錄中,/hadoop/tmp目錄,需要注意的是,要保證運行Hadoop進程的用戶對其具有全部訪問權限。
fs.default.name屬性用於定義HDFS的名稱節點和其默認的文件系統,其值是一個URI,即NameNode的RPC服務器監聽的地址(可以是主機名)和端口(默認爲8020)。其默認值爲file:///,即本地文件系統。
(4)修改hdfs-site.xml文件
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/hdfs-site.xml
dfs.name.dir屬性定義的HDFS元數據持久存儲路徑,默認爲${hadoop.tmp.dir}/dfs/name
dfs.replication屬性定義保存副本的數量,默認是保存3份,由於這裏只有兩臺slave。所以設置2。
(5)修改mapred-site.xml文件
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/mapred-site.xml
(6)編輯masters文件
masters用於指定,輔助名稱節點(SecondaryNameNode)的主機名或主機地址
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/masters
(7)編輯slaves文件,這個文件只需在master主機上編輯就行
用於指定各從服務器(TaskTracker或DataNode)的主機名或主機地址
在三臺機器上分別創建兩個目錄:
[root@hadoop01 local]# mkdir -p /hadoop/data
[root@hadoop01 local]# mkdir -p /hadoop/tmp
[root@hadoop01 local]# chown -R hadoop:hadoop /hadoop/
[root@hadoop02 local]# mkdir -p /hadoop/data
[root@hadoop02 local]# mkdir -p /hadoop/tmp
[root@hadoop02 local]# chown -R hadoop:hadoop /hadoop/
[root@hadoop03 local]# mkdir -p /hadoop/data
[root@hadoop03 local]# mkdir -p /hadoop/tmp
[root@hadoop03 local]# chown -R hadoop:hadoop /hadoop/
(8)配置slave:將配置的hadoop整個目錄複製到hadoop02,haoop03
[root@hadoop01 ~]# scp -rp /usr/local/hadoop-1.2.1 hadoop02:/usr/local/
[root@hadoop01 ~]# scp -rp /usr/local/hadoop-1.2.1 hadoop03:/usr/local/
修改權限:
[root@hadoop02 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1/
[root@hadoop03 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1/
四,啓動集羣:
1、格式化名稱節點
與普通文件系統一樣,HDFS文件系統必須要先格式化,創建元數據數據結構以後才能使用。
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop namenode -format
如果格式化出錯,一般會提示錯誤,就像下面,已經在提示哪個文件,第幾行,根據提示檢查即可。
[hadoop@hadoop01 ~]$ bin/start-all.sh
[hadoop@hadoop01 ~]$ jps 查看進程是否起來。secondarynamenode,nomenode,jobtracker三個進程必須都有,才正常
8549 SecondaryNameNode
8409 NameNode
8611 JobTracker
8986 Jps
或者這種方式查看集羣是否正常
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop dfsadmin -report
Safe mode is ON
Configured Capacity: 37073182720 (34.53 GB)
Present Capacity: 32421658624 (30.2 GB)
DFS Remaining: 32421576704 (30.19 GB)
DFS Used: 81920 (80 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)
Name: 192.168.0.33:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2325061632 (2.17 GB)
DFS Remaining: 16211488768(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.46%
Last contact: Sat Aug 31 22:25:13 CST 2013
Name: 192.168.0.32:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2326462464 (2.17 GB)
DFS Remaining: 16210087936(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.45%
Last contact: Sat Aug 31 22:25:12 CST 2013
四,排錯思路
1,是否是hadoop.tmp.dir,dfs.data.dir屬性,如果定義在別的目錄需要在集羣中所有節點都創建,並讓hadoop用戶能夠訪問
2,查看進程對應的端口是否有在監聽。在上面配置中將namenode的端口定義9000,jobtracker定義成9001
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9000
tcp 0 0 ::ffff:192.168.0.31:9000 :::* LISTEN 22709/java
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9001
tcp 0 0 ::ffff:192.168.0.31:9001 :::* LISTEN 22924/java
3,查看日誌,哪個服務沒起來就查看對應的日誌。
4,查看集羣中所有節點的時間是不是一致。
5,iptable與selinux是否阻止。
6,/etc/hosts是否正確。