[整理]Centos6.5 + hadoop2.6.4環境搭建

搭建Hadoop集羣環境(3臺機器)html

1 準備環境java

1.1 安裝系統,並配置網絡使3臺機器互聯互通,且SSH可直連(無需密碼、保存私鑰)node

1.1.1 安裝系統git

安裝Centos 6.5系統web

安裝過程略apache

1.1.2 配置網絡centos

設置三臺機器的iP分別爲服務器

IP網絡

主機名稱app

10.132.41.116

Hadoop.slave2

10.132.41.117

Hadoop.slave1

10.132.41.118

Hadoop.master

修改計算機名稱

Vi /etc/sysconfig/network

clip_image001

以上修改須要重啓生效。可同時當即生效,增長執行如下命令:

Sudo hostname hadoop.slave1

1.1.3 SSH配置

a).首先在hadoop.master機器上用root(hadoop用戶)登陸,先生成ssh密鑰文件,執行

ssh-keygen -t rsa

過程當中,回車3次,提示如下內容表示成功

clip_image003

查看公鑰文件是否生成:/home/hadoop/.ssh

clip_image004

b).執行命令將密鑰文件共享給其餘機器

ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@10.132.41.117

第一次執行須要輸入hadoop的密碼。

輸出一下內容表示執行成功。

clip_image006

c).執行命令測試是否創建互信成功

使用ssh直接鏈接服務器,確認是否免密碼登陸。

ssh 10.132.41.117

登陸後輸入任意命令確認是否登陸成功。

w

clip_image008

1.2 安裝JDK,並配置環境變量

1.2.1 安裝JDK

先執行rpm查詢命令確認是否已安裝了JDK其餘版本

rpm –qa | grep jdk

返回不爲空,且版本不對可執行如下命令,將當前版本卸載掉

rpm –c 軟件包名稱

下載JDK文件並上傳到服務器(rpm),執行

rpm –ivh 軟件包名稱

1.2.2 配置環境變量

使用vi進入/etc/profile文件,在最後追加如下內容:

# set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_31

# export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

以後執行如下命令,重啓配置文件。

source /etc/profile

1.2.3 測試環境

執行命令確認安裝是否正常。

[root@hadoop hadoop]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

2 安裝Hadoop

須要將全部的機器(master和slave)都須要安裝hadoop,操做都同樣,下面以master爲示例。

2.1 下載

登陸hadoop官網,下載對應版本。本示例使用了最新版2.6.4版本。

http://hadoop.apache.org/releases.html

下載後的文件hadoop-2.6.4.tar.gz,使用SFTP工具上傳到hadoop.master機器上。

2.2 安裝

用root用戶登陸hadoop.master機器,將上傳上來的hadoop-2.6.4.tar.gz文件拷貝至/usr下。

執行「tar zxf hadoop-2.6.4.tar.gz hadoop」,將hadoop解壓到/usr/hadoop目錄下。

執行如下命令,將hadoop文件夾的歸屬用戶和組修改到hadoop用戶下。

chown –R hadoop:dadoop hadoop

配置後以下:

clip_image009

2.3 配置環境變量

使用vi進入/etc/profile文件,在最後追加如下內容:

# set hadoop environment
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$ HADOOP _HOME/bin

以後執行如下命令,重啓配置文件。

source /etc/profile

執行如下命令,確認配置生效。

[root@hadoop hadoop]# hadoop version
Hadoop 2.6.4
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 5082c73637530b0b7e115f9625ed7fac69f937e6
Compiled by jenkins on 2016-02-12T09:45Z
Compiled with protoc 2.5.0
From source with checksum 8dee2286ecdbbbc930a6c87b65cbc010
This command was run using /usr/hadoop/share/hadoop/common/hadoop-common-2.6.4.jar

3 配置Hadoop

3.1 配置master

Hadoop涉及3個配置文件etc/hadoop/core-site.xml,etc/hadoop/hdfs-site.xml,etc/hadoop/mared-site.xml文件。

注:

如下配置中的hadoop.master都可以使用masterip來替代。

全部的配置文件在2.x已經調整到$HADOOP_HOME/etc/hadoop下。

默認不存在「mapred-site.xml」文件,須要複製mapred-site.xml.template

3.1.1 配置core-site.xml

<configuration>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://hadoop.master:9000</value>
    <final>true</final>
  </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/tmp</value>
    </property>

    <property>
        <name>ds.default.name</name>
        <value>hdfs://hadoop.master:54310</value>
        <final>true</final>
    </property>
</configuration>

3.1.2 配置hdfs-site.xml

<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/hadoop/dfs/name</value>
    <final>true</final>
  </property>
 
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/hadoop/dfs/data</value>
    <final>true</final>
  </property>

  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

3.1.3 配置mapred-site.xml

<configuration>
   <property>
       <name>mapreduce.framework.name</name>
        <value>yarn</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.address</name>
        <value>hadoop.master:10020</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop.master:19888</value>
   </property>
</configuration>

