大資料7.1 - hadoop叢集搭建

項羽齊發表於2018-04-09

topology

 

Hadoop2.0 HA 叢集搭建步驟

1.1 架構圖

 

 

1.2 叢集節點分配

  • hadoop1

      Zookeeper

      NameNode(active)

      Resourcemanager (active)

  • hadoop2

      Zookeeper

      NameNode (standby)

  • hadoop3

      Zookeeper

      ResourceManager(standby)

  • hadoop4

      DataNode

      NodeManager

      JournalNode

  • hadoop5

      DataNode

      NodeManager

      JournalNode

  • hadoop6

      DataNode

      NodeManager

      JournalNode

1.3 安裝步驟

1.3.1 固化IP

    修改配置檔案

      cd /etc/sysconfig/network-scripts #進入網路配置目錄

      dir ifcfg* #找到網路卡配置檔案

      ifcfg-eno16777736  ifcfg-lo

      vi ifcfg-eno16777736

    配置檔案內容

      TYPE=Ethernet

      BOOTPROTO=static #改成static,針對NAT

      NAME=eno16777736

      UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8

      DEVICE=eno16777736

      ONBOOT=yes #開機啟動此網路卡

      IPADDR=192.168.163.129 #固定IP地址

      NETMASK=255.255.255.0 #子網掩碼

      GATEWAY=192.168.163.2 #閘道器和NAT自動配置的相同,不同則無法登入

      DNS1=192.168.163.2 #和閘道器相同

    重啟網路

      service network restart

      ping www.baidu.com

 

  1.3.2 永久關閉每臺機器的防火牆

      systemctl stop firewalld.service #關閉防火牆服務

      systemctl disable firewalld.service #禁止防火牆開啟啟動

      firewall-cmd --state #檢查防火牆狀態

  1.3.3 為每臺機器配置主機名

    hadoop1,hadoop2 ……

    以及hosts檔案

    配置主機名

    執行:vim /etc/hostname 修改為hadoop1~6

    然後執行 hostname 主機名

    達到不重啟生效目的

  配置hosts檔案

    執行:vim /etc/hosts

    示例:

127.0.0.1 localhost
::1 localhost
192.168.65.121 hadoop1
192.168.65.122 hadoop2
192.168.65.123 hadoop3
192.168.65.124 hadoop4
192.168.65.125 hadoop5
192.168.65.126 hadoop6

 

  1.3.4 通過遠端命令將配置好的hosts檔案scp到其他5臺節點上

    執行:scp /etc/hosts hadoop2:/etc

  1.3.5 為每臺機器配置ssh免祕鑰登入

    執行:ssh-keygen

    ssh-copy-id root@hadoop1 (分別傳送到6臺節點上)

    vim /root/.ssh/known_hosts 檢查是否配置成功

  1.3.6 為每臺機器安裝jdk和配置JAVA_HOME

    vim /etc/profile

    在尾行新增

JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

 

  1.3.7 前三臺機器安裝和配置zookeeper

    解壓安裝包 tar -xvf zookeeper-3.4.8.tar.gz

    進入conf目錄 cd zookeeper-3.4.8/conf/

    複製zoo_sample.cfg zoo.cfg:  cp zoo_sample.cfg zoo.cfg

    編輯zoo.cfgvim zoo.cfg

 

    Zookeeper根目錄中建立tmp資料夾,tmp資料夾中建立myid檔案,編輯文字:12,3

     拷貝整個zookeeper目錄到hadoop2hadoop3並修改myid檔案分別為1,2

    scp -r zookeeper-3.4.8 hadoop2:/home/app

 

  1.3.8 安裝和配置01節點的hadoop

    解壓安裝包

    cd etc/hadoop

    配置 hadoop-env.sh

    配置jdk安裝所在目錄

    配置hadoop配置檔案所在目錄

  1.3.9 配置core-site.xml

<configuration>
<!--用來指定hdfs的老大,ns為固定屬性名,表示兩個namenode-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://ns</value>
</property>
<!--用來指定hadoop執行時產生檔案的存放目錄-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/app/hadoop-2.7.1/tmp</value>
</property>
<!--執行zookeeper地址-->
<property>
  <name>ha.zookeeper.quorum</name>
  <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>

 

  1.3.10 配置01節點hdfs-site.xml

  

<configuration>
<!--執行hdfs的nameservice為ns,和core-site.xml保持一致-->
<property>
  <name>dfs.nameservices</name>
  <value>ns</value>
</property>
<!--ns下有兩個namenode,分別是nn1,nn2-->
<property>
  <name>dfs.ha.namenodes.ns</name>
  <value>nn1,nn2</value>
</property>
<!--nn1 的 RPC 通訊地址-->
<property>
  <name>dfs.namenode.rpc-address.ns.nn1</name>
  <value>hadoop1:9000</value>
</property>
<!--nn1的http通訊地址-->
<property>
  <name>dfs.namenode.http-address.ns.nn1</name>
  <value>hadoop1:50070</value>
