1. 程式人生 > >ZooKeeper+Hadoop的ResourceManager HA叢集高可用配置

ZooKeeper+Hadoop的ResourceManager HA叢集高可用配置

1.修改Linux主機名
2.修改IP
3.修改主機名和IP的對映關係

注意######如果你們公司是租用的伺服器或是使用的雲主機(如華為用主機、阿里雲主機等)

/etc/hosts裡面要配置的是內網IP地址和主機名的對映關係
4.關閉防火牆
5.ssh免登陸
6.安裝JDK,配置環境變數等

叢集規劃:

主機名 IP 安裝的軟體 執行的程序
service1 192.168.3.201 jdk、hadoop、zookeeper NameNode、DFSZKFailoverController(zkfc)、ResourceManager、QuorumPeerMain
service2 192.168.3.202 jdk、hadoop、zookeeper JournalNode、DataNode、QuorumPeerMain
service3 192.168.3.203 jdk、hadoop、zookeeper JournalNode、DataNode、QuorumPeerMain
service4 192.168.3.204 jdk、hadoop JournalNode、DataNode
service6 192.168.3.206 jdk、hadoop、zookeeper NameNode、DFSZKFailoverController(zkfc)、ResourceManager

說明:
1.在hadoop2.0中通常由兩個NameNode組成,一個處於active狀態,另一個處於standby狀態。Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便能夠在它失敗時快速進行切換。
hadoop2.0官方提供了兩種HDFS HA的解決方案,一種是NFS,另一種是QJM。這裡我們使用簡單的QJM。在該方案中,主備NameNode之間通過一組JournalNode同步元資料資訊,一條資料只要成功寫入多數JournalNode即認為寫入成功。通常配置奇數個JournalNode
這裡還配置了一個zookeeper叢集,用於ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode為standby狀態
2.hadoop-2.2.0中依然存在一個問題,就是ResourceManager只有一個,存在單點故障,hadoop-2.4.1解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調
安裝步驟:
1.安裝配置zooekeeper叢集(在service1上)
1.1解壓

[root@service1 local]#tar -zxvf    zookeeper-3.4.6.tar.g-C /zdq/
[root@service1 local]#mv zookeeper-3.4.6/ zookeeper

1.2修改配置

[root@service1 local]#cd /zdq/zookeeper/conf/
[root@service1 local]#cp zoo_sample.cfg zoo.cfg
[root@service1 local]#vim zoo.cfg

修改:
dataDir=/zdq/temp/zookeeper/zookeeper/zkData

在最後新增:

server.1=service1:2888:3888
server.2=service2:2888:3888
server.3=service3:2888:3888

儲存退出
然後建立一個tmp資料夾

[root@service1 local]#mkdir /zdq/zookeeper/zkData

再建立一個空檔案

[root@service1 local]#touch /zdq/zookeeper/zkData/myid

最後向該檔案寫入ID

[root@service1 local]#echo 1 > /zdq/zookeeper/zkData/myid

1.3將配置好的zookeeper拷貝到其他節點(首先分別在service2、service3根目錄:/zdq/)

[root@service1 local]#scp -r /zdq/zookeeper/ service2:/zdq/
[root@service1 local]#scp -r /zdq/zookeeper/ service3:/zdq/

注意:修改service2、service3對應/zdq/zookeeper/zkData/myid內容

service2:
[root@service1 local]#echo 2 > /zdq/zookeeper/zkData/myid
service3:
[root@service1 local]#echo 3 > /zdq/zookeeper/zkData/myid

2.安裝配置hadoop叢集(在service1上操作)
2.1解壓

[root@service1 local]#tar -zxvf hadoop-2.7.4.tar.gz -C /zdq/

2.2配置HDFS(hadoop2.0所有的配置檔案都在$HADOOP_HOME/etc/hadoop目錄下)

將hadoop新增到環境變數中

[[email protected] local]#vim /etc/profile
export JAVA_HOME=/zdq/jdk1.8
export HADOOP_HOME=/zdq/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

hadoop2.0的配置檔案全部在$HADOOP_HOME/etc/hadoop下

[root@service1 local]#cd /zdq/hadoop-2.7.4/etc/hadoop

