搭建Hadoop HA环境

Hadoop HA基础知识

HDFS存在的问题
  1. NN单点故障,难以应用于在线场景 HA
  2. NN压力过大,且内存受限,影响扩展 F(联邦机制)
原理图

在这里插入图片描述

搭建Hadoop HA环境

在这里插入图片描述

实现步骤

官网配置页面

  1. 实现逻辑名称到物理服务器的映射 hdfs-site.xml (HA有两个namenode,一个是active,一个是standby,需要指定具体的物理节点,rpc和http地址做配置端口)
  2. core-site.xml 指定hdfs访问的入口
    在1.x中配置namenode是hdfs://node01:9000 进程通信的端口是9000
    在2.x中配置namenode是hdfs://mycluster 进程通信的端口是8020
  3. 配置journalnode集群(同步元数据) ,
  4. 配置故障转移实现的代理类和实现方式
    有两种方式:
    ①通过免密钥的方式
    ②通过编写脚本的方式
  5. 开启自动化,启动ZKFC进程
  6. 配置zookeeper集群,指定namenode入口
  7. 配置细节
    ①先启动journalnode
    ②格式化,它依赖于namenode,格式化之后需要启动namenode
    ③另外一台namenode需要做同步 hdfs namenode -bootstrapStandby
  8. Configuring automatic failover设置自动化,配置zookeeper集群

在这里插入图片描述

具体配置
  1. 开启四台虚拟机,并用secureCRT进行连接。通过交互窗口同步时间,查看每个服务器当前执行的进程:jps
  2. 停掉完全分布式方式:stop-dfs.sh再用jps查看
  3. 实现NN节点与其他节点间免密钥:
    1)在node02中,cd .ssh/
    2)先创建一个公钥:ssh-keygen -t rsa,然后一直回车,产生两个文件id_rsa(私 钥),id_rsa.pub(公钥)
    3)先实现对自身node02的免密钥,将公钥文件追加到authorized_keys中:cat id_rsa.pub >> authorized_keys
    4)进行测试:ssh localhost,测试成功则退出exit
    5)将node02公钥发送给node01:
    scp id_rsa.pub node01:/root/.ssh/node02.pub并查看node02是否有此文件
    若有,则将该文件在node01下:cat node02.pub >> authorized_keys
    6)查看authorized_keys是否添加上,再查看node02能否免密钥登录到node01, 一定记得测试成功后退出
  4. 保存副本,以便于恢复
    cd /home/opt/hpe/hadoop-2.7.5/etc/
    ls
    cp -r hadoop hadoop-full
    cd hadoop
    vi hdfs-site.xml
  5. 先对一台服务器进行配置,在hdfs-site.xml中删除secondary所在的4行(4dd),另外添加以下代码
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>node01:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>node02:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>node01:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>node02:50070</value>
</property>

<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/var/hpe/hadoop/ha/jn</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</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>

<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
  1. 配置core-site.xml,将hadoop.tmp.dir的value改成/var/hpe/hadoop/ha,另外利用下方配置修改或覆盖原文件
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>node02:2181,node03:2181,node04:2181</value>
 </property>
  1. 剩余的node02~node04相应的配置文件要同步
    1)在node02中操作如下
    cd
    cd .ssh
    cd $ HADDOP_HOME(部署目录)
    cd etc/(找到了hadoop目录)
    2)在node01中分发刚才修改的两个xxx-site.xml文件给剩下node02~node04
    scp hdfs-site.xml core-site.xml node02:’pwd‘
  2. 搭建Zookeeper集群
    1)在node02家目录下安装上传文件的命令:yum install lrzsz -y,找到zookeeper-3.4.6.tar.gz上传
    2)解压(-C可以指定解压到的目录):tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/hpe/
    3)cd /opt/hpe/
    4)环境变量的配置:vi /etc/profile
    export ZOOKEEPER_HOME=/opt/hpe/zookeeper-3.4.6新增这一行
    在PATH后追加:$ZOOKEEPER_HOME/bin
    5)刷新环境变量:source /etc/profile或者. /etc/profile。然后就可以使用zk的命令了
  3. 相关配置
    1)在node02中找到/opt/hpe/zookeeper-3.4.6/conf目录,将zoo_sample.cfg拷贝一份
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg然后更改一行dataDir=/var/hpe/zk;在最后一行增加4行: server.1=192.168.81.12:2888:3888
    server.2=192.168.81.13:2888:3888
    server.3=192.168.81.14:2888:3888
    2)cd /var/hpe/
    3)mkdir zk
    4)cd zk/
    5)vi myid在里面输入1(这是zookeeper服务器的编号1)
    6)将node02中zookeeper的配置分发给node03~node04
    cd /opt/hpe
    scp -r zookeeper-3.4.6 node03:pwd
    scp -r zookeeper-3.4.6 node04:pwd
    7)在node03上检查一下:cd /opt/hpe
    8)在node03上创建/var/hpe/zk/myid里面写上2;同理node04的相同目录文件下写上3
    9)将node02中的配置文件分发给03及04
    scp /etc/profile node03:/etc/
    scp /etc/profile node04:/etc/
    10)在03及04中查看文件并刷新配置文件
  4. 启动zookeeper
    1)先启动node03:zkServer.sh start;查看是leader还是follwer:zkServer.sh status
    2)再启动node02,再启动node04
  5. 启动JNN
    1)在node01~node03上:hadoop-daemon.sh start journalnode再jps
    2)node01中格式化:hdfs namenode -format并启动NN:hadoop-daemon.sh start namenode
    3)将node01上NN的信息同步到node02中,在node02中:hdfs namenode -bootstrapStandby
  6. 实现ZKFC
    1)Node01中格式化zookeeper:hdfs zkfc -formatZK
    2)启动ZKFC,在node01中:start-dfs.sh
  7. 查看active的NN与standby的NN之间的转化
    1)停掉node01中的NN:hadoop-daemon.sh stop namenode查看
    2)重新启动node01中的NN:hadoop-daemon.sh start namenode查看
  8. 以后停掉或开启dfs相关进程(集群开启之前要先启动node02~node04:zookeeper)
    stop-dfs.sh zkServer.sh stop
    zkServer.sh start start-dfs.sh

    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值