热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

centos7搭建hadoop2.10高可用(HA)

这篇文章主要介绍了centos7搭建hadoop2.10高可用(HA),本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

本篇介绍在centos7中搭建hadoop2.10高可用集群,首先准备6台机器:2台nn(namenode);4台dn(datanode);3台jns(journalnodes)

IP hostname 进程
192.168.30.141 s141 nn1(namenode),zkfc(DFSZKFailoverController),zk(QuorumPeerMain)
192.168.30.142 s142 dn(datanode), jn(journalnode),zk(QuorumPeerMain)
192.168.30.143 s143 dn(datanode), jn(journalnode),zk(QuorumPeerMain)
192.168.30.144 s144 dn(datanode), jn(journalnode)
192.168.30.145 s145 dn(datanode)
192.168.30.146 s146 nn2(namenode),zkfc(DFSZKFailoverController)

各个机器 jps进程:

由于本人使用的是vmware虚拟机,所以在配置好一台机器后,使用克隆,克隆出剩余机器,并修改hostname和IP,这样每台机器配置就都统一了每台机器配置添加hdfs用户及用户组,配置jdk环境,安装hadoop,本次搭建高可用集群在hdfs用户下,可以参照:centos7搭建hadoop2.10伪分布模式

下面是安装高可用集群的一些步骤和细节:

1.设置每台机器的hostname 和 hosts

修改hosts文件,hosts设置有后可以使用hostname访问机器,这样比较方便,修改如下:

127.0.0.1 locahost
192.168.30.141 s141
192.168.30.142 s142
192.168.30.143 s143
192.168.30.144 s144
192.168.30.145 s145
192.168.30.146 s146

2.设置ssh无密登录,由于s141和s146都为namenode,所以要将这两台机器无密登录到所有机器,最好hdfs用户和root用户都设置无密登录

我们将s141设置为nn1,s146设置为nn2,就需要s141、s146能够通过ssh无密登录到其他机器,这样就需要在s141和s146机器hdfs用户下生成密钥对,并将s141和s146公钥发送到其他机器放到~/.ssh/authorized_keys文件中,更确切的说要将公钥添加的所有机器上(包括自己)

在s141和s146机器上生成密钥对:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

将id_rsa.pub文件内容追加到s141-s146机器的/home/hdfs/.ssh/authorized_keys中,现在其他机器暂时没有authorized_keys文件,我们就将id_rsa.pub更名为authorized_keys即可,如果其他机器已存在authorized_keys文件可以将id_rsa.pub内容追加到该文件后,远程复制可以使用scp命令:

s141机器公钥复制到其他机器

scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_141.pub
scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_141.pub
scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_141.pub
scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_141.pub
scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_141.pub
scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_141.pub

s146机器公钥复制到其他机器

scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_146.pub
scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_146.pub
scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_146.pub
scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_146.pub
scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_146.pub
scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_146.pub

在每台机器上可以使用cat将秘钥追加到authorized_keys文件

cat id_rsa_141.pub >> authorized_keys
cat id_rsa_146.pub >> authorized_keys

此时authorized_keys文件权限需要改为644(注意,经常会因为这个权限问题导致ssh无密登录失败)

chmod 644 authorized_keys

3.配置hadoop配置文件(${hadoop_home}/etc/hadoop/)

配置细节:

注意:s141和s146具有完全一致的配置,尤其是ssh.

1) 配置nameservice

[hdfs-site.xml]

 dfs.nameservices
 mycluster


2) dfs.ha.namenodes.[nameservice ID]

[hdfs-site.xml]


  dfs.ha.namenodes.mycluster
  nn1,nn2

3) dfs.namenode.rpc-address.[nameservice ID].[name node ID]

[hdfs-site.xml]
配置每个nn的rpc地址。

 dfs.namenode.rpc-address.mycluster.nn1
 s141:8020


 dfs.namenode.rpc-address.mycluster.nn2
 s146:8020

4) dfs.namenode.http-address.[nameservice ID].[name node ID]
配置webui端口