2.2.1修改hadoo-env.sh

export JAVA_HOME=/zdq/jdk1.8

2.2.2修改core-site.xml

<configuration>
    <!-- 指定hdfs的nameservice為service1s -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://service1s</value>
    </property>
    <!-- 指定hadoop臨時目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/zdq/hadoop-2.7.4/tmp</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>service1:2181,service2:2181,service3:2181</value>
    </property>
</configuration>

2.2.3修改hdfs-site.xml

<configuration>
        <!--指定hdfs的nameservice為mycluster,需要和core-site.xml中的保持一致 -->
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
        <!-- mycluster下面有兩個NameNode,分別是service1,service6 -->
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>service1,service6</value>
        </property>
        <!-- service1的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.service1</name>
                <value>service1:9000</value>
        </property>
        <!-- service1的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.mycluster.service1</name>
                <value>service1:50070</value>
        </property>
        <!-- service6的RPC通訊地址 -->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.service6</name>
                <value>service6:9000</value>
        </property>
        <!-- service6的http通訊地址 -->
        <property>
                <name>dfs.namenode.http-address.mycluster.service6</name>
                <value>service6:50070</value>
        </property>
        <!-- 指定NameNode的元資料在JournalNode上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://service2:8485;service3:8485;service4:8485/mycluster</value>
        </property>
        <!-- 指定JournalNode在本地磁碟存放資料的位置 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/zdq/hadoop-2.7.4/journal</value>
        </property>
        <!-- 開啟NameNode失敗自動切換 -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <!-- 配置失敗自動切換實現方式 -->
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>
                        sshfence
                        shell(/bin/true)
                </value>
        </property>
        <!-- 使用sshfence隔離機制時需要ssh免登陸 -->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
        <!-- 配置sshfence隔離機制超時時間 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
</configuration>

2.2.4修改mapred-site.xml

<configuration>
    <!-- 指定mr框架為yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2.2.5修改yarn-site.xml

<configuration>
        <!-- 開啟RM高可靠 -->
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>
        <!-- 指定RM的cluster id -->
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>cluster1</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>service1</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>service6</value>
        </property>
        <property>
                <name>yarn.resourcemanager.recovery.enabled</name>
                <value>true</value>
        </property>

        <property>
                <name>yarn.resourcemanager.store.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
        <!-- 指定zk叢集地址 -->
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>service1:2181,service2:2181,service3:2181</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

2.2.6修改slaves(slaves是指定子節點的位置,因為要在service1上啟動HDFS、在service1啟動yarn,所以service1上的slaves檔案指定的是datanode的位置,service1上的slaves檔案指定的是nodemanager的位置)
service1
service2
service3

2.2.7配置免密碼登陸

首先要配置service1到service2、service3、service4、service6的免密碼登陸

在service1上生產一對鑰匙

[root@service1 local]#ssh-keygen -t rsa

將公鑰拷貝到其他節點,包括自己

2.4將配置好的hadoop拷貝到其他節點

[root@service1 local]#scp -r /zdq/hadoop-2.7.4/ service2:/zdq/
[root@service1 local]#scp -r /zdq/hadoop-2.7.4/ service3:/zdq/
[root@service1 local]#scp -r /zdq/hadoop-2.7.4/ service4:/zdq/
[root@service1 local]#scp -r /zdq/hadoop-2.7.4/ service6:/zdq/

注意:嚴格按照下面的步驟

2.5啟動zookeeper叢集(分別在service1、service2、service3上啟動zk)

[root@service1 local]#cd /zdq/zookeeper/bin/
[root@service1 local]#./zkServer.sh start

檢視狀態:一個leader,兩個follower

[root@service1 local]#./zkServer.sh status

2.6啟動journalnode(分別在service2、service3、service4上執行)

[root@service1 local]#cd /zdq/hadoop-2.7.4/sbin
[root@service1 local]#sbin/hadoop-daemon.sh start journalnode

執行jps命令檢驗,service2、service3、service4上多了JournalNode程序

2.7格式化HDFS

在service1上執行命令:

[root@service1 local]#hdfs namenode -format
[root@service1 local]#hadoop-daemon.sh start namenode

格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個檔案,這裡我配置的是/zdq/hadoop-2.7.4/tmp,

