IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop(二): YARN(资源管理器 RM)、HBase高可用集群搭建 -> 正文阅读

[大数据]Hadoop(二): YARN(资源管理器 RM)、HBase高可用集群搭建

目录

一、Hadoop的高可用原理概述

1.1 原理概述

1.2 实验环境要求

二、高可用集群的搭建

2.1 搭建Zookeeper

2.2 搭建HA的高可用

2.3 YARN(资源管理器 RM)高可用集群部署

2.4 HBase高可用


一、Hadoop的高可用原理概述

1.1 原理概述

????????高可用是指在集群中当有一太master,出现故障时,另外一台可以接替其工作。

????????在典型的 HA 集群中,通常有两台不同的机器充当 NN。两台主机只有一台处于Active状态,另一台处于Standby。处于Active状态的主机负责HA集群中的操作管理,Standby负责备份,当Active出现状况时,可自动切换启动使用。

??????? 在HA集群中为了让 Standby 和 Active 两台主机保持元数据保持一致,它们都将会和JournalNodes 守护进程通信。当 Active节点执行任何有关命名空间的修改,它需要持久化到一半以上的 JournalNodes 上(通过 edits log 持久化存储),而 Standby节点负责观察 edits log的变化,从 JNs 中读取 edits 信息,并更新其内部的命名空间。当 Active节点出现故障,Standby将会保证从 JNs 中读出了全部的 Edits,然后切换成 Active 状态。

??????? Standby? 读取全部的 edits 可确保发生故障转移之前,是和 Active拥有完全同步的命名空间状态。

????????为了提供快速的故障恢复,Standby也需要保存集群中各个文件块的存储位置。为了实现这个,集群中所有的 Database 将配置好 Active和 Standby的位置,并向它们发送块文件所在的位置及心跳,如下图所示:

【注】在 HA 集群中,Standby也执行 namespace 状态的 checkpoints,所以不必要运行Secondary NN、CheckpointNode 和 BackupNode。

1.2 实验环境要求

????????5台虚拟机、Zookeeper的压缩包

其中: server1、5搭建NN的高可用;

server2、3、4搭建zk\jk\dn

虚拟机ip主机名搭载的服务
192.168.19.71server1NameNode、ResourceManager、DFSZKFailoverController
192.168.19.75server5NameNode、ResourceManager、DFSZKFailoverController
192.168.19.72server2DataNode、NodeManager、JournalNode、QuorumPeerMain
192.168.19.73server3DataNode、NodeManager、JournalNode、QuorumPeerMain
192.168.19.74server4DataNode、NodeManager、JournalNode、QuorumPeerMain

【注】 (1)NameNode machines:运行 Active和 Standby 的机器需要相同的硬件配置;

(2)JN :相对来说比较轻量,可以和其他线程(比如 NN,YARN ResourceManager)运行在同一台机器上。

(3)在一个集群中,最少要运行 3 个 JN 守护进程,来增强容错能力。更多则需要保证运行个数为奇数个 JN(3、5、7 等),当运行 N 个 JN,系统将最多容忍(N-1)/2 个 JN 崩溃。

二、高可用集群的搭建

2.1 搭建Zookeeper

##清空所有运行进程
sbin/stop-all/.sh