[hdfs-site.xml]

 dfs.namenode.http-address.mycluster.nn1
 s141:50070


 dfs.namenode.http-address.mycluster.nn2
 s146:50070

5) dfs.namenode.shared.edits.dir
名称节点共享编辑目录.选择三台journalnode节点,这里选择s142、s143、s144三台机器

[hdfs-site.xml]

 dfs.namenode.shared.edits.dir
 qjournal://s142:8485;s143:8485;s144:8485/mycluster

6) dfs.client.failover.proxy.provider.[nameservice ID]
配置一个HA失败转移的java类(改配置是固定的),client使用它判断哪个节点是激活态。

[hdfs-site.xml]

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

7) dfs.ha.fencing.methods
脚本列表或者java类,在容灾保护激活态的nn.

[hdfs-site.xml]

 dfs.ha.fencing.methods
 sshfence



 dfs.ha.fencing.ssh.private-key-files
 /home/hdfs/.ssh/id_rsa

8) fs.defaultFS
配置hdfs文件系统名称服务。这里的mycluster为上面配置的dfs.nameservices  

[core-site.xml]

 fs.defaultFS
 hdfs://mycluster

9) dfs.journalnode.edits.dir
配置JN存放edit的本地路径。

[hdfs-site.xml]

 dfs.journalnode.edits.dir
 /home/hdfs/hadoop/journal

完整配置文件:

core-site.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
<&#63;xml-stylesheet type="text/xsl" href="configuration.xsl"&#63;>


 
 fs.defaultFS
 hdfs://mycluster/
 
 
 hadoop.tmp.dir
 /home/hdfs/hadoop
 

hdfs-site.xml

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
<&#63;xml-stylesheet type="text/xsl" href="configuration.xsl"&#63;>


 
   dfs.replication
   3
 
 
   dfs.hosts
   /opt/soft/hadoop/etc/dfs.include.txt
 
 
   dfs.hosts.exclude
   /opt/soft/hadoop/etc/dfs.hosts.exclude.txt
 
 
  dfs.nameservices
  mycluster
 
 
  dfs.ha.namenodes.mycluster
  nn1,nn2
 
 
  dfs.namenode.rpc-address.mycluster.nn1
  s141:8020
 
 
  dfs.namenode.rpc-address.mycluster.nn2
  s146:8020
 
 
  dfs.namenode.http-address.mycluster.nn1
  s141:50070
 
 
  dfs.namenode.http-address.mycluster.nn2
  s146:50070
 
 
  dfs.namenode.shared.edits.dir
  qjournal://s142:8485;s143:8485;s144:8485/mycluster
 
 
  dfs.client.failover.proxy.provider.mycluster
  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
 
 
  dfs.ha.fencing.methods
  sshfence
 

 
  dfs.ha.fencing.ssh.private-key-files
  /home/hdfs/.ssh/id_rsa
 
 
  dfs.journalnode.edits.dir
  /home/hdfs/hadoop/journal
 

mapred-site.xml

<&#63;xml version="1.0"&#63;>
<&#63;xml-stylesheet type="text/xsl" href="configuration.xsl"&#63;>


 
 mapreduce.framework.name
 yarn
 

yarn-site.xml

<&#63;xml version="1.0"&#63;>




 
   yarn.resourcemanager.hostname
   s141
 
 
    yarn.nodemanager.aux-services
   mapreduce_shuffle
 

4. 部署细节

1)在jn节点分别启动jn进程(s142,s143,s144)

hadoop-daemon.sh start journalnode

2)启动jn之后,在两个NN之间进行disk元数据同步

  a)如果是全新集群,先format文件系统,只需要在一个nn上执行。
  [s141|s146]

hadoop namenode -format

  b)如果将非HA集群转换成HA集群,复制原NN的metadata到另一个NN上.

    1.步骤一
    在s141机器上,将hadoop数据复制到s146对应的目录下

scp -r /home/hdfs/hadoop/dfs hdfs@s146:/home/hdfs/hadoop/

    2.步骤二
    在新的nn(未格式化的nn,我这里是s146)上运行以下命令,实现待命状态引导。注意:需要s141namenode为启动状态(可以执行:hadoop-daemon.sh start namenode )。