3.1.4 配置yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
 
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop.master</value>
  </property>

  <property>
   <name>yarn.resourcemanager.address</name>
   <value>hadoop.master:8032</value>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop.master:8030</value>
  </property>

  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop.master:8031</value>
  </property>

  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop.master:8033</value>
  </property>

  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop.master:8088</value>
  </property>
</configuration>

3.1.5 配置masters和slaves文件

分別將master的信息和全部slave機器的信息寫入到masters和slaves文件中。

clip_image010

注:slaves文件中的數量必須大於hdfs-site.xml文件中的「dfs.replication」配置,不然namenode沒法啓動。

另外,masters是根據網上教程手動生成的,而後配置貌似沒起到做用。

3.2 配置slave

配置slave有2種方式:1.將hadoop的安裝包上傳到slave機器從新配置;2.將master上的配置複製到slave機器上。本示例採用了第2種方法,即全盤複製master上的配置。

3.2.1 安裝JDK和配置環境變量

操做同master,此處略。

3.2.2 配置hosts

操做同master,此處略。

3.2.3 複製master上的hadoop

首先用hadoop用戶(ssh已互信)執行如下命令,將hadoop複製到slave機器上。

scp /usr/hadoop hadoop@hadoop.slave1:/home/hadoop

用root用戶登陸hadoop.slave1,並執行如下命令,將hadoop移至/usr目錄下。

mv /home/hadoop/hadoop /usr/

修改hadoop的擁有着。

chown –R hadoop:hadoop hadoop

注:須要在環境配置時添加好hadoop用戶及用戶組。

3.3 關閉防火牆

[hadoop@hadoop ~]$ su root
Password:
[root@hadoop hadoop]# service iptables stop
[root@hadoop hadoop]# chkconfig iptables off

4 啓動和驗證

4.1 初始化Namenode

在Master上用hadoop用戶,執行如下命令初始化Namenode。

hadoop namenode -format

clip_image012

注:第2次之後初始化,過程當中會提示是否刪除已初始化內容,輸入Y便可。

4.2 啓動集羣

clip_image014

4.3 驗證

4.3.1 Master驗證Namenode啓動

在Master上用hadoop用戶執行jps,顯示如下內容,即啓動成功。

clip_image015

若是缺乏進程,能夠到「$HADOOP_HOME/logs」下查看日誌,確認啓動失敗的緣由。

4.3.2 Slave驗證Datanode啓動

在Slave上分別用hadoop用戶執行jps,顯示如下內容,即啓動成功。

clip_image016

若是缺乏進程,能夠到「$HADOOP_HOME/logs」下查看日誌,確認啓動失敗的緣由。

注:2.X之後沒有JobtrackerTasktracker進程了。

5 問題FAQ

5.1 啓動時報「WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable」

【問題現象】:啓動時出現警告「WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable」

【問題分析】:經過錯誤提示得知,部分文件由32位平臺編譯,本機是64位centos,所以報錯。

【解決措施】:經過網友提供的一個編譯文件,下載並替換$HADOOP_HOME/lib/native目錄下文件,便可解決此警告。

                     博客地址:http://www.secdoctor.com/html/yyjs/31101.html

                     文件的下載地址:http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.6.0.tar

5.2 Master報「」,Namenode啓動失敗

【問題現象】:經過執行jps,發現master上沒有namenode進程,查看log日誌發現,有如下錯誤

FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.

java.net.BindException: Problem binding to [hadoop.master:9000] java.net.BindException: Cannot assign requested address; For more details see: http://wiki.apache.org/hadoop/BindException

【問題分析】:因爲申請的雲虛擬機,外部鏈接的IP爲10開頭的大網IP,經過ifconfig查看本機IP發現並不是多網卡,而是作了IP映射,即配置的IP在本地沒法訪問到,致使JVM出現BindException。

clip_image018

【解決措施】:經過使用虛擬機本機IP(172開頭)在集羣中的全部機器中相互ping,若是都能ping通,則能夠直接使用本機IP作配置(本例便是)。修改/etc/hosts文件中的hostname映射IP並複製到集羣中全部的機器,ssh互信重作,在master上從新格式化namenode後啓動便可。

5.3 Slave報「All specified directories are failed to load.」,Datanode啓動失敗

【問題現象】:經過執行jps,發現slave上沒有datanode進程,查看log日誌發現,有如下錯誤信息:

WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /usr/hadoop/dfs/data: namenode clusterID = CID-1a1fabff-166c-4c0a-9bd3-b726f217cc87; datanode clusterID = CID-65c03263-c30a-4592-8019-f6b356061418

2016-03-28 17:07:09,416 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to hadoop.master/172.16.0.111:9000. Exiting.

java.io.IOException: All specified directories are failed to load.

【問題分析】:因爲變更了IP和從新初始化namenode,master的clusterID已經變化,slave鏈接master失敗。須要更新clusterID爲最新的值便可。

【解決措施】:修改data/current目錄下的VERSION文件中clusterID爲namenode的ID,並重啓。

clip_image019

注:data目錄的配置在hdfs-site.xml文件中的「dfs.datanode.data.dir」配置項。

6 附件

6.1 本示例中的配置文件

    clip_image021

相關文章
相關標籤/搜索