hadoop分佈式安裝及其集羣配置筆記

各機器及角色信息:

共10臺機器,hostname與ip地址映射在此不作贅述。此爲模擬開發環境安裝,因此不考慮將NameNode和SecondaryNameNode安裝在同一臺機器。java

節點node

角色web

namenode01 namenode
namenode02 secondarynamenode
datanode01 datanode
datanode02 datanode
datanode03 datanode
datanode04 datanode
datanode05 datanode
datanode06 datanode
datanode07 datanode
datanode08 datanode

步驟:

由於hadoop依賴JDK環境,必須先進行JDK安裝,步驟另行參考資料。此處默認已經安裝過JDK環境,並作過環境變量配置。apache

1、設置各節點ssh免密碼登陸

1.進入到當前用戶的.ssh目錄下bash

cd ~/.ssh

2.執行ssh公鑰生成命令,出現確認選項直接回車便可服務器

ssh-keygen –t rsa

3.生成:id-rsa、id-rsa.pub兩個文件,執行命令將.pub文件放入到認證文件中app

cat id-rsa.pub >> authorized_keys

自此本機的ssh免密碼登陸已經設置完成,能夠執行命令:ssh localhost 進行驗證,不需密碼直接登入即爲成功。ssh

4.剩下9臺機器如法炮製。都完成本機ssh-免密碼登陸以後,將各節點的authorized_keys拷貝彙總到一臺機器,分別追加到authorized_keys中。此處是將nn02以及dn0*所有拷貝到nn01上,執行:oop

cat authorized_keys_* >> authorized_keys

5.此時全部節點均可對nn01進行免密碼登陸,而後將nn01的authorized_keys拷貝到其他節點,覆蓋原來的authorized_keys便可。ui

避免一臺一臺複製,能夠寫一個簡單的腳本,實現羣體複製,代碼以下供參考:(腳本名稱:scpFile 使用方法:腳本第一個參數表示源文件,第二個參數是要拷貝到其他節點的位置路徑,ex: ./scpFile ~/.ssh/authorized_keys ~/.ssh/ )

#/bin/bash

# HostName which is copying files to.
ipNum="namenode02 datanode01 datanode02 datanode03 datanode04 datanode05 datanode06 datanode07 datanode08"

# Path of source file
#src="/home/sys/hadoop-2.6.1/etc/hadoop/hadoop-env.sh"
src=$1

# Destination of the file moved
#dest="/home/sys/hadoop-2.6.1/etc/hadoop/"
dest=$2

# Execute copying operation
for next in ${ipNum}
do
#      echo ${next}
       scp -r ${src} root@$next:${dest}
       echo "Copy file to root@${next}:${dest} is done!~"
done

2、關閉防火牆

1.暫時性關閉防火牆

service iptables stop

2.設置開機不啓動防火牆

chkconfig iptables off

3.查看防火牆狀態

service iptables status

3、解壓hadoop包,並修改配置

1.解壓hadoop壓縮包,指定到 /home/sys/ 目錄

tar –zxvf hadoop-2.6.1.tar.gz –C /home/sys/

2.增長hadoop的環境變量到 /etc/profile 中:

export HADOOP_HOME=/home/sys/hadoop-2.6.1
export PATH=.:$HADOOP_HOME/bin:$PATH

3.修改配置文件,共8個(hadoop-env.sh、yarn-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、masters、slaves)

cd $HADOOP_HOME/etc/hadoop/

hadoop-env.shyarn-env.sh中指定 JAVA_HOME:

export JAVA_HOME=/home/sys/jdk1.8.0_65

編輯core-site.xml,增長以下內容:

         <!-- hdfs的訪問名稱及端口 -->
         <property>
                <name>fs.defaultFS</name>
                <value>hdfs://namenode01:9000</value>
                <description>The name of the default file system.</description>
        </property>

        <!-- 臨時目錄 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/tmp</value>
                <description>A base for other temporary directories.</description>
        </property>

