hadoop2.10.0完全分布式集群搭建+ HA(QJM)高可用集群搭建

准备工作

  • JDK1.8
  • hadoop 2.10.0
  • centos 7
  • VMware

准备3台虚拟机,部署规划如下

ip NameNode SecondaryNameNode ResourceManager DataNode NodeManager historyserver
192.168.0.1 yes no no yes yes no
192.168.0.2 no yes no yes yes yes
192.168.0.3 no no yes yes yes no

有条件的情况下 NameNodeSecondaryNameNodeResourceManager 他们都应该各自独占一台节点,DataNodeNodeManager必须成对出现

安装JDK,并配置好环境变量
安装haoop,并配置好环境变量


开始部署

解压hadoop,进入所在目录

配置JAVA_HOME,由于不同节点上jdk安装路径可能不同,不建议使用默认配置

修改以下:
etc/hadoop/hadoop-env.sh  25行
etc/hadoop/mapred-env.sh  16行
etc/hadoop/yarn-env.sh  23行
为:
export JAVA_HOME=/opt/module/jdk1.8.0_231/

etc/hadoop/core-site.xml

<configuration>
	
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://192.168.0.1:9000value>
    property>

	
    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/module/hadoop-2.10.0/datavalue>
    property>
configuration>

etc/hadoop/hdfs-site.xml

<configuration>
	
    <property>
        <name>dfs.replicationname>
        <value>1value>
    property>

	
    <property>
        <name>dfs.namenode.secondary.http-addressname>
        <value>192.168.0.2:50090value>
    property>
configuration>

etc/hadoop/mapred-site.xml.template 删除.template

<configuration>
	
    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
configuration>

etc/hadoop/yarn-site.xml

<configuration>
    <property>
    	
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>

	
    <property>
        <name>yarn.resourcemanager.hostnamename>
        <value>192.168.0.3value>
    property>

	
    <property>  
        <name>yarn.log-aggregation-enablename>  
        <value>truevalue>  
    property>
configuration>

etc/hadoop/slaves

// 指定DataNode节点
192.168.0.1
192.168.0.2
192.168.0.3

配置历史服务器
etc/hadoop/mapred-site.xml

<configuration>
    
    <property>
        <name>mapreduce.jobhistory.addressname>
        <value>192.168.0.2:10020value>
    property>

	
    <property>
        <name>mapreduce.jobhistory.webapp.addressname>
        <value>192.168.0.2:19888value>
    property>
configuration>

以上配置文件同步到所有服务节点,保持整个集群的配置文件一致

启动集群,先启动HDFS集群,在启动YARN集群,注意 需要在NameNode所在节点上启动HDFS集群,在ResourceManager所在节点上启动YARN集群


启动集群

# 初次启动,需要先格式化namenode,会在刚才配置中指定的目录下生成文件,在192.168.0.1的机器上执行
bin/hdfs namenode -format

# 启动HDFS集群,在192.168.0.1的机器上执行
sbin/start-dfs.sh

# 启动YARN集群,在192.168.0.3的机器上执行
sbin/start-yarn.sh

# 启动历史服务器,在192.168.0.2的机器上执行
sbin/mr-jobhistory-daemon.sh start historyserver

停止集群

sbin/stop-yarn.sh

sbin/stop-dfs.sh

sbin/mr-jobhistory-daemon.sh stop historyserver

验证结果

访问 192.168.0.1:50070,出现页面,说明HDFS启动成功
访问 192.168.0.3:8088,出现页面,说明YARN启动成功
访问 192.168.0.2:19888,出现页面,说明历史服务器启动成功


HDFS 高可用

上面部署的完全分布式集群有一个缺点,当NameNode挂掉后,整个集群也挂掉了,没有高可用的特性,在生产环境中,我们需要高可用的集群,当NameNode挂掉后,备用的NameNode能接管他的工作继续服务。

官方文档如下:https://hadoop.apache.org/docs/r2.10.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

下面的文章只是把关键点整理做了一个总结,方便快速配置

JournalNode

JournalNode守护程序相对较轻,因此可以合理地将这些守护程序与其他Hadoop守护程序(例如NameNode,JobTracker或YARN ResourceManager)并置在计算机上,
注意:必须至少有3个JournalNode守护程序,您可能还会运行3个以上的JournalNode,但是为了实际增加系统可以容忍的故障数量,您应该运行奇数个JN(即3、5、7等)。
请注意,在HA群集中,备用NameNode也执行名称空间状态的检查点,因此不必在HA群集中运行Secondary NameNode

  • hdfs-site.xml
<configuration>
	
    <property>
        <name>dfs.replicationname>
        <value>1value>
    property>

	
    

	
	<property>
  		<name>dfs.nameservicesname>
  		<value>myclustervalue>
	property>

	
	<property>
  		<name>dfs.ha.namenodes.myclustername>
  		<value>nn1,nn2value>
	property>

	
	<property>
  		<name>dfs.namenode.rpc-address.mycluster.nn1name>
  		<value>192.168.0.1:8020value>
	property>
	<property>
  		<name>dfs.namenode.rpc-address.mycluster.nn2name>
 		<value>192.168.0.2:8020value>
	property>
	
	<property>
  		<name>dfs.namenode.http-address.mycluster.nn1name>
  		<value>192.168.0.1:50070value>
	property>
	<property>
  		<name>dfs.namenode.http-address.mycluster.nn2name>
  		<value>192.168.0.2:50070value>
	property>
	
	<property>
  		<name>dfs.namenode.shared.edits.dirname>  				
  		<value>qjournal://192.168.0.1:8485;192.168.0.2:8485;192.168.0.3:8485/myclustervalue>
	property>
	
	<property>
  		<name>dfs.client.failover.proxy.provider.myclustername>
  		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
	property>
	
	<property>
      	<name>dfs.ha.fencing.methodsname>
      	<value>sshfencevalue>
    property>
    
    <property>
      <name>dfs.ha.fencing.ssh.private-key-filesname>
      <value>/home/${user}/.ssh/id_rsavalue>
    property>
    
	<property>
  		<name>dfs.journalnode.edits.dirname>
  		<value>/opt/module/hadoop-2.10.0/jndatavalue>
	property>
