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

最近負責的項目準備上大數據平臺存儲,主要仍是圍繞Hadoop平臺來實現,雖然打算上cdh版本的hadoop,可是爲了前期方便開發仍是先使用原聲的hadoop進行開發,後期再準備更好的環境進行擴展。html

環境準備

三臺服務器系統環境是創建在Centos7.6基礎上。而且是創建在root帳戶上運行的,若是須要使用其餘用戶操做,注意權限的問題java

基礎機器分配

在三臺新購買的服務器上進行搭建。服務器規劃以下node

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節點。linux

每臺機器安裝內容以下:web

tidb1 tidb2 tidb3
NameNode
DataNode
ResourceManager
NodeManager
Zookeeper
journalnode
zkfc

在3.0版本以上,咱們能夠進行安裝多個NameNode節點,來保證更高的高可用方案。可是做爲基礎的測試環境開發這樣就是能夠了,更多機器擴展也在此進行擴展便可。數據庫

防火牆

三臺機器都須要這麼作express

部署集羣以前將集羣的防火牆進行關閉,不然部署出現,訪問端口訪問不到的情景。apache

centos 系統中存在兩種防火牆,firewall 與iptables , 7.0之後默認是firewall 防火牆,可是也在網上看到其餘朋友碰見過 7.0系統上存在兩種防火牆策略致使佈置程序端口一直訪問不到的狀況。vim

firewall

  1. 查看防火牆的狀態
[root@tidb1 sbin]# firewall-cmd --state
running
複製代碼
  1. 中止防火牆
systemctl stop firewalld.service
複製代碼
  1. 禁止開機啓動
systemctl disbale firewalld.service
複製代碼

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

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 與個人技術之路 徵文活動正在進行中......
相關文章
相關標籤/搜索