編輯hdfs-site.xml,增長以下內容:

        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/dfs/name</value>
                <description>
                        Directory where HDFS name node store the name table(fsimage).
                </description>
        </property>

        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/dfs/data</value>
                <description>
                        Directory where HDFS data node store blocks.
                </description>
        </property>
        <!--   NameNode和SecondaryNameNode分離的狀況下,此項配置不可少,會影響SecondaryNameNode從NameNode拷貝鏡像文件的存儲,
               不配置的話,NameNode宕機,Secondary找不着備份的鏡像文件   -->
        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>/home/dfs/namesecondary</value>
                <description>
                        Determines where on the local filesystem the DFS secondary
                        name node should store the temporary images to merge.
                </description>
        </property>

        <property>
                <name>dfs.replication</name>
                <value>2</value>
                <description>
                        HDFS block replication.
                </description>
        </property>

        <property>
                <name>dfs.blocksize</name>
                <value>134217728</value>
                <description>
                        HDFS storage blocksize.
                </description>
        </property>
        
        <!-- 將NameNode和SecondaryNameNode分離開的配置分別指定namenode和secondarynamenode的啓動節點 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>namenode01:50070</value>
                <description>
                        The address and the base port where the dfs namenode web ui will listen on.
                </description>
        </property>

        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>namenode02:50090</value>
                <description>
                        The secondary namenode http server address and port.
                </description>
        </property>

        <property>
                <name>dfs.namenode.checkpoint.period</name>
                <value>3600</value>
                <description>
                        The number of seconds between two periodic checkpoints.
                </description>
        </property>

編輯mapred-site.xml,增長以下內容:

        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
                <description>
                        The runtime framework for executing MapReduce jobs.
                        Can be one of local, classic or yarn.
                </description>
        </property>

編輯yarn-site.xml,增長以下內容:

        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
                <description>
                        the valid service name should only contain a-zA-Z0-9_ and can not start with numbers
                </description>
        </property>
   
        <!--  指定resourcemanager的節點,若無此段配置,將會出現DataNode節點上的nodemanager進程啓動一段時間以後自動消失的問題  -->
        <property>
                <description>The hostname of the RM.</description>
                <name>yarn.resourcemanager.hostname</name>
                <value>namenode01</value>
        </property>

建立文件 masters,增長以下內容:(實現namenode和secondarynamenode分離)

namenode02

修改文件 slaves,增長以下內容:

datanode01
datanode02
datanode03
datanode04
datanode05
datanode06
datanode07
datanode08

將hadoop文件夾拷貝到其餘節點,使用上面的腳本scpFile

scpFile /home/sys/hadoop-2.6.1 /home/sys/

2、集羣啓動

格式化操做,進入到namenode01的hadoop根目錄下,執行:

bin/hadoop namenode –format

出現Successfully字樣的時候,即爲格式化成功

注意:若是須要再次及屢次格式化namenode,必定把hdfs-site.xml中dfs.datanode.data.dir目錄清空一下,不然會形成從新格式化後DataNode啓動不起來的問題。

          由於該目錄下有一個版本號,屢次格式化可能致使DataNode和NameNode的版本號不一致。

啓動dfs文件系統

sbin/start-dfs.sh

   驗證,jps命令查看:

          namenode01上出現NameNode進程

          namenode02上出現SecondaryNameNode進程

          datanode0*上出現DataNode進程

   即爲啓動dfs成功

啓動yarn

sbin/start-yarn.sh

   驗證,jps命令查看:

          namenode01上出現ResourceManager進程

          datanode0*上出現NodeManager進程

   即爲啓動yarn成功

3、修改hadoop啓動日誌目錄

修改namenode、datanode節點默認日誌目錄

編輯hadoop-env.sh,修改HADOOP_LOG_DIR

export HADOOP_LOG_DIR=your path

修改resourcemanager、nodemanager日誌目錄

編輯yarn-env.sh,修改YARN_LOG_DIR

if [ "$YARN_LOG_DIR" = "" ]; then
  YARN_LOG_DIR="your path"

不可在hadoop-env.sh中看到‘# Where log files are stored.  $HADOOP_HOME/logs by default.’就省略,默認的配置是/logs/,顯然是

$HADOOP_HOME未生效,緣由待查找,暫用絕對路徑處理。

4、去除本地庫加載失敗的警告信息

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

緣由:Apache提供的hadoop本地庫是32位的,而在64位的服務器上就會有問題

修改加載本地庫的日誌級別

編輯 $HADOOP_HOME/etc/hadoop/log4j.properties,增長以下內容:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
相關文章
相關標籤/搜索