Hadoop2.0分布式HA环境部署

Hadoop2.0分布式HA环境部署

Hadoop概述

  由于Hadoop1.0集群节点中只存在一个元数据(NameNode)节点,负责元数据合并的节点为SecondaryNameNode,那么在这个场景下如果元数据节点服务宕机,就会出现集群环境不可用,需要人工操作才能够重新启动,因此Hadoop2.0在Hadoop1.0的配置环境基础之上增加了HA机制,同时通过Zookeeper做集群的健康状态监测,通过FailoverController监控两个元数据节点的服务状态,并负责元数据节点的主备切换,此时如果元数据节点服务宕机,那么Zookeeper就会自动的完成元数据节点主备切换,不需要人工干预完成。

Hadoop2.0分布式HA环境部署_第1张图片

  如上图所示:

在Hadoop2.0分布式集群中,可以有多个命名空间(NameSpace),多个命名空间可以组建联盟(Federation)集群。联盟由若干个命名空间组成,一个命名空间由多个元数据节点构成,所有的命名空间都共用一个由若干个数据节点(DataNode)组成的存储集群。

在一个命名空间中,由Zookeeper集群为分布式应用程序做协调服务,通过JournaNode来负责两个元数据节点之间的数据共享。

Hadoop2.0集群的特点:

  1. 共享存储,通过JournalNode通过元数据节点,保证元数据active节点和元数据standby节点的数据同步;
  2. 数据上报,DataNode节点通过向两个元数据节点汇报块信息;
  3. 应用监控,通过Zookeeper来做同步锁机制,完成心跳等信息同步;
  4. 防止脑裂,保证任何时候,有且只有一个主NameNode对外提供服务;共享存储隔离,确保有且只有一个NameNode可以写入edits;客户端隔离,确保有且只有一个NameNode可以响应Client请求;DataNode隔离,确保有且只有一个NameNode向DataNode下发命令

Linux虚拟机配置

主机名

IP地址

JDK版本

内存

CPU

角色

master

192.168.134.132

jdk1.8

2GB

2核

NameNode Active

master1

192.168.134.133

jdk1.8

2GB

2核

NameNode standby

slave1

192.168.134.134

jdk1.8

1GB

1核

DataNode

slave2

192.168.134.135

jdk1.8

1GB

1核

DataNode

slave3

192.168.134.136

jdk1.8

1GB

1核

DataNode

安装jdk1.8环境,安装忽略

创建用户,用户大数据配置使用,尽量不要使用root用户

useradd work

passwd work

除去环境变量和yum安装软件相关配置使用root用户以外,所有的操作都使用work用户执行,安装fuser服务,大数据主备切换中使用

yum install psmisc

work用户创建文件目录:mkdir -p /application 将配置放到此文件目录下,可根据个人习惯而定。

虚拟机采用Linux7环境,配置hosts系统文件,用别名取代IP,配置信息如下:

192.168.134.132 master

192.168.134.133 master1

192.168.134.134 slave1

192.168.134.135 slave2

192.168.134.136 slave3

可分别配置每台服务器hosts文件,也可以scp完成

安装SSH免密登录

  1. 创建密钥

ssh-keygen -t rsa

输入上述命令后,下面操作只需要按回车键,不用设置任何信息

命令结束会在~/.ssh/目录生成对应的私钥和公钥等文件(id_rsa,id_rsa.pub)

  1. 认证授权

公钥文件追加到authorized_keys文件,操作如下:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

  1. 文件赋权

在work账户下,需要给authorized_keys赋予600权限,否则会因为权限导致登录失败,操作如下:

chmod 600 ~/.ssh/authorized_keys

  1. 其他节点创建密钥

使用work用户,分别在其他服务器上创建密钥,然后将各个节点的公钥(id_rsa.pub)文件中内容追加到master节点的authorized_keys,操作如下:

ssh work@master1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh work@slave1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh work@slave2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh work@slave3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

将最终生成的authorized_keys文件分发到每台服务器的~/.ssh/文件目录下。

scp ~/.ssh/authorized_keys work@master1:~/.ssh/

scp ~/.ssh/authorized_keys work@slave1:~/.ssh/

scp ~/.ssh/authorized_keys work@slave2:~/.ssh/

scp ~/.ssh/authorized_keys work@slave3:~/.ssh/