然後將/zdq/hadoop-2.7.4/tmp拷貝到service6的/zdq/hadoop-2.7.4/下。

[root@service1 local]#scp -r tmp/ service6:/zdq/hadoop-2.7.4/

在新的節點上實行狀態引導(我這裡新節點是service6)

[root@service6 local]hdfs namenode -bootstrapStandby

在一個NN上執行,完成edit日誌傳輸到JN

[root@service6 local]hdfs namenode -initializeSharedEdits

2.8格式化ZK(在service1上執行即可)

[root@service1 local]#hdfs zkfc -formatZK

2.9啟動HDFS(在service1上執行)

[root@service1 local]#sbin/start-dfs.sh

2.10啟動YARN(#####注意#####:是在service3上執行start-yarn.sh,把namenode和resourcemanager分開是因為效能問題,因為他們都要佔用大量資源,所以把他們分開了,他們分開了就要分別在不同的機器上啟動)

[root@service1 local]#service3:${HADOOP_HOME}/sbin/start-yarn.sh
[root@service1 local]#service4:${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

到此,hadoop-2.7.4配置完畢,可以統計瀏覽器訪問:
http://192.168.3.201:50070
NameNode ‘service1:9000’ (active)
http://192.168.3.206:50070
NameNode ‘service6:9000’ (standby)

驗證HDFS HA
首先向hdfs上傳一個檔案

[root@service1 local]#hadoop fs -put /etc/profile /profile
[root@service1 local]#hadoop fs -ls /

然後再kill掉active的NameNode

[root@service1 local]#kill -9 <pid of NN>

通過瀏覽器訪問:http://192.168.3.206:50070
NameNode ‘service6:9000’ (active)
這個時候service6上的NameNode變成了active
在執行命令:

[root@service1 local]#hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile

剛才上傳的檔案依然存在!!!
手動啟動那個掛掉的NameNode

[root@service1 local]#sbin/hadoop-daemon.sh start namenode

通過瀏覽器訪問:http://192.168.3.206:50070
NameNode ‘service1:9000’ (standby)

驗證YARN:
執行一下hadoop提供的demo中的WordCount程式:
[[email protected] local]#hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out

hadoop HA叢集搭建完成

相關推薦

ZooKeeper+Hadoop的ResourceManager HA叢集可用配置

1.修改Linux主機名 2.修改IP 3.修改主機名和IP的對映關係 注意######如果你們公司是租用的伺服器或是使用的雲主機(如華為用主機、阿里雲主機等) /etc/hosts裡面要配置的是內網IP地址和主機名的對映關係 4.關閉防火牆 5

HaProxy+keepalived+mycat叢集可用配置

部署圖 叢集部署圖的理解: 1、keepalived和haproxy必須裝在同一臺機器上(如172.17.210.210.83機器上,keepalived和haproxy都要安裝),keepalived負責為該伺服器搶佔vip(虛擬ip),搶佔到vip後,對該主機的訪問

mq系列rabbitmq-02叢集+可用配置

一。 rabbitmq 叢集高可用介紹    rabbitmq的broker是由一個或者多個物理節點組成 rabbtmq程式之間共享使用者 虛擬主機 佇列 交換機,繫結和引數,也可以將多個節點 組合成一個叢集,所有的資料都會被拷貝到叢集中不同的節點 除了佇列資料  佇列資料

eureka叢集可用配置

網上講這個東西的很多,抄來抄去的,大部分類似,多數沒講明白為什麼那麼配置。譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配區別在哪裡;eureka的客戶端新增service-url時,是不是需要把所有的e

Hadoop叢集的ResourceManager HA可用配置

ResourceManager HA yarn-site.xml: <configuration> <!-- Site specific YARN configuration properties --> <property> <n

Hadoop叢集的Namenode HA可用配置

HA配置首先要有zookeeper叢集,這裡就不再說明zookeeper叢集的搭建了,可以在我的前面的文章中找到 我這裡是在之前Hadoop單點的基礎上進行HA配置的 叢集HA規劃: cdh0: Namenode   Datanode  JournalNod

Hadoop-2.7.6雙namenode配置搭建(HA可用叢集部署教程

配置雙namenode的目的就是為了防錯,防止一個namenode掛掉資料丟失,具體原理本文不詳細講解,這裡只說明具體的安裝過程。Hadoop HA的搭建是基於Zookeeper的,關於Zookeeper的搭建可以檢視這裡 hadoop、zookeeper、hbase、spa

HA+LVS 可用叢集

keepalived:採用VRRP熱備份協議,可一主多備,優先順序不同。 NFS不做 NAT模式那一篇有 使用keepalived實現雙機熱備。 chkconfig NetworkManager off chkconfig iptables off cat /etc/sysconf

Hadoop可用配置檔案hdfs-site.xml之dfs.ha.fencing.methods說明

dfs.ha.fencing.methods配置有sshfence和shell兩種方法: sshfence:防止namenode腦裂,當腦裂時,會自動通過ssh到old-active將其殺掉,將standby切換為active。         &nb

Hadoop叢集可用搭建的配置檔案

一、core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value>

四節點搭建Hadoop HA可用叢集模式

準備工作: 四個節點間的ssh互通,(至少兩個NN節點和其他節點ssh互通); JDK 1.7+,環境變數配置,各節點保持一致; /etc/hosts 節點名對映,各節點保持一致; 保證各元件版本間相容性,推薦使用cdh的jar包 datas : 當做所

大資料之Spark(八)--- Spark閉包處理,Spark的應用的部署模式,Spark叢集的模式,啟動Spark On Yarn模式,Spark的可用配置

一、Spark閉包處理 ------------------------------------------------------------ RDD,resilient distributed dataset,彈性(容錯)分散式資料集。 分割槽列表,fun

Docker下配置redis叢集可用

Docker下Redis叢集搭建 注:本文中紅色字型為命令 藍色字型為指令碼內容 綠色字型為備註 一:建立redis映象 1:mkdir docker_redis_cluster   cd docker_redis_cluster   wget http://d

HBase 叢集搭建和可用配置

HBase叢集建立在hadoop叢集基礎之上,所以在搭建HBase叢集之前需要把Hadoop叢集搭建起來,並且要考慮二者的相容性.現在就以3臺機器為例,搭建一個簡單的叢集. 1.進入hbase的配置目錄,在hbase-env.sh檔案裡面加入java環境變數.即: JAVA_HOME=exp

Spring Cloud | 第七篇: Eureka叢集可用配置

       一直在網上查閱資料,配置高可用的叢集,看完了發現還是不明白,或者按照文章的內容一步一步去實現發現根本實現不了,真的很懷疑他們寫的時候是否真的自己測試過了還是大家都是轉發來轉發去的,自己弄了好久,發現沒有一個拿來就可以用的,並且裡面很多的東西也沒有講解清楚,於是打

RabbitMQ 叢集可用配置

此文轉自:http://88250.b3log.org/rabbitmq-clustering-ha 未實驗過 叢集概述 通過 Erlang 的分散式特性(通過 magic cookie 認證節點)進行 RabbitMQ 叢集,各 RabbitMQ 服務為對等節點

canal+zookeeper可用配置

一、部署環境 1.基礎環境: 軟體 版本 作用 Linux Centos7.1,8g Jdk 1.8.0_151

獨立模式、偽分佈模式、hbase和hadoop HA可用)完全分散式模式。整合配置

一、獨立模式: 1.下載hbase檔案 略 2.tar開 略 3.配置環境變數 略 4.修改配置檔案 在hbase安裝目錄下: //配置jdk路徑 [/conf/hbase-env.sh] export JAVA_HOME=/zdq/jdk //配置hbas

基於Zookeeper的HDFS可用配置

前言 在 Hadoop 1.X版本中,NameNode是整個HDFS叢集的單點故障(single point of failure,SPOF):每一個HDFS叢集只能有一個NameNode節點,一旦NameNode所在伺服器宕機或者出現故障將導致整個叢集都不可用,除非重啟或

Kubernetes master節點的可用配置

names iclient family each [0 refresh srv echo let 了解Kubernetes架構都知道Master節點在整個集群中的位置,為了保證整個架構的高可用,Kubernetes提供了HA的架構,處於興趣和對架構的進一步了解,我在自