大資料基礎Hadoop 3.1.1 的高可用HA安裝~踩坑記錄

胖琪的升級之路發表於2019-01-15

最近負責的專案準備上大資料平臺儲存,主要還是圍繞Hadoop平臺來實現,雖然打算上cdh版本的hadoop,但是為了前期方便開發還是先使用原聲的hadoop進行開發,後期再準備更好的環境進行擴充套件。

環境準備

三臺伺服器系統環境是建立在Centos7.6基礎上。並且是建立在root賬戶上執行的,如果需要使用其他使用者操作,注意許可權的問題

基礎機器分配

在三臺新購買的伺服器上進行搭建。伺服器規劃如下

hostname ip 說明
tidb1 192.168.108.66 namenode與datanode
tidb2 192.168.108.67 namenode與datanode
tidb3 192.168.108.68 namenode與datanode

搭建大資料叢集基礎機器配置是三臺,真實環境部署建議namenode與datanode進行分開,兩臺機器專門做namenode節點,其他三臺做datanode節點。

每臺機器安裝內容如下:

tidb1 tidb2 tidb3
NameNode
DataNode
ResourceManager
NodeManager
Zookeeper
journalnode
zkfc

在3.0版本以上,我們可以進行安裝多個NameNode節點,來保證更高的高可用方案。但是作為基礎的測試環境開發這樣就是可以了,更多機器擴充套件也在此進行擴充套件即可。

防火牆

三臺機器都需要這麼做

部署叢集之前將叢集的防火牆進行關閉,否則部署出現,訪問埠訪問不到的情景。

centos 系統中存在兩種防火牆,firewall 與iptables , 7.0以後預設是firewall 防火牆,但是也在網上看到其他朋友遇見過 7.0系統上存在兩種防火牆策略導致佈置程式埠一直訪問不到的情況。

firewall

  1. 檢視防火牆的狀態
[root@tidb1 sbin]# firewall-cmd --state
running
複製程式碼
  1. 停止防火牆
systemctl stop firewalld.service
複製程式碼
  1. 禁止開機啟動
systemctl disbale firewalld.service
複製程式碼

執行以上三步之後,程式再開機之後不再出現防火牆的配置問題。

iptabel

如果是這個防火牆的配置,我們也需要進行防火牆的關閉,如果熟悉的話其實開啟對應的埠策略即可。

  1. 檢視防火牆的狀態
service iptables status
複製程式碼
  1. 停止防火牆
service iptables stop
Redirecting to /bin/systemctl stop  iptables.service
複製程式碼
  1. 禁止開機啟動
chkconfig iptables off
複製程式碼

對於安裝在其他系統上的叢集環境,按照對應的策略進行關閉防火牆。

Selinux

三臺機器都需要這麼做

關於這個增強型Linux,網上很多都建議關閉,在這裡搜尋下了相關資料,主要是沒有人進行專門的維護運營白名單導致的。

測試環境上我們也進行關閉,方便我們叢集的搭建。正式上線根據運維的需要進行部署執行。

  1. 檢視SELinux當前狀態:
getenforce
複製程式碼
  1. 修改SELinux狀態(臨時修改,重啟機器後失效)
 setenforce 0   #將SELinux修改為Permissive狀態(遇到違反安全策略的,會採取警告,允許通過)

  setenforce 1   #將SELinux狀態修改為Enforcing狀態(遇到違反安全策略的,不允許通過)
複製程式碼
  1. 修改SELinuxw為禁用狀態 (永久性,重啟機器後保持生效)
 開啟檔案:  /etc/selinux/config  修改 SELINUX = disabled  
 重啟機器後生效,重啟機器命令:reboot
複製程式碼

ip固定

三臺機器都需要這麼做

在企業環境中,如果是真實的伺服器,不是利用雲伺服器,那麼我們使用伺服器之前需要進行ip的固定,不然伺服器出現意外重啟,會導致我們ip變動,叢集就不能正常啟動。 固定ip,兩種執行方案:

  • 有專門的人員路由器端進行固定分配,這樣是最簡單的操作步驟。建議這麼做
  • 給專門的網路卡進行固定ip,很多時候伺服器是有雙網路卡與光口的,其參考以下步驟,僅供參考
  1. 檢視網路卡(檔案 ifcfg-enp* 為網路卡檔案)
ls /etc/sysconfig/network-scripts/
複製程式碼
  1. 配置網路卡ip