执行(ssh 服务名)切换,如:ssh master1

第一次需要输入密码,之后就可以正常登陆了,各个节点SSH关系分布图如下:

Hadoop2.0分布式HA环境部署_第2张图片

  1. 关闭防火墙(或端口限制)

systemctl status firewalld查看防火墙是否关闭

systemctl stop firewalld关闭防火墙

由于Linux服务器版本相关命令不一致,可网上搜索关闭的方式

线上环境则需要慎重开闭指定的大数据端口服务,如50070,8188等

  1. 修改时区,保持每台服务器时间一致即可

Zookeeper环境搭建

节点

主机名(IP)

角色

master

192.168.134.132

DFSZKFailoverController

master1

192.168.134.133

DFSZKFailoverController

slave1

192.168.134.134

QuorumPeerMain

slave2

192.168.134.135

QuorumPeerMain

slave3

192.168.134.136

QuorumPeerMain

分别在slave1、slave2、slave3三台服务器上安装zookeeper服务,操作命令如下:

cd /application && tar -zxvf zookeeper-3.4.13.tar.gz

ln -s zookeeper-3.4.13 zookeeper #起个别名

进入zookeeper的conf目录下,配置zookeeper集群信息

mv zoo_sample.cfg zoo.cfg编辑zoo.cfg即可,配置信息如下所示:

Hadoop2.0分布式HA环境部署_第3张图片

dataDir和dataLogDir文件目录需要创建

在dataDir文件目录下创建myid文件,在该文件里面写入一个0-255之间的整数,每个zookeeper节点上这个文件的数字应是唯一的。

配置环境变量:略

三台服务器采用同样的方式配置,注意myid不一致即可,其他都一样

验证服务是否搭建成:分别在三台服务器上执行如下命令:

zkServer.sh start

注意:zookeeper由于采用了选举算法,集群中会有一个leader和多个follower,需要半数以上的服务才能正常运行。

Hadoop环境搭建

配置hadoop环境注意点:

  1. 保证ssh正常登陆
  2. 配置中涉及的文件目录需要work用户创建,慎用root用户,否则不一定能够正常运行
  3. 采用hadoop2.9.2版本搭建,官方下载指定的版本

cd /application && tar -zxvf hadoop-2.9.2.tar.gz

ln -s hadoop-2.9.2 hadoop

配置环境变量,进入hadoop的etc/hadoop目录

  1. 配置core-site.xml(配置Service的URI地址、hadoop集群临时目录等信息)

    fs.defaultFS

    hdfs://cluster

    io.file.buffer.size

    131072

    hadoop.tmp.dir

    /data/hadoop/hdfs/tmp

    ha.zookeeper.quorum

    slave1:2181,slave2:2181,slave3:2181

  1. 配置hdfs-site.xml(配置Hadoop集群的HDFS别名、通讯地址、端口等信息)

    dfs.nameservices

    cluster

    dfs.ha.namenodes.cluster

    master,master1

    dfs.namenode.rpc-address.cluster.master

    master:9000

dfs.namenode.rpc-address.cluster.master1

master1:9000

    dfs.namenode.http-address.cluster.master

    master:50070

    dfs.namenode.http-address.cluster.master1

    master1:50070

    dfs.namenode.shared.edits.dir

    qjournal://slave1:8485;slave2:8485;slave3:8485/cluster

    dfs.client.failover.proxy.provider.cluster  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

    dfs.journalnode.edits.dir

    /data/hadoop/tmp/journal

    dfs.ha.automatic-failover.enabled

    true

dfs.namenode.name.dir

/data/hadoop/dfs/name

dfs.datanode.name.dir

/data/hadoop/dfs/data

dfs.replication

3

dfs.webhdfs.enabled

true

dfs.journalnode.http-address

0.0.0.0:8480

dfs.journalnode.rpc-address

0.0.0.0:8485

ha.zookeeper.quorum

slave1:2181,slave2:2181,slave3:2181

    dfs.ha.fencing.methods

sshfence

  

    dfs.ha.fencing.ssh.private-key-files

    /home/work/.ssh/id_rsa

    dfs.permissions.enabled

    false

  1. 配置map-site.xml(配置计算框架资源管理框架名称、历史任务访问地址等信息)

    mapreduce.framework.name

    yarn