configuration>
  • core-site.xml
<configuration>
	
    
    
    <property>
  		<name>fs.defaultFSname>
  		<value>hdfs://myclustervalue>
	property>


	
    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/module/hadoop-2.10.0/datavalue>
    property>
configuration>

以上配置文件同步到所有节点
如果你有启用过集群,先停止所有集群,删除所有节点上面配置的hadoop.tmp.dir目录。否则会导致启动失败

启动

初次启动

# 初次启动
# 启动各个节点下的journalnode服务
hadoop-daemon.sh start journalnode
# 任意选择一个namenode节点,执行格式化
hdfs namenode -format
# 启动namonode,启动后状态为standby
hadoop-daemon.sh start namenode
# 另一台namenode节点,同步namenode的数据
hdfs namenode -bootstrapStandby
# 启动namonode,启动后状态为standby
hadoop-daemon.sh start namenode
# 切换指定id的NameNode的状态为active
hdfs haadmin -transitionToActive nn1

非初次启动

# 已经初始化后,再次启动可以直接执行此命令启动
start-dfs.sh

登录网页查看启动是否成功

手动转移故障

  • 模拟NameNode节点故障
# 强制结束Active状态的NameNode进程
kill -9 <pid>
  • 备用节点转换为主节点
hdfs haadmin -failover nn1 nn2

执行上诉命令会发现报错了,猜一下是什么原因导致的?
在执行转换时,nn2需要告诉nn1,我准备顶上了,你休息吧,但是这里nn1已经挂掉了,无法回复nn2信息,导致切换失败,需要先把故障的NameNode重新启动后才能执行转换

# 重启nn1
hadoop-daemon.sh start namenode
# 执行转换
hdfs haadmin -failover nn1 nn2

这里大家也发现一个问题吧,需要把挂掉的NamoNode重新启动后才能执行装换,完全没有达到高可用的要求,下面我们配置自动故障转移

自动故障转移

自动故障转移,需要引入2个新的组件ZooKeeper和ZKFailoverController

部署zookeeper,请查看我的另一篇博客https://blog.csdn.net/u012421093/article/details/105313699

开始配置前应先停掉启动的集群

新增如下配置

  • hdfs-site.xml
<configuration>
	
 	<property>
   		<name>dfs.ha.automatic-failover.enabledname>
   		<value>truevalue>
 	property>
configuration>
  • core-site.xml
configuration>
	
 	<property>
   		<name>ha.zookeeper.quorumname>
   		<value>192.168.75.136:2181,192.168.75.137:2181,192.168.78.138:2181value>
 	property>
 configuration>

在其中一台NameNode节点输入以下命令

# 初始化zookeeper,成功后会在zookeeper上创建一个znode节点,名称为hadoop-ha
hdfs zkfc -formatZK
# 启动集群
start-dfs.sh

模拟故障,kill掉正在运行的节点,5秒后备用节点的状态变为active,成功

如果出现连接类错误,如Caused by: java.net.ConnectException: Connection refused
则执行下列命令, yum install psmisc


最后附上正常运行的进程截图,如果执行自动故障转移失败,请对比下图中的进程信息,看看是否是某个进程没有启动成功
hadoop2.10.0完全分布式集群搭建+ HA(QJM)高可用集群搭建_第1张图片

YARN 高可用

  • yarn-site.xml
<configuration>
	
	 
	
	<property>
  		<name>yarn.resourcemanager.ha.enabledname>
  		<value>truevalue>
	property>
	
	<property>
  		<name>yarn.resourcemanager.cluster-idname>
  		<value>cluster1value>
	property>
	
	<property>
  		<name>yarn.resourcemanager.ha.rm-idsname>
  		<value>rm1,rm2value>
	property>
	
	<property>
  		<name>yarn.resourcemanager.hostname.rm1name>
  		<value>hadoop02value>
	property>
	<property>
  		<name>yarn.resourcemanager.hostname.rm2name>
  		<value>hadoop03value>
	property>
	
	<property>
  		<name>yarn.resourcemanager.webapp.address.rm1name>
  		<value>hadoop02:8088value>
	property>
	<property>
  		<name>yarn.resourcemanager.webapp.address.rm2name>
  		<value>hadoop03:8088value>
	property>
	
	<property>
  		<name>yarn.resourcemanager.zk-addressname>
  		<value>hadoop02:2181,hadoop03:2181,hadoop04:2181value>
	property>
configuration>
  • 启动ResourceManager
在指定的ResourceManager下,启动ResourceManager

登录web也面,查看about页面中的状态信息,然后模拟其中一台故障,查看另一台是否转改变更为active


最后附上正常运行的进程截图,如果执行自动故障转移失败,请对比下图中的进程信息,看看是否是某个进程没有启动成功
hadoop2.10.0完全分布式集群搭建+ HA(QJM)高可用集群搭建_第2张图片

你可能感兴趣的:(大数据)