ha高可用搭建步骤

本文档详细介绍了如何搭建Hadoop HA集群,包括集群规划、配置步骤、集群启动和测试。集群包含2个NameNode、4个DataNode、3个JournalNode和2个ResourceManager。配置涉及core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml等文件,以及Zookeeper集群的设置。最后,通过测试确保了NameNode和ResourceManager的高可用性。

ps:mx为用户名

ha的搭建:
    集群的规划:
    hdfs:
    namenode(2个) datanode(4个)  journalnode(3台)  zkfc(2个)
    mapreduce
    yarn:
    resourcemanager(2个) nodemanager(4个)
    zookeeper:
    3台    QuorumPeerMain

           hadoop05                    hadoop06                hadoop07                 hadoop08
hdfs    namenode                   namenode    
           datanode                     datanode                 datanode                  datanode
           journalnode                 journalnode              journalnode    
           zkfc                             zkfc
yarn                                                                        resourcemanager     resourcemanager
          nodemanager              nodemanager           nodemanager          nodemanager
zk:  QuorumPeerMain        QuorumPeerMain     QuorumPeerMain

集群搭建步骤:
    集群准备:
    1)ip    主机名
    2)hosts
    3)关闭防火墙 selinux
    4)修改系统的启动级别  3
    5)添加普通用户的selders权限
    6)进行免密码登录
    7)安装jdk
    8)进行时间同步
搭建集群:
1.上传 hadoop-2.7.6.tar.gz
--------------------------------------------------------
2.解压
    tar -xvzf hadoop-2.7.6.tar.gz -C /home/mx/apps/
--------------------------------------------------------
3.配置环境变量----之前创建过软链,不需要重新配置
vi /etc/profile

export HADOOP_HOME=/home/mx/apps/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source /etc/profile
验证:
    hadoop version
-----------------------------------------------------

4.修改hadoop的配置文件
    cd /home/mx/apps/hadoop/etc/hadoop
    在此目录下修改配置文件
    vi ......
-----------------------------------------------------
    1)hadoop-env.sh  导入jdk的环境变量
-----------------------------------------------------
# The java implementation to use.
export JAVA_HOME=/home/mx/apps/jdk
-----------------------------------------------------
    2)core-site.xml
-----------------------------------------------------
<!-- 指定 hdfs 的 nameservice 为 bd1805  将两个namanode划分为一组 这里nameservice类似于组名 当前的bd1805代表的就是组名 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://bd1805/</value>
</property>
<!-- 指定 hadoop 工作目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/mx/data/hadoopdata/</value>
</property>
<!-- 指定 zookeeper 集群访问地址 hadoop05\06\07为zookeeper配置的节点:2181默认端口-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
----------------------------------
    3)hdfs-site.xml
----------------------------------
<!-- 指定副本数 4个节点副本数设为3 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<!--指定 hdfs 的 nameservice 为 bd1805,需要和 core-site.xml 中保持一致-->
<property>
    <name>dfs.nameservices</name>
    <value>bd1805</value>
</property>
<!-- bd1805 下面有两个 NameNode,分别是 nn1,nn2(主机代名 随便起 配置时与主机一一对应即可 例如nn1对应hadoop05 则nn1通信地址对应hadoop05:9000) -->
<property>
    <name>dfs.ha.namenodes.bd1805</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址  内部通信 -->
<property>
    <name>dfs.namenode.rpc-address.bd1805.nn1</name>
    <value>hadoop05:9000</value>
</property>
<!-- nn1 的 http 通信地址 外部通信 -->
<property>
    <name>dfs.namenode.http-address.bd1805.nn1</name>
    <value>hadoop05:50070</value>
</property>
<!-- nn2 的 RPC 通信地址 内部通信 -->
<property>
    <name>dfs.namenode.rpc-address.bd1805.nn2</name>
    <value>hadoop06:9000</value>
