Hadoop 完全分布式规划

本文详细介绍了Hadoop完全分布式集群的规划与配置,包括集群安装配置原则、不同机器数量的布局规划、完全分布式安装步骤。重点讨论了NameNode的高可用性,通过JournalNode实现元数据共享,以及Zookeeper在FailOverController中的角色,确保NameNode的热备切换。还涵盖了启动和检查集群进程的方法,以及Hadoop HA的相关面试题。
摘要由CSDN通过智能技术生成

img

完全分布式功能:主要是使NN互为热备,解决NameNode单点故障问题

– hadoop2.x中的standby NN只有一个,在hadoop3.x中可以有多个。

  1. 信息共享问题

    通过JournalNode集群实现元数据共享,活跃状态(Active)的NN通过元数据的更新发送给大部分的JN机器,只要保证JN集群大部分机器存活,StandBy状态的NameNode就可以获得数据。

    多个NameNode之间共享数据,可以通过Network File System或者Quorum Journal Node。前者是通过Linux共享的文件系统,属于操作系统的配置;后者是Hadoop自身的东西,属于软件的配置。

    Journal Node集群信息共享实现机制:

    Journal Node是在Yarn中新加的,Journal Node的作用是存放EditLog的,在MR1中editlog是和fsimage存放在一起的然后SecondaryNameNode做定期合并,Yarn在这上面就不用SecondaryNameNode了。

    Active Namenode往JN集群里写editlog数据,active namenode会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到JN中。

    Standby NameNode定期的检查,从JN把最近的Edit文件读过来,然后把Edits文件和Fsimage文件合并成一个新的Fsimage,合并完成之后会通知Active Namenode获取这个新Fsimage。Active Namenode被动通过RPC获得这个新的Fsimage文件之后,替换原来旧的Fsimage文件。

    另,在配置中定义Journal Node节点的个数是可多个的(一般是奇数个,一般是3),管理者是QJM,全称QuorumJournalManager。(这个关于JN集群高可用的事,以后研究好再说)

  2. 老大选举问题

    两个NameNode通过Zookeeper实现选举,这个过程通过FailOverController来具体执行。

    FailOverController,联系NN和ZK的进程:

    这里采用的是zk的临时节点机制,当active namenode挂掉后,监控到节点消失,就可以把standby namenode切换成active状态,成为active namenode。

    注意,可以人工切换和自动切换。人工切换是通过执行HA管理的命令来改变namenode的状态,从standby到active,或者从active到standby。自动切换则在active namenode挂掉的时候,standby namenode自动切换成active状态,取代原来的active namenode成为新的active namenode,HDFS继续正常工作。


集群安装配置原则:
  1. 两个NameNode一般单独安装
  2. FailOverConteoller的进程必须和NameNode装在一起
  3. ResourceManage 一般单独安装或跟NameNode安装到一起
  4. DataNode单独安装
  5. NodeManager一般和DataNode装在一起
  6. JN单独安装,或跟DataNode装在一起
  7. Zookeeper通常是单独的集群,也可以配在hadoop集群中
不同机器数量的布局规划

六台机器情况下的集群分布

NameNode DataNode JN FailOverController ResourceManage NodeManager Zookeeper
N 01
S 02
03
04
05
06

五台机器情况下的集群分布

NameNode DataNode JN FailOverController ResourceManage NodeManager Zookeeper
N 01
S 02
03
04
05

三台机器的集群分布

NameNode DataNode JN FailOverController ResourceManage NodeManager Zookeeper
N 01
N 02
03

完全分布式安装配置

---------------------------------------------以三台机为例

前期准备

固化IP

关闭每台机器的防火墙
配置主机名,配置host文件,配置ssh免密
安装JDK,配置环境
调整系统时间

软件安装

安装Zookeeper,配置环境变量

1 设置zoo.conf文件

[root@student01 conf]# pwd
/usr/local/src/zookeeper/zookeeper-3.4.7/conf
[root@student01 conf]# vim zoo.cfg 

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# 存储zk快照的文件夹,包括zk的选举文件myid后期也要放里面
dataDir=/usr/local/src/zookeeper/zookeeper-3.4.7/tmp
# zk端口号
clientPort=2181
# 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 purge feature
#autopurge.purgeInterval=1
# server关键字,后面数字是选举id,要求可以比较大小,2888为原子广播端口,3888为选举端口
server.1=192.168.161.121:2888:3888
server.2=192.168.161.122:2888:3888
server.3=192.168.161.123:2888:3888                                       

2 建立tmp文件夹,在里面建立myid文件,里面写选举id

[root@student01 tmp]# cat myid
1

3 配置环境变量

#set env
JAVA_HOME=/usr/local/src/java/jdk1.8.0_51
JAVA_BIN=/usr/local/src/java/jdk1.8.0_51/bin
ZK_HOME=/usr/local/src/zookeeper/zookeeper-3.4.7 #配置zk主文件夹
PATH=$JAVA_HOME/bin:$PATH:$ZK_HOME/bin #方便在主程序调用zk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH ZK_HOME #方便在子程序调用zk

4 采用SCP复制到其他两台机器上

[root@student01 src]# scp -r zookeeper root@student02:/usr/local/src
[root@student01 src]# scp -r zookeeper root@student03:/usr/local/src

后面记得修改其他两台机的myid文件内容为各自选举编号。

安装Hadoop并配置

位置:主文件夹/etc/hadoop

1 配置hadoop-env.sh

[root@student01 hadoop]# pwd
/usr/local/src/hadoopX/hadoop-2.7.1/etc/hadoop
[root@student01 hadoop]# vim hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/local/src/java/jdk1.8.0_51 #/etc/profile 中的配置不生效,需重新配置

2 配置core-site.xml

<configuration>
    <!-- 指定hdfs的nameservice为ns -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
        </property>
    <!--指定hadoop数据临时存放目录-->
    <property>
        <!--在hadoop安装目录下 创建一个tmp目录-->
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoopX/hadoop-2.7.1/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>4096</value>
    </property>
    <!--指定zookeeper地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值