mapreduce.jobhistory.address

master:10020

mapreduce.jobhistory.webapp.address

master:19888

  1. 配置yarn-site.xml(配置资源管理器相关内容)

    yarn.resourcemanager.connect.retry-interval.ms

    2000

    yarn.resourcemanager.ha.enabled

    true

yarn.resourcemanager.ha.rm-ids

rm1,rm2

ha.zookeeper.quorum

slave1:2181,slave2:2181,slave3:2181

    yarn.resourcemanager.zk-address

    slave1:2181,slave2:2181,slave3:2181

yarn.resourcemanager.ha.automatic-failover.enabled

true

yarn.resourcemanager.hostname.rm1

master

yarn.resourcemanager.hostname.rm2

master1

    yarn.resourcemanager.ha.id

    rm1

yarn.resourcemanager.recovery.enabled

true

yarn.resourcemanager.zk-state-store.address

slave1:2181,slave2:2181,slave3:2181

yarn.resourcemanager.store.class

org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

yarn.resourcemanager.cluster-id

cluster-yarn

yarn.resourcemanager.address.rm1

master:8132

yarn.resourcemanager.scheduler.address.rm1

master:8130

yarn.resourcemanager.webapp.address.rm1

master:8188

yarn.resourcemanager.resource-tracker.address.rm1

master:8131

yarn.resourcemanager.admin.address.rm1

master:8133

yarn.resourcemanager.ha.admin.address.rm1

master:23142

yarn.resourcemanager.address.rm2

master1:8132

yarn.resourcemanager.scheduler.address.rm2

master1:8130

yarn.resourcemanager.webapp.address.rm2

master1:8188

yarn.resourcemanager.resource-tracker.address.rm2

master1:8131

yarn.resourcemanager.admin.address.rm2

master1:8133

yarn.resourcemanager.ha.admin.address.rm2

master1:23142

    yarn.nodemanager.aux-services

    mapreduce_shuffle

yarn.nodemanager.aux-services.mapreduce.shuffle.class

org.apache.hadoop.mapred.ShuffleHandler

yarn.nodemanager.local-dirs

/data/hadoop/yarn/local

yarn.nodemanager.log-dirs

/data/hadoop/log/yarn

mapreduce.shuffle.port

23080

mapreduce.jobtracker.address

http://master:9001

yarn.log-aggregation-enable

true

yarn.log-aggregation.retain-seconds

259200

yarn.nodemanager.remote-app-log-dir

/logs

yarn.web-proxy.address

master:8090

yarn.nodemanager.resource.memory-mb

2048

yarn.nodemanager.resource.cpu-vcores

1

yarn.app.mapreduce.am.resource.mb

256

yarn.nodemanager.vmem-check-enabled

false

  1. 配置hadoop-env.sh(Hadoop集群启动脚本添加JAVA_HOME路径)

export JAVA_HOME=/application/jdk

  1. 配置yarn-env.sh(资源管理器启动脚本添加JAVA_HOME路径)

export JAVA_HOME=/application/jdk

  1. 配置slaves文件(存放DataNode节点的文件)

slave1

slave2

slave3

添加以上DataNode节点别名,一个节点别名占用一行,多个节点需换行追加

注意:

    yarn.resourcemanager.ha.id

    rm1

此配置只需在master和master1两台服务器配置即可,NodeManager服务器上无需配置。master1节点上配置为rm2

Hadoop效果验证

  1. 启动命令

分别启动zookeeper服务 zkServer.sh start

  1. NameNode节点启动

slave节点启动journalnode服务

cd /application/hadoop/sbin && ./hadoop-daemon.sh start journalnode

  1. 格式化集群

hdfs namenode -format

  1. 向zookeeper注册ZNode

hfds zkfc -formatZK

  1. 关闭journalnode,重新启动服务

start-dfs.sh

start-yarn.sh

  1. 在master1节点同步master节点数据

hdfs namenode -bootstrapStandby

7.如果master1节点namenode和resourcemanager服务未启动,需要手动启动一下

./hadoop-daemon.sh start namenode

./yarn-daemon.sh start resourcemanager

打开浏览器输入http://master:50070/ 查看节点运行情况

打开浏览器输入http://master:8188/ 查看YARN的运行情况

你可能感兴趣的:(hadoop)