1. 程式人生 > >hadoop-2.6.5安裝

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手動建立

core-site.xml配置檔案詳解:

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的狀態報告