hadoop-2.6.5安裝
寫篇博文記錄下我搭建hadoop-2.6.5,中間遇到一些坑,不過最後能看到namenode和nodemanager都能出來也算成功了。
由於每個人的作業系統,安裝版本不一致,所以也不用像機器人一樣照搬,按照我所說的步驟思想去做就行了,有些地方也需要靈活變通。
一、安裝的步驟如下
1.給每臺機器設定主機名,然後配置主機名和IP的對映關係(主機名類似域名)
2.安裝ssh,設定免密碼登入
3.安裝JDK
4.安裝hadoop-2.6.5
5.修改hadoop-env.sh,yarn-env.sh的JDK路徑,以及core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml的配置檔案
二、實驗環境
1.宿主機器:HP elitebook 820 G3, 256G固態硬碟,雙核四執行緒2.3Ghz的intel core i5處理器,8G記憶體,windows 7sp1作業系統
2.使用vmware workstation 版本10.0.2 build-1744117,虛擬化三個虛擬機器,採用CentOS-6.5-x86_64 作業系統,虛擬機器網路使用NAT網路模式(自動虛擬化DHCP伺服器,自動分配IP,而且也虛擬化出NAT伺服器,能直接臉上外網),都為1g記憶體,20G硬碟。
三臺虛擬機器分別是
192.168.172.128 master
192.168.172.129 worker1
192.168.172.130 worker2
其中master作為namenode,secondary namenod,resource manager。workerX作為dataNode,NodeManager。
三、具體安裝
1.給每臺機器設定主機名,然後配置主機名和IP的對映關係(主機名類似域名)
首先設定主機名,以master為例
針對worker1和worker2分別設定為worker1和worker2。
在master為例,設定主機名和IP的對映關係
使用vim /etc/hosts命令
worker1和worker2也設定如圖所示。
可以使用ping命令來測試是否通
2.安裝ssh,設定免密碼登入
hadoop工作時,各節點要相互通訊,正常情況下linux之間通訊要提供使用者名稱、密碼(目的是保證通訊安全),如果需要人工干預輸入密碼,顯然不方便,做這一步的目的,是讓各節點能自動通過安全認證,不影響正常通訊。1 先在master上,生成公鑰、私鑰對cd (進入個人主目錄,預設為/root)
ssh-keygen -t rsa -P '' (注:最後是二個單引號)即:以rsa演算法,生成公鑰、私鑰對,-P ''表示空密碼。該命令執行完後,會在個人主目錄下生成.ssh目錄,裡面會有二個檔案id_rsa(私鑰) ,id_rsa.pub(公鑰)2 匯入公鑰cat .ssh/id_rsa.pub >> .ssh/authorized_keys執行完以後,可以在本機上測試下,用ssh連線自己,即:ssh localhost (或ssh master),如果不幸還是提示要輸入密碼,說明還沒起作用,還有一個關鍵的操作chmod 600 .ssh/authorized_keys (修改檔案許可權,否則不起作用)然後再測試下 ssh localhost ,如果不需要輸入密碼,就連線成功,表示ok,一臺機器已經搞定了。3 在其它機器上生成公鑰、金鑰,並將公鑰檔案複製到mastera) 以root身份登入其它二臺機器 worker1、worker2,執行 ssh-keygen -t rsa -P '' 生成公鑰、金鑰b) 然後用scp命令,把公鑰檔案發放給master(即:剛才已經搞定的那臺機器)worker1上:scp .ssh/id_rsa.pub [email protected]:/root/.ssh/id_rsa_01.pubworker2上:scp .ssh/id_rsa.pub [email protected]:/root/.ssh/id_rsa_02.pub這二行執行完後,回到master中,檢視下/root/.ssh目錄,應該有二個新檔案id_rsa_01.pub、id_rsa_02.pub,然後在master上,進入/root/.ssh目錄下,匯入這二個公鑰cat id_rsa_01.pub >> authorized_keyscat id_rsa_02.pub >> authorized_keys這樣,master這臺機器上,就有所有3臺機器的公鑰了。4 將master上的“最全”公鑰,複製到其它機器a) 繼續保持在master上,scp authorized_keys [email protected]:/root/.ssh/authorized_keysscp authorized_keys [email protected]:/root/.ssh/authorized_keysb) 修改其它機器上authorized_keys檔案的許可權worker1以及worker1機器上,均執行命令chmod 600 .ssh/authorized_keys5 驗證在每個虛擬機器上,均用 ssh 其它機器的hostname 驗證下,如果能正常無密碼連線成功,表示ok小結:該步驟非常重要,主要思路是在各節點上生成公鑰、私鑰,然後將公鑰發放其它所有節點。RSA演算法是非對稱加密演算法,僅公佈“公鑰”,只要私鑰不外洩,還是不能解密的,所以安全性依然有保障。
注意:1.檢視.ssh資料夾需要使用ls -a,由於linux環境下前面點開頭為隱藏檔案。
2.由於我們是最簡單的實驗搭建,所以使用root許可權,而沒有給hadoop建立使用者和使用者組,所以操作都是用master,為了給自己減少麻煩。
3.安裝JDK
我是在宿主機上下載的jdk1.8.0_121,然後sz上去的(由於rz和sz不是內建,可能需要安裝這兩個命令,使用命令yum install lrzsz。前提是你裝了yum。)安裝目錄:設定環境變數,可用命令 vi /etc/profile在最後新增export JAVA_HOME=/usr/local/fosun/java/jdk1.8.0_121export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin
儲存退出,然後輸入 source /etc/profile 以便讓新環境變數生效
4.安裝hadoop-2.6.5
然後安裝在/usr/local/hadoop目錄下,進行解壓(使用tar -xzvf hadoop-2.6.5.tar.gz命令)
5.修改hadoop-env.sh,yarn-env.sh的JDK路徑,以及core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,還有slaves的配置檔案
1.修改hadoop-env.sh,yarn-env.sh中的JAVA_HOME的路徑
例如hadoop-env.sh修改如下:
yarn-env.sh同上。
2.修改core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml配置檔案
1)core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoop-2.6.5/tmp</value> </property> <property> <name>hadoop.native.lib</name> <value>true</value> <description>Should native hadoop libraries, if present, be used</description> </property> </configuration>
注:/home/hadoop/tmp 目錄如不存在,則先mkdir手動建立
2)hdfs-site.xml
<configuration>
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:50020</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50075</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
hdfs-site.xml的完整引數請參考
3)mapred-site.xml<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
由於目前都是用mapreduceV2架構,也就是yarn,除了JVM引數還使用外,其他引數一般都不用了,所以這裡需要把框架設定為yarn.
mapred-site.xml的完整引數請參考
4)yarn-site.xml<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
</configuration>
yarn.nodemanager.aux-services:yarn模式的map輸出不是直接給reduce,而是通過shuffle的控制代碼,所以這邊要這樣設定。yarn.resourcemanager.resource-tracker.address 需要設定為master:8031,不然會看不到nodeManager節點。
yarn-site.xml的完整引數請參考
另外,hadoop 1.x與2.x相比, 1.x中的很多引數已經被標識為過時,具體可參考
5)修改slaves配置檔案如下
6)配置完成之後,將hadoop的安裝複製到worder1和worker2機器上(需要在local目錄下建立hadoop資料夾)
scp hadoop-2.6.5 [email protected]/usr/local/hadoop/
scp hadoop-2.6.5 [email protected]/usr/local/hadoop/
四、具體操作
1.將master、worker1、worker2的防火牆都關掉。(由於三臺機器需要通訊,會存在防火牆導致三者通訊出問題,為了簡單起見,就直接關掉防火牆)
使用/sbin/chkconfig --level 2345 iptables off 命令。
注:防火牆操作的相關命令:
檢視防火牆狀態:
/etc/init.d/iptables status
暫時關閉防火牆:
/etc/init.d/iptables stop
禁止防火牆在系統啟動時啟動
/sbin/chkconfig --level 2345 iptables off
重啟iptables:
/etc/init.d/iptables restart
2.格式化name
使用$HADOOP_HOME/bin/hdfs namenode –format 先格式化
3.啟動hdfs和yarn
$HADOOP_HOME/sbin/start-dfs.sh
啟動完成後,輸入jps檢視程序,如果看到以下二個程序:
5161 SecondaryNameNode
4989 NameNode
表示master節點基本ok了
再輸入$HADOOP_HOME/sbin/start-yarn.sh ,完成後,再輸入jps檢視程序
2361 SecondaryNameNode
7320 ResourceManager
4989 NameNode
4.通過web頁面檢視hdfs和mapreduce
http://master:50070/
http://master:8088/
檢視狀態
另外也可以通過 bin/hdfs dfsadmin -report 檢視hdfs的狀態報告