##清楚数据缓存目录--->server1\2\3均要清除
rm -fr /tmp/*

##新加入节点安装nfs--->server4\5
yum install -y nfs-utils

##新加入节点创建目录并挂载共享文件--->server4\5
useradd hadoop
echo 123 | passwd --stdin hadoop
mount 192.168.19.71:/home/hadoop /home/hadoop

##对zookeeper压缩包进行解压--->nfs共享,所有主机均生效
tar zxf zookeeper-3.4.9.tar.gz

##对ZK进行配置--->server2\3\4
mkdir /tmp/zookeeper    -->存储ZK集群信息
cd zookeeper-3.4.9/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg   -->加入zk三个节点的IP,IP1:192.168.19.72\IP2:192.168.19.73\IP3:192.168.19.74 -- 端口2888(同步数据)3888(选举leader)
---------------------
server.1=192.168.19.72:2888:3888
server.2=192.168.19.73:2888:3888
server.3=192.168.19.74:2888:3888
---------------------

##将对应的编号写入对应主机的文件中--->server2\3\4
echo 1 > /tmp/zookeeper/myid    --server2
echo 2 > /tmp/zookeeper/myid    --server3
echo 3 > /tmp/zookeeper/myid    --server4

##在server2\3\4上开启zkserver
cd zookeeper-3.4.9
bin/zkServer.sh start

##查看各节点状态--->server2\3\4
bin/zkServer.sh status

##在leader节点执行初始化命令--server2(status--leader)
bin/zkCli.sh

##分别查看节点运行的进程--->server2\3\4
jps

2.2 搭建HA的高可用

##编辑server1的core-site.xml文件:/home/hadoop/etc/hadoop/core-site.xml

---------------------------------------------------------
<configuration>
<property>
    <name>fs.defaultFS</name>	--指定hdfs的namenode为masters (名称可自定义,前后要一致)
    <value>hdfs://masters</value>
</property>

<property>
    <name>ha.zookeeper.quorum</name>	--指定 zookeeper 集群主机地址
    <value>192.168.19.72:2181,192.168.19.72:2181,192.168.19.72:2181</value>
</property>
</configuration>
---------------------------------------------------------

##编辑hdfs-site.xml文件:/home/hadoop/etc/hadoop/hdfs-site.xml

---------------------------------------------------------
[hadoop@server9 hadoop]$ cat hdfs-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>		--副本数为3
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>	--指定hdfs的nameservices为masters,和core-site.xml 文件中的设置保持一致
        <name>dfs.nameservices</name>
        <value>masters</value>
    </property>
    
    <property>		--masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)
        <name>dfs.ha.namenodes.masters</name>
        <value>h1,h2</value>
    </property>
    
    <property>		--指定 h1 节点的 rpc 通信地址
        <name>dfs.namenode.rpc-address.masters.h1</name>
        <value>192.168.19.71:9000</value>
    </property>
    
    <property>		--指定 h1 节点的 http 通信地址
        <name>dfs.namenode.http-address.masters.h1</name>
        <value>192.168.19.71:9870</value>
    </property>
    
    <property>		--指定 h2 节点的 rpc 通信地址
        <name>dfs.namenode.rpc-address.masters.h2</name>
        <value>192.168.19.75:9000</value>
    </property>
    
    <property>		--指定 h2 节点的 http 通信地址
        <name>dfs.namenode.http-address.masters.h2</name>
        <value>192.168.19.75:9870</value>
    </property>
    
    <property>		--指定 NameNode 元数据在 JournalNode 上的存放位置
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://192.168.19.72:8485;192.168.19.73:8485;192.168.19.74:8485/masters</value>
    </property>
    
    <property>		--指定 JournalNode 在本地磁盘存放数据的位置
        <name>dfs.journalnode.edits.dir</name>
        <value>/tmp/journaldata</value>
    </property>
    
    <property>		--开启 NameNode 失败自动切换
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    <property>		--配置失败自动切换实现方式
        <name>dfs.client.failover.proxy.provider.masters</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>
    
    <property>		--使用 sshfence 隔离机制时需要 ssh 免密码
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    
    <property>		--配置 sshfence 隔离机制超时时间
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
</configuration>

---------------------------------------------------------
##开启journalnode服务-->第一次开启需要手动按顺序启动-->server2\3\4
bin/hdfs --daemo start journalnode

##在jps中查看
jps

##进入server5hadoop目录,格式化HDFS集群
bin/hdfs namenode -format

##Namenode数据默认存放在/tmp,将server1数据拷贝到server5
scp -r /tmp/hadoop-hadoop server1:/tmp

设置server5-->server1的免密登录
ssh server1

##格式化zookeeper(只需要在h5上执行即可)
bin/hdfs zxfc -formatZK


##在nn节点进行查看-->server2
zookeeper/bin/zkCli.sh    --不要推出

##server5启动dfs
hadoop/sbin/start-dfs.sh
jps  --查看启动的zk监控器

##server2上查看数据
ls /hadoop-ha/master
get /hadoop-ha/ActiveBreadCrumb

##WEB访问:
192.168.19.75:9870  ---active
192.168.19.71:9870  ---standby
##数据测试

##在server5上创建Hadoop目录,上传input到DFS
hadoop/bin/hdfs dfs -mkdir /user
hadoop/bin/hdfs dfs -mkdir /user/hadoop
hadoop/bin/hdfs dfs -ls
hadoop/bin/hdfs dfs -put input


##web访问界面,查看数据目录
192.168.19.75:9870
##关闭server5的nn-->模拟节点故障
jps
kill pid

##在dn上查看-->server2
get /hadoop-ha/ActiveBreadCrumb

##访问server1,查看DN  --server1--status:active
192.168.19.71:9870

##查看server5的input---没有异常
hadoop/bin/hdfs dfs -ls input 

##节点恢复-->server5
hadoop/bin/hdfs --daemon start namenode

##此时server1为active server5为standby--没有必要再次切换浪费资源
##可通过节点访问192.168.19.71:9870

2.3 YARN(资源管理器 RM)高可用集群部署

##配置yarn-site.xml文件
--------------------------------------
[hadoop@server9 hadoop]$ cat yarn-site.xml 
<?xml version="1.0"?>
<configuration>

    <property>		--配置可以在 nodemanager 上运行 mapreduce 程序
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>		--指定变量
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>

    <property>		--激活 RM 高可用
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    
    <property>		--指定 RM 的集群 id
        <name>yarn.resourcemanager.cluster-id</name>
        <value>RM_CLUSTER</value>
    </property>
    
    <property>		--定义 RM 的节点
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    
    <property>		--指定 RM1 的地址
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>192.168.19.71</value>
    </property>
    
    <property>		--指定 RM2 的地址
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>192.168.19.75</value>
    </property>
    
    <property>		--激活 RM 自动恢复
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    
    <property>		--配置 RM 状态信息存储方式,有 MemStore 和 ZKStore
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    
    <property>		--配置为 zookeeper 存储时,指定 zookeeper 集群的地址
        <name>yarn.resourcemanager.zk-address</name>
        <value>192.168.19.72:2181,192.168.19.73:2181,192.168.19.74:2181</value>
    </property>
</configuration>

--------------------------------------

##server5上开启服务
/home/hadoop/hadoop/sbin/start-yarn.sh
jps  --查看服务开启情况

##分别查看是否开启服务--->server2\3\4
jps    --resourcemanger\nodemanger

##在nodemanger节点上查看active状态的节点
get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb

##访问相应的web端进行查看
192.168.19.71:8088

##模拟故障切换

##查看rm1上的PID
jps
kill PID

##查看rm2此时的状态
get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb

##访问网页端
192.168.19.71:8088

访问192.168.19.75:8088失败


##重新启动
bin/yarn ---daemo start resourcemanger         --状态没有切换,没有必要额外浪费资源

2.4 HBase高可用

##下载HBase,并进行解压
tar zxf hbase-1.2.4-bin.tar.gz

##配置hbase的环境变量,加入java,hadoop的路径

vim ~/hbase-1.2.4/conf/hbase-env.sh
--------------------------------------------
export JAVA_HOME=/home/hadoop/java
export HADOOP_HOME=/home/hadoop/hadoop
...
export HBASE_MANAGES_ZK=false  ---由于已经配置好zk集群,因此不采用hbase自带的zk ,设置为false

--------------------------------------------

##配置 regionservers 文件,加入集群节点
192.168.19.72
192.168.19.73
192.168.19.74

##配置habse-site.xml

----------------------------------------------
[hadoop@server9 conf]$ cat hbase-site.xml
<configuration>

<!-- 指定 region server 的共享目录,用来持久化 HBase。这里指定的 HDFS 地址
     是要跟 core-site.xml 里面的 fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致。 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://masters/hbase</value>
</property>
<!-- 启用 hbase 分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- Zookeeper 集群的地址列表,用逗号分割。默认是 localhost,是给伪分布式用
     的。要修改才能在完全分布式的情况下使用。 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.19.72, 192.168.19.73, 192.168.19.74</value>
</property>
<!-- 指定 hbase 的 master -->
<property>
<name>hbase.master</name>
<value>h1</value>
</property>
</configuration>

----------------------------------------------

##执行启动脚本
bin/start-hbase.sh


##查看 HMaster信息-->server1\5
jps

##查看HRegionServer-->server2\3\4
jps

##进入bin\hbase shell 插入数据

---------------------------------------------------
[hadoop@server9 hbase-1.2.4]$ bin/hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.4, r67592f3d062743907f8c5ae00dbbe1ae4f69e5af, Tue Oct 25 18:10:20 CDT 2016

hbase(main):001:0> create 'test', 'cf'
0 row(s) in 2.4580 seconds

=> Hbase::Table - test
hbase(main):002:0> list 'test'
TABLE                                                                                                                                                                        
test                                                                                                                                                                         
1 row(s) in 0.0220 seconds

=> ["test"]
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1580 seconds

hbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0160 seconds

hbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0200 seconds

hbase(main):006:0> scan 'test'
ROW                                          COLUMN+CELL                                                                                                                     
 row1                                        column=cf:a, timestamp=1629022054722, value=value1                                                                              
 row2                                        column=cf:b, timestamp=1629022060634, value=value2                                                                              
 row3                                        column=cf:c, timestamp=1629022066509, value=value3                                                                              
3 row(s) in 0.0630 seconds

---------------------------------------------------

##在hadoop中查看
hadoop/bin/hdfs dfs -ls /

##在web端访问
192.168.19.75:16010  --- master为server5, backup 为server1,regions server为 server2/3/4

#故障切换

##关闭hmaster
jps
kill PID

##查看切换
192.168.19.71:16010

##启动server5

hadoop/bin/habse-daemon.sh start master

##查看进程
jps
192.168.19.75:16010  ---显示为backup

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:18:22  更:2022-09-04 01:19:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:51:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码