hdfs namenode -bootstrapStandby

    如果没有启动s141名称节点,就会失败,如图:

    启动s141名称节点后,在s141上执行命令

hadoop-daemon.sh start namenode

    然后在执行待命引导命令,注意:提示是否格式化,选择N,如图:

    3. 步骤三

    在其中一个NN上执行以下命令,完成edit日志到jn节点的传输。

hdfs namenode -initializeSharedEdits

    如果执行过程中报:java.nio.channels.OverlappingFileLockException 错误:

      说明namenode在启动中,需要停掉namenode节点(hadoop-daemon.sh stop namenode)

      执行完后查看s142,s143,s144是否有edit数据,这里查看生产了mycluster目录,里面有编辑日志数据,如下:

      4.步骤四

      启动所有节点.

      在s141上启动名称节点和所有数据节点:

hadoop-daemon.sh start namenode
hadoop-daemons.sh start datanode

      在s146上启动名称节点

hadoop-daemon.sh start namenode

此时在浏览器中访问http://192.168.30.141:50070/和http://192.168.30.146:50070/你会发现两个namenode都为standby

  

这时需要手动使用命令将其中一个切换为激活态,这里将s141(nn1)设置为active

hdfs haadmin -transitionToActive nn1

此时s141就为active

hdfs haadmin常用命令:

至此手动容灾高可用配置完成,但是这种方式不智能,不能够自动感知容灾,所以下面介绍自动容灾配置

5.自动容灾配置

需要引入zookeeperquarum 和 zk 容灾控制器(ZKFC)两个组件

  搭建zookeeper集群,选择s141,s142,s143三台机器,下载 zookeeper:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6

  1) 解压zookeeper:

tar -xzvf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/soft/zookeeper-3.5.6

  2) 配置环境变量,在/etc/profile中添加zk环境变量,并重新编译/etc/profile文件

代码如下:
source /etc/profile

  3) 配置zk配置文件,三台机器配置文件统一

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/hdfs/zookeeper
# the port at which the clients will connect
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.1=s141:2888:3888
server.2=s142:2888:3888
server.3=s143:2888:3888

  4)分别

    在s141的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件,值为1(对应zoo.cfg配置文件中的server.1)

    在s142的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件,值为2(对应zoo.cfg配置文件中的server.2)

    在s143的/home/hdfs/zookeeper(在zoo.cfg配置文件中配置的dataDir路径)目录下创建myid文件,值为3(对应zoo.cfg配置文件中的server.3)

  5) 分别在每台机器上启动zk

zkServer.sh start

  启动成功会出现zk进程:

配置hdfs相关配置:

  1)停止hdfs所有进程

stop-all.sh

  2)配置hdfs-site.xml,启用自动容灾.

[hdfs-site.xml]

 dfs.ha.automatic-failover.enabled
 true

  3) 配置core-site.xml,指定zk的连接地址.


 ha.zookeeper.quorum
 s141:2181,s142:2181,s143:2181

  4) 分发以上两个文件到所有节点。

  5) 在其中的一台NN(s141),在ZK中初始化HA状态

hdfs zkfc -formatZK

  出现如下结果说明成功:

  也可去zk中查看:

  6) 启动hdfs集群

start-dfs.sh

查看各个机器进程:

启动成功,再看一下webui

  s146为激活态

  s141为待命态

至此hadoop 自动容灾HA搭建完成

总结

以上所述是小编给大家介绍的centos7搭建hadoop2.10高可用(HA),希望对大家有所帮助!


推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • Kafka入门指南
    本文将详细介绍如何在CentOS 7上安装和配置Kafka,包括必要的环境准备、JDK和Zookeeper的配置步骤。 ... [详细]
  • Centos7 Tomcat9 安装笔记
    centos7,tom ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • Apache Hadoop HDFS QJournalProtocol 中 getJournalCTime 方法的应用与代码实例分析 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
author-avatar
小女人要有小性感
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有