</property>
<!-- nn2 的 http 通信地址  外部通信-->
<property>
    <name>dfs.namenode.http-address.bd1805.nn2</name>
    <value>hadoop06:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置  journalnode默认的通信的端口8485  qjournal(通信协议)://hadoop05(主机名):8485(端口);hadoop06:8485;hadoop07:8485/bd1805 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop05:8485;hadoop06:8485;hadoop07:8485/bd1805</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/mx/data/hadoopdata/journaldata</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<!-- 注意:此处配置在安装的时候切记检查不要换行!!!
    否则使用hadoop fs 命令会报错 Couldn't create proxy provider null -->
<property>
    <name>dfs.client.failover.proxy.provider.bd1805</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 失败自动切换的时候 杀死active的方式-->
<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>/home/mx/.ssh/id_rsa</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>
-------------------------------------
    4)mapred-site.xml
-------------------------------------
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- 设置 mapreduce 的历史服务器地址和端口号 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop06:10020</value>
</property>
<!-- mapreduce 历史服务器的 web 访问地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop06:19888</value>
</property>
---------------------------
    5)yarn-site.xml
---------------------------
<!-- 开启 RM 高可用 -->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarnha</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>hadoop07</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop08</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
<!-- 要运行 MapReduce 程序必须配置的附属服务 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!-- 开启 YARN 集群的日志聚合功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- YARN 集群的聚合日志最长保留时长 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
    <name>yarn.resourcemanager.recovery.enabled</name>
</property>
<!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上-->
<property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
-----------------------
    6)配置从节点
-----------------------
vi slaves

hadoop05
hadoop06
hadoop07
hadoop08

5.远程发送hadoop的安装包和环境变量
cd /home/mx/apps

    scp -r hadoop-2.7.6 hadoop06:/home/hadoop/apps/
    scp -r hadoop-2.7.6 hadoop07:/home/hadoop/apps/
    scp -r hadoop-2.7.6 hadoop08:/home/hadoop/apps/

之前配置过环境变量,添加了软连接 不需要再次配置
    但需要重新加载环境变量
    source /etc/profile

    查看hadoop版本信息
    hadoop version

================================================================
6.格式化并启动集群(严格按照顺序执行!!!)
----------------------------------------------------------------
    1)启动zookeeper
    hadoop05/hadoop06/hadoop7三个节点启动zookeeper
        zkServer.sh start

        zkServer.sh status查看是否启动成功
----------------------------------------------------------------
    2)启动journalnode  存放共享文件的

    各个节点~目录上启动:(没要求)
    hadoop06:    hadoop-daemon.sh start journalnode
    hadoop07:    hadoop-daemon.sh start journalnode
    hadoop08:    hadoop-daemon.sh start journalnode
----------------------------------------------------------------
    3)格式化namenode
        在一个namenode节点上进行格式化(hadoop05或者hadoop06)

    hadoop05:hadoop namenode -format
        将这个节点的格式化的数据发送到另外一个namenode节点中

    scp -r /home/mx/data/hadoopdata/dfs hadoop06:/home/mx/data/hadoopdata/
----------------------------------------------------------------
    4)格式化zkfc  在一个namenode节点上就可以
        hdfs zkfc -formatZK
        在zookeeper集群中创建namenode的相关状态信息存储目录
----------------------------------------------------------------
    5)启动hadoop集群
        先启动hdfs
        start-dfs.sh   在任意节点执行

        启动yarn:  最好在yarn的主节点执行  任意一个resourcemanager的节点hadoop07/hadoop08
        start-yarn.sh

    注意:
    这里只能启动当前节点的resourcemanager 另外一个节点的resourcemanager需要手动启动
        yarn-daemon.sh start resourcemanager
------------------------------------------------------------------

查看各主节点的状态
HDFS:
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

YARN:
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2


------------------------------------------------------------------
测试:
    hdfs的测试:
        namenode的节点:
            hadoop05:50070
            hadoop06:50070

    主备切换:
        kill activenamenode
    yarn的测试:
        resourcemanager节点:
            hadoop07:8088
            hadoop08:8088


--------------------------------------------------------
1、干掉 active namenode,standby变为active 重新启动---standby

2、在上传文件的时候干掉 active namenode, 文件上传不受影响

3、干掉 active resourcemanager, standby变为active 重新启动---standby

4、在执行任务的时候干掉 active resourcemanager,任务不受影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值