</property>
<!--nn2的RPC通訊地址-->
<property>
  <name>dfs.namenode.rpc-address.ns.nn2</name>
  <value>hadoop2:9000</value>
</property>
<!--nn2 的 http 通訊地址-->
<property>
  <name>dfs.namenode.http-address.ns.nn2</name>
  <value>hadoop2:50070</value>
</property>
<!--指定namenode的後設資料在JournalNode上的存放位置,這樣,namenode2可以
 從 jn 叢集裡獲取最新的namenode的資訊,達到熱備的效果-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/ns</value>
</property>
<!--指定 JournalNode 存放資料的位置-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/app/hadoop-2.7.1/journal</value>
</property>
<!--開啟namenode故障時自動切換-->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
<!--配置切換的實現方式-->
<property>
  <name>dfs.client.failover.proxy.provider.ns</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔離機制-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<!--配置隔離機制的ssh登入祕鑰所在的位置-->
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode資料存放的位置,可以不配置,如果不配置,預設用的是core-site.xml裡配置的hadoop.tmp.dir的路徑-->
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///home/app/hadoop-2.7.1/tmp/namenode</value>
</property>
<!--配置datanode資料存放的位置,可以不配置,如果不配置,預設用的是core-site.xml 裡配置的 hadoop.tmp.dir 的路徑-->
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///home/app/hadoop-2.7.1/tmp/datanode</value>
</property>
<!--配置 block 副本數量-->
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<!--設定hdfs的操作許可權,false表示任何使用者都可以在hdfs上操作檔案-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

 

 

1.3.11 配置 mapred-site.xml

<configuration>
<property>
<!--指定mapreduce執行在yarn上-->
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
</configuration>

 

1.3.12 配置yarn-site.xml

<configuration>
<!--開啟YARN HA -->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
  <!--指定兩個resourcemanager的名稱-->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!--配置rm1,rm2的主機-->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>hadoop1</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>hadoop3</value>
</property>
<!--開啟yarn恢復機制-->
<property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
</property>
<!--執行rm恢復機制實現類-->
<property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  <description>For multiple zk services, separate them with comma</description>
</property>
<!--指定YARN HA的名稱-->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yarn-ha</value>
</property>
<!--指定 yarn 的老大 resoucemanager 的地址-->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop1</value>
</property>
<!--NodeManager獲取資料的方式-->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
</configuration>

 

1.3.13 配置slaves檔案

hadoop4
hadoop5
hadoop6

 

1.3.14 根據配置檔案,建立相關的資料夾,用來存放對應資料

在hadoop-2.7.1目錄下建立:

①journal目錄

②建立tmp目錄

③在tmp目錄下,分別建立namenode目錄和datanode目錄

1.3.15 配置 hadoop 的環境變數(可不配)

JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

 

1.3.16 通過scp 命令,將hadoop安裝目錄遠端copy到其他5臺機器上

  比如向hadoop02節點傳輸:

  scp -r hadoop-2.7.1 hadoop2:/home/app

1.3.17 啟動zookeeper叢集

  在Zookeeper安裝目錄的bin目錄下執行:sh zkServer.sh start

1.3.18 格式化zookeeper

  在zkleader節點上執行:

  hdfs zkfc -formatZK,這個指令的作用是在zookeeper叢集上生成ha節點 ns節點)

  注:18--24步可以用一步來替代:進入hadoop安裝目錄的sbin目錄,執行: sh start-dfs.sh 。 但建議還是按部就班來執行,比較可靠。

1.3.19 啟動journalnode叢集

  在456節點上執行:

  切換到hadoop安裝目錄的sbin目錄下,執行:

  sh hadoop-daemons.sh start journalnode

  然後執行jps命令檢視程式。

1.3.20 格式化1節點的namenode

  在1節點上執行:

  hadoop namenode -format

1.3.21 啟動1節點的namenode

  在 1 節點上執行:

  sh hadoop-daemon.sh start namenode

1.3.22 2節點的namenode節點變為standby namenode節點

  在2節點上執行:

  hdfs namenode -bootstrapStandby

1.3.23 啟動 2 節點的 namenode 節點

  在2節點上執行:

  sh hadoop-daemon.sh start namenode

1.3.24 4,5,6節點上啟動datanode節點

  在 4,5,6 節點上執行: sh hadoop-daemon.sh start datanode

1.3.25 啟動zkfc(啟動FalioverControllerActive)

  在1,2節點上執行:

  sh hadoop-daemon.sh start zkfc

 

1.3.26 1節點上啟動主Resourcemanager

  在1節點上執行:start-yarn.sh

  啟動成功後,4,5,6節點上應該有nodemanager 的程式

1.3.27  3 節點上啟動副 Resoucemanager

  在3節點上執行:sh yarn-daemon.sh start resourcemanager

1.4 測試

  輸入地址: http://192.168.65.111:50070 ,檢視 namenode 的資訊,是active狀態

   

 

  輸入地址:http://192.168.65.22:50070檢視namenode的資訊,是standby狀態

   

 

  然後停掉01節點的namenode,此時發現standbynamenode變為active

 

相關文章