vi /etc/sysconfig/network-scripts/ifcfg-enp*
# 啟用host-only網路卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-enp0s3  ifcfg-enp0s8
複製程式碼
  1. 修改網路卡為靜態ip
    1. 修改BOOTPROTO為static
    2. 修改NAME為enp0s8
    3. 修改UUID(可以隨意改動一個值,只要不和原先的一樣)
    4. 新增IPADDR,可以自己制定,用於主機連線虛擬機器使用。
    5. 新增NETMASK=255.255.255.0 (網管 也可以和網段一樣 x.x.x.255)

配置靜態ip
4. 重啟網路卡

service network restart
複製程式碼

配置hosts

三臺機器都需要這麼做

重點注意,配置主節點Namenode的時候,需要將localhost 兩行 註釋掉,不然會出現找不到hostname的問題。其他節點可以存在

vim /etc/hosts

[root@tidb1 network-scripts]# cat /etc/hosts  
#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.108.66 tidb1
192.168.108.67 tidb2
192.168.108.68 tidb3
複製程式碼

配置免登陸

老生常態,叢集之間需要通過ssh,互相通訊,那麼需要設定免登陸的情況。 步驟如下:

  1. 生成祕鑰
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
複製程式碼
  1. 寫入authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys`
複製程式碼
  1. 注意許可權問題
chmod 0600 ~/.ssh/authorized_keys
複製程式碼
  1. 拷貝到其他伺服器上
ssh-copy-id root@tidb2
ssh-copy-id root@tidb3
複製程式碼
  1. 嘗試是否能互相免登陸
ssh tidb2
ssh tidb3
ssh tidb1
複製程式碼

在每條機器上,都需要進行操作,實現免登陸,如果存在免登陸失敗

  • 檢查配置的免登陸祕鑰是否正確,一般是祕鑰出現錯誤導致的。
  • 祕鑰沒有問題,檔案的許可權是否正確 ,進行第三步許可權的修改。
目錄許可權的問題,解決。
sudo chmod 700 ~
sudo chmod 700 ~/.ssh
sudo chmod 600 ~/.ssh/authorized_keys
複製程式碼

準備需要安裝的軟體

hadoop HA版本我們需要使用zookeeper來實現,所以需要準備的軟體就有這樣三個了 hadoop ,zookeeper,jdk1.8版本。

1. 建立三個軟體的儲存位置
mkdir zookeeper
mkdir hadoop
mkdir java
2. 下載軟體
移動到相應的目錄下 下載軟體
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.1/hadoop-3.1.1-src.tar.gz 
jdk 去oracle 網站進行下載再上傳到我們伺服器的目錄上。

3. 進行相應的解壓

tar -zxvf zookeeper-3.4.13.tar.gz 
tar -zxvf hadoop-3.1.1-src.tar.gz 
tar -zxvf jdk1.8.tar.gz 
複製程式碼

安裝

以上基礎內容都配置好之後,我們就可以開始進行程式的安裝了。首先在第一臺機器上進行配置好之後在通過rsync 進行同步傳送過去

rsync 安裝

centos 上的安裝,每臺都需要進行安裝

rpm -qa | grep rsync 檢查是否安裝無哦rsync 
yum install -y rsync 使用yum安裝rsync 
複製程式碼

Java環境的安裝

  1. 進入解壓的Java檔案路徑下
cd /home/bigdata/java/jdk1.8
pwd 找到路徑資訊
複製程式碼
  1. 配置環境變數
JAVA_HOME=/home/bigdata/java/jdk1.8
JRE_HOME=/home/bigdata/java/jdk1.8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
複製程式碼
  1. 同步到其他伺服器
tidb2:
rsync -avup /etc/profile root@tidb2:/etc/
tidb3:
rsync -avup /etc/profile root@tidb3:/etc/
複製程式碼
  1. 執行生效
三臺都執行
 source /etc/profile 
如果是使用的個人使用者需要執行
source ~/.bashrc
 
複製程式碼

zookeeper安裝

  1. 進入到上面的解壓的目錄下
cd  /home/bigdata/zookeeper/zookeeper-3.4.13
複製程式碼

zookeeper目錄結構

  1. 增加zoo.cfg檔案
cd /home/bigdata/zookeeper/zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
mv zoo_sample.cfg bak_zoo_sample.cfg  備份檔案
複製程式碼
  1. 編輯zoo.cfg

修改之前 建立dataDir 檔案 mkdir -p /home/bigdata/zookeeper/zookeeper-3.4.13/tmp 在原先的基礎內容上增加server配置內容與配置dataDir檔案內容


# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
#修改的dataDir檔案路徑,配置臨時檔案路徑內容即可,配置的檔案路徑需要提前建立好
# example sakes.
dataDir=/home/bigdata/zookeeper/zookeeper-3.4.13/tmp
# the port at which the clients will connect
clientPort=2181
# 配置server 幾臺機器就配置幾臺即可,注意server的數字,我們在後續需要用到
server.1=tidb1:2888:3888
server.2=tidb2:2888:3888
server.3=tidb3:2888:3888
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purg
複製程式碼

上面的基本配置資訊內容如下:

  • tickTime: 心跳基本時間單位,毫秒級,ZK基本上所有的時間都是這個時間的整數倍。
  • initLimit: tickTime的個數,表示在leader選舉結束後,followers與leader同步需要的時間,如果followers比較多或者說leader的資料灰常多時,同步時間相應可能會增加,那麼這個值也需要相應增加。當然,這個值也是follower和observer在開始同步leader的資料時的最大等待時間(setSoTimeout)
  • syncLimit : tickTime的個數,這時間容易和上面的時間混淆,它也表示follower和observer與leader互動時的最大等待時間,只不過是在與leader同步完畢之後,進入正常請求轉發或ping等訊息互動時的超時時間。
  • dataDir : 記憶體資料庫快照存放地址,如果沒有指定事務日誌存放地址(dataLogDir),預設也是存放在這個路徑下,建議兩個地址分開存放到不同的裝置上
  • clientPort : 配置ZK監聽客戶端連線的埠clientPort=2181
server.serverid=host:tickpot:electionport  固定寫法
server:固定寫法
serverid:每個伺服器的指定ID(必須處於1-255之間,必須每一臺機器不能重複)
host:主機名
tickpot:心跳通訊埠
electionport:選舉埠
複製程式碼
  1. 建立需要的資料夾
mkdir -p /home/bigdata/zookeeper/zookeeper-3.4.13/tmp
echo 1 > /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid
複製程式碼
  1. 同步到其他伺服器上
rsync -avup  /home/bigdata/zookeeper root@tibd2:/home/bigdata/ 
rsync -avup  /home/bigdata/zookeeper root@tibd3:/home/bigdata/ 
複製程式碼
  1. 修改其他伺服器上的myid
tidb2:
vim /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid  將1改為2
tidb3:
vim /home/bigdata/zookeeper/zookeeper-3.4.13/tmp/myid  將1改為3
複製程式碼
  1. 配置環境變數

JAVA_HOME=/home/bigdata/java/jdk1.8
JRE_HOME=/home/bigdata/java/jdk1.8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ZOOKEEPER_HOME=/home/bigdata/zookeeper/zookeeper-3.4.13
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ZOOKEEPER_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH ZOOKEEPER_HOME

source /etc/profile
複製程式碼
  1. 進行驗證是否正常。 以上7個步驟執行完畢後,我們需要進行zookeeper的驗證是否正確,將每臺伺服器上的zookpeer進行啟動
小黑板,三臺都需要執行
cd  /home/bigdata/zookeeper/zookeeper-3.4.13/bin
執行 ./zkServer.sh start 
檢查是否啟動

方式1 :
使用命令jps 檢查是否執行成功,jps 不存在的執行下安裝  檢查是否 有這個配置export PATH=$PATH:/usr/java/jdk1.8/bin
85286 QuorumPeerMain  代表執行成功 

方式2:
./zkServer.sh status 
[root@tidb1 bin]# ./zkServer.sh  status 
ZooKeeper JMX enabled by default
Using config: /home/bigdata/zookeeper/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower 代表是從節點
Mode: Leader 代表的是主節點
複製程式碼

Hadoop 的安裝

基礎檔案的建立

安裝過程中我們需要一些目錄檔案進行儲存我們的資料,日誌檔案,資料儲存檔案都是儲存在不同的目錄中,需要提前準備好
複製程式碼
  • 資料儲存
每臺機器上三個硬碟,需要三個目錄進行建立
mkdir -p /media/data1/hdfs/data
mkdir -p /media/data2/hdfs/data
mkdir -p /media/data3/hdfs/data
複製程式碼
  • journal 內容儲存
mkdir -p /media/data1/hdfs/hdfsjournal
複製程式碼
  • namenode 內容儲存路徑
mkdir -p /media/data1/hdfs/name
複製程式碼

修改相關的配置檔案

  • 配置Java環境
編輯 hadoop中的hadoop-env.sh檔案
vim  /home/bigdata/hadoop/hadoop/etc/hadoop/hadoop-env.sh
配置 jdk環境 ,在這裡還可以配置jvm記憶體大小等內容
export JAVA_HOME=/home/bigdata/java/jdk1.8
#export HADOOP_NAMENODE_OPTS=" -Xms1024m -Xmx1024m -XX:+UseParallelGC"
#export HADOOP_DATANODE_OPTS=" -Xms512m -Xmx512m"
#export HADOOP_LOG_DIR=/opt/data/logs/hadoop 配置日誌檔案
複製程式碼
  • 配置core-site.xmlvim /home/bigdata/hadoop/hadoop/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
   <!-- 制定hdfs的nameservice ,預設的連結地址 ,自己可以自定義的-->
    <property>  
        <name>fs.defaultFS</name>  
        <value>hdfs://cluster</value>  
    </property> 
    <!--臨時檔案 儲存目錄   -->
    
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/media/data1/hdfstmp</value>  
    </property>  
   
    <!--指定 zookeeper  ,還可以更多的設定超時時間等內容-->
    <property>  
        <name>ha.zookeeper.quorum</name>  
        <value>tidb1:2181,tidb2:2181,tidb3:2181</value>  
    </property>

</configuration>

複製程式碼
  • 配置hdfs-site.xmlvim /home/bigdata/hadoop/hadoop/etc/hadoop/hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->


<configuration>
   <!--配置的 nameservice 的名字 ,需要與core-site.xml 中保持一致,並且利用其名稱與namenode 設定唯一標識-->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster</value>
    </property>
    <!--配置的許可權問題-->
    <property>  
        <name>dfs.permissions.enabled</name>  
        <value>false</varsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/lue>  
    </property>
    <!--配置cluster下面的namenode 名稱-->
    <property>
        <name>dfs.ha.namenodes.cluster</name>
        <value>nn1,nn2</value>
    </property>
    
    <!--配置namenode的 地址與埠-->
    <property>
        <name>dfs.namenorsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/de.rpc-address.cluster.nn1</name>
        <value>tidb1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn2</name>
        <value>tidb2:9000</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.cluster.nn1</name>
        <value>tidb1:50070</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.cluster.nn2</name>
        <value>tidb2:50070</value>
    </property>
    <!-- journal namenode 同步namenode 的後設資料共享儲存位置。也就是journal的列表資訊->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://tidb1:8485;tidb2:8485;tidb3:8485/cluster</value>
    </property>rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/

   <!--配置高可用方案內容,失敗後自動切換的方式-->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!--ssh方案配置-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>hdfs-site.xml
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--journalnode 的儲存檔案路徑-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/media/data1/hdfs/hdfsjournal</value>
    </property>
    
   <!--開啟NameNode失敗自動切換-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!--namenode 檔案路徑資訊-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/media/data1/hdfs/name</value>
    </property>
    <!--datanode 資料儲存路徑,配置多個資料盤-->
    <property><property>
        <name>dfs.namenode.name.dir</name>
        <value>/media/data1/hdfs/name</value>
    </property>
        <name>dfs.datanode.data.dir</name>
        <value>/media/data1/hdfs/data,
               /media/data2/hdfs/data,
               /media/data3/hdfs/data
        </value>
    </property>
    
    <!--設定的副本數量,在程式彙總副本的係數是可以更改的-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--開啟webhdfs介面訪問-->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>dfs.journalnode.http-address</name>
        <value>0.0.0.0:8480</value>
    </property>
    <property>
        <name>dfs.journalnode.rpc-address</name>
        <value>0.0.0.0:8485</value>
    </property>
    <!--配置 zookeeper-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>tidb1:2181,tidb2:2181,tidb3:2181</value>
    </property>

</configuration>
複製程式碼
  • 修改mapred-site.xml vim /home/bigdata/hadoop/hadoop/etc/hadoop/mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
   <!--指定mr  配置yarn資訊-->
    <property>
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
    </property> 
    
     <!-- 指定mapreduce jobhistory地址 -->
    <property>  
        <name>mapreduce.jobhistory.address</name>  
        <value>tidb1:10020</value>  
    </property> 
    
    <!-- 任務歷史伺服器的web地址 -->
    <property>  
        <name>mapreduce.jobhistory.webapp.address</name>  
        <value>tidb1:19888</value>  rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
    </property> 
</configuration> 

複製程式碼
  • yarn-site.xmlvim /home/bigdata/hadoop/hadoop/etc/hadoop/yarn-site.xm
<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, softwarersync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Site specific YARN configuration properties -->


<configuration>
   <!--配置 namenode 的ha id  namenode 節點上進行配置 ,可不配置-->
    <property> 
      <name>yarn.resourcemanager.ha.id</name>  
      <value>rm1</value>  
    </property>
    <property>  
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value>  rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
    </property>
    <!-- Site specific YARN configuration properties -->
    <!--啟用resourcemanager ha-->  
    <!--是否開啟RM ha,預設是開啟的-->  
    <property>  
       <name>yarn.resourcemanager.ha.enabled</name>  
       <value>true</value>  
    </property>  
    <!--宣告兩臺resourcemanager的地址-->  
    <property>  
       <name>yarn.resourcemanager.cluster-id</name>  
       <value>rmcluster</value>  
    </property>  
    <!--制定rm的名字-->
    <property>  
       <name>yarn.resourcemanager.ha.rm-ids</name>  
       <value>rm1,rm2</value>  
    </property>  
    <!--指定rm的地址-->
    <property>  
       <name>yarn.resourcemanager.hostname.rm1</name>  
       <value>tidb1</value>  
    </property>  
    <property>  
       <name>yarn.resourcemanager.hostname.rm2</name>  
       <value>tidb2</value>  
    </property>  
   
    <!--指定zookeeper叢集的地址-->   rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
    <property>  
       <name>yarn.resourcemanager.zk-address</name>  
        <value>tidb1:2181,tidb2:2181,tidb3:2181</value>  
    </property>  
    <!--啟用自動恢復,當任務進行一半,rm壞掉,就要啟動自動恢復,預設是false-->   
    <property>  
       <name>yarn.resourcemanager.recovery.enabled</name>  
       <value>true</value>  
    </property>  
   
    <!--指定resourcemanager的狀態資訊儲存在zookeeper叢集,預設是存放在FileSystem裡面。-->   
    <property>  
       <name>yarn.resourcemanager.store.class</name>  
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>  
    </property> 

</configuration>

複製程式碼
  • workers/home/bigdata/hadoop/hadoop/etc/hadoop/workers
#將資料節點加入到workers裡面,如果namenode與datanode 節點是分開的,在這裡 namenode的節點就不加入到這裡。
#沒有分開那麼就需要加入
tidb1
tidb2
tidb3
複製程式碼
  • start-dfs.sh stop-dfs.shvim /home/bigdata/hadoop/hadoop/sbin/start-dfs.sh vim /home/bigdata/hadoop/hadoop/sbin/stop-dfs.sh
3.0版本以後需要增加以下內容
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
複製程式碼
  • start-yarn.sh stop-yarn.shvim /home/bigdata/hadoop/hadoop/sbin/start-yarn.sh vim /home/bigdata/hadoop/hadoop/sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
複製程式碼
  • 通過rsync 同步到其他機器上
rsync -avup hadoop-3.1.1 root@tidb2:/home/bigdata/hadoop/
rsync -avup hadoop-3.1.1 root@tidb3:/home/bigdata/hadoop/
同步完之後 如果配置的namenode的編號需要注意以下內容:
修改namenode上的id 編號,datanode 上的編號進行刪除,
複製程式碼

啟動

上面的所有檔案準備好之後,我們開始進行啟動了。

Zookeeper->JournalNode->格式化NameNode->建立名稱空間zkfs->NameNode->Datanode->ResourceManager->NodeManager

啟動zookeeper

每臺進入到安裝的zookeeper目錄下
./zkServer.sh start 
複製程式碼

啟動journalnode

進入到hadoop的安裝目錄下 然後進到sbin 目錄下
./hadoop-daemon.sh start journalnode  啟動journalnode 
複製程式碼

格式化namenode

  1. 格式化
hadoop namenode -format
複製程式碼
  1. 格式化同步內容到其他節點上,必須做,不然其他namenode啟動不起來
同步的內容:配置hdfs-site.xml檔案路徑下的內容
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/media/data1/hdfs/name</value>
    </property>
    
進行同步    
rsync -avup current  root@tidb2:/media/data1/hdfs/name/
rsync -avup current  root@tidb3:/media/data1/hdfs/name/
複製程式碼

格式化zkfc

小黑板:只能在namenode上進行格式化namdenode1

./hdfs zkfs -formatZK
複製程式碼

關閉journalnode

./hadoop-daemon.sh stop journalnode
複製程式碼

啟動 hadoop叢集

hadoop 目錄下的sbin目錄執行
./start-all.sh  全部啟動。
複製程式碼

啟動情況檢視

  • 使用命令檢視
[root@tidb1 bin]# ./hdfs haadmin -getServiceState nn1
standby
[root@tidb1 bin]# ./hdfs haadmin -getServiceState nn2
active

複製程式碼
  • 介面檢視
http://192.168.108.66:50070   # 注意這個埠是自定義的,不是預設埠
http://192.168.108.67:50070
複製程式碼

備用節點
主節點
掘金年度徵文 | 2018 與我的技術之路 徵文活動正在進行中......

相關文章