大数据 Hadoop高可用HA

前言

  • 大数据 基础概念
  • 大数据 Centos基础
  • 大数据 Shell基础
  • 大数据 ZooKeeper
  • 大数据 Hadoop介绍、配置与使用
  • 大数据 Hadoop之HDFS
  • 大数据 MapReduce
  • 大数据 Hive
  • 大数据 Yarn
  • 大数据 MapReduce使用
  • 大数据 Hadoop高可用HA

不知道写啥,还是把几篇比较好的文章放上来。

  • Hadoop NameNode 高可用 (High Availability) 实现解析
    • 既有原理又有对比的文章。
    • NameNode 高可用整体架构概述。
    • NameNode主备切换实现。
    • NameNode 共享存储实现。
    • NameNode 高可用运维中的注意事项。
  • Hadoop NameNode 高可用架构
    • 介绍该高可用架构的主备切换机制。
      大数据 Hadoop高可用HA_第1张图片

HA配置

集群规划

主机名 IP地址 安装的软件 运行的进程
Hadoop1 192.168.1.101 JDK、Hadoop NameNode、DFSZKFailoverController(zkfc)
Hadoop2 192.168.1.102 JDK、Hadoop NameNode、DFSZKFailoverController(zkfc)
Hadoop3 192.168.1.103 JDK、Hadoop ResourceManager
Hadoop4 192.168.1.104 JDK、Hadoop ResourceManager
Hadoop5 192.168.1.105 JDK、Hadoop、ZooKeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
Hadoop6 192.168.1.106 JDK、Hadoop、ZooKeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
Hadoop7 192.168.1.107 JDK、Hadoop、ZooKeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

配置过程

配置host

  • vim /etc/hosts增加IP映射:
  • 说明:在每一个结点中都需要配置。
192.168.1.101 hadoop1
192.168.1.102 hadoop2
192.168.1.103 hadoop3
192.168.1.104 hadoop4
192.168.1.105 hadoop5
192.168.1.106 hadoop6
192.168.1.107 hadoop7

免密登录

参见【大数据 zookeeper】——免密登录配置部分。

配置ZooKeeper集群

Hadoop5Hadoop6Hadoop7中安装ZooKeeper。只需要配置一台之后,使用scp分发到不同结点上去就可以了。但是需要修改myid,确保每个结点的myid不一样。

  • 该配置位于Hadoop5
  • 下载:wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
  • 解压:tar -zxvf zookeeper-3.4.10.tar.gz
  • 移动到/opt目录下:
    • sudo mv zookeeper-3.4.10 /opt
    • cd /opt
    • sudo mv zookeeper-3.4.10 zookeeper
  • 修改配置文件:
    • cd conf
    • cp zoo_sample.cfg zoo.cfg
    • vim zoo.cfg
    • 修改dataDir目录:
      • mkdir /opt/zookeeper/zooData
      • 修改dataDir=/tmp/zookeeper/opt/zookeeper/zooData
    • 增加Log输出目录:
      • mkdir /opt/zookeeper/zooLog
      • dataLogDir=/opt/zookeeper/zooLog
    • 增加服务端:
      • 增加一个IP地址别名,后面配置使用。
        • vim /ect/hosts
        • 说明:IP地址 别名
        • 192.168.1.105 hadoop5
        • 192.168.1.106 hadoop6
        • 192.168.1.107 hadoop7
      • 说明:等号后参数分别为:主机名、心跳端口、数据端口
        • server.1=hadoop5:2888:3888
        • server.2=hadoop6:2888:3888
        • server.3=hadoop7:2888:3888
    • 配置myid
      • 在每个服务端都需要这样子配,但是myid不允许相同
      • myid就是上述的server.数字的数字,即server.1中的1就是myid的值。
      • echo 1 > /opt/zookeeper/zooData/myid
    • 分发到其他结点:
      • scp -r /opt/zookeeper hadoop06:/opt/
      • scp -r /opt/zookeeper hadoop07:/opt/
    • 修改myid
      • Hadoop6:echo 2 > /opt/zookeeper/zooData/myid
      • Hadoop7:echo 3 > /opt/zookeeper/zooData/myid

配置Hadoop集群

本操作位于hadoop1结点上。

  • 配置JDK路径和Hadoop的环境。
    • vim /etc/profile
    • 添加以下内容。
# JAVA_HOME
export JAVA_HOME=JDK的路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/"
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native/"
  • 解压Hadooptar -zxvf hadoop-2.6.5.tar.gz
  • 移动到optmv hadoop-2.6.5/ /opt/
  • 改名:cd /opt/ && mv hadoop-2.6.5 hadoop
  • 进入配置目录:cd /opt/hadoop/etc/hadoop
  • 修改vim hadoop-env.sh
    • 搜索JAVA_HOME,并修改为本机JDK所在路径。
export JAVA_HOME=JDK的路径
  • 修改vim core-site.xml
    • 往其中增加如下内容:
<configuration>
	
	<property>
		<name>fs.defaultFSname>
		<value>hdfs://bi/value>
	property>
	
	<property>
		<name>hadoop.tmp.dirname>
		<value>/opt/hadoop/hdpdata/value>
	property>

	
	<property>
		<name>ha.zookeeper.quorumname>
		<value>hadoop5:2181,hadoop6:2181,hadoop7:2181value>
	property>
configuration>
  • 修改vim hdfs-site.xml
    • 向其中增加如下内容:
<configuration>
	
	<property>
		<name>dfs.nameservicesname>
		<value>bivalue>
	property>
	
	<property>
		<name>dfs.ha.namenodes.biname>
		<value>nn1,nn2value>
	property>
	
	<property>
		<name>dfs.namenode.rpc-address.bi.nn1name>
		<value>hadoop1:9000value>
	property>
	
	<property>
		<name>dfs.namenode.http-address.bi.nn1name>
		<value>hadoop1:50070value>
	property>
	
	<property>
		<name>dfs.namenode.rpc-address.bi.nn2name>
		<value>hadoop2:9000value>
	property>
	
	<property>
		<name>dfs.namenode.http-address.bi.nn2name>
		<value>hadoop2:50070value>
	property>
	
	<property>
		<name>dfs.namenode.shared.edits.dirname>
		<value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/bivalue>
	property>
	
	<property>
		<name>dfs.journalnode.edits.dirname>
		<value>/opt/hadoop/journaldatavalue>
	property>
	
	<property>
		<name>dfs.ha.automatic-failover.enabledname>
		<value>truevalue>
	property>
	
	<property>
		<name>dfs.client.failover.proxy.provider.biname>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
	property>
	
	<property>
		<name>dfs.ha.fencing.methodsname>
		<value>
			sshfence
			shell(/bin/true)
		value>
	property>
	
	<property>
		<name>dfs.ha.fencing.ssh.private-key-filesname>
		<value>/root/.ssh/id_rsavalue>
	property>
	
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeoutname>
		<value>30000value>
	property>
configuration>
  • 修改vim mapred-site.xml
    • 向其中增加如下内容。
<configuration>
	
	<property>
		<name>mapreduce.framework.namename>
		<value>yarnvalue>
	property>
configuration>
  • 修改vim yarn-site.xml
    • 向其中增加如下内容。
<configuration>
	
	<property>
		<name>yarn.resourcemanager.ha.enabledname>
		<value>truevalue>
	property>
	
	<property>
		<name>yarn.resourcemanager.cluster-idname>
		<value>yrcvalue>
	property>
	
	<property>
		<name>yarn.resourcemanager.ha.rm-idsname>
		<value>rm1,rm2value>
	property>
	
	<property>
		<name>yarn.resourcemanager.hostname.rm1name>
		<value>hadoop3value>
	property>
	<property>
		<name>yarn.resourcemanager.hostname.rm2name>
		<value>hadoop4value>
	property>
	
	<property>
		<name>yarn.resourcemanager.zk-addressname>
		<value>hadoop5:2181,hadoop6:2181,hadoop7:2181value>
	property>
	<property>
		<name>yarn.nodemanager.aux-servicesname>
		<value>mapreduce_shufflevalue>
	property>
configuration>
  • 修改slavesvim slaves
  • 删除其中localhost,增加以下内容:
hadoop5
hadoop6
hadoop7
  • 分发Hadoop到其他结点:
    • hadoop2:scp -r /opt/hadoop hadoop2:/opt/
    • hadoop3:scp -r /opt/hadoop hadoop3:/opt/
    • hadoop4:scp -r /opt/hadoop hadoop4:/opt/
    • hadoop5:scp -r /opt/hadoop hadoop5:/opt/
    • hadoop6:scp -r /opt/hadoop hadoop6:/opt/
    • hadoop7:scp -r /opt/hadoop hadoop7:/opt/
  • 配置JDK路径和Hadoop的环境。
    • vim /etc/profile
    • 添加以下内容。
# JAVA_HOME
export JAVA_HOME=JDK的路径
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/"
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native/"
  • 分发/etc/profile文件到其他结点中。
    • hadoop2:scp -r /etc/profile hadoop2:/etc
    • hadoop3:scp -r /etc/profile hadoop3:/etc
    • hadoop4:scp -r /etc/profile hadoop4:/etc
    • hadoop5:scp -r /etc/profile hadoop5:/etc
    • hadoop6:scp -r /etc/profile hadoop6:/etc
    • hadoop7:scp -r /etc/profile hadoop7:/etc
    • 之后需要每个结点都执行source /etc/profile才会生效。

启动

  • 启动ZooKeeper集群
    • cd /opt/zookeeper/bin
    • hadoop5:./zkServer.sh start
    • hadoop6:./zkServer.sh start
    • hadoop7:./zkServer.sh start
    • 使用./zkServer.sh status查看状态,可以看到两个结点是follower,一个是leader。
  • 启动JournalNode集群
    • hadoop5:hadoop-daemon.sh start journalnode
    • hadoop6:hadoop-daemon.sh start journalnode
    • hadoop7:hadoop-daemon.sh start journalnode
  • 格式化HDFS
    • hadoop1:hdfs namenode -format
    • 分发到hadoop2:scp -r /opt/hadoop/hdpdata hadoop2:/opt/hadoop/
  • 格式化ZKFC
    • hadoop1:hdfs zkfc -formatZK
  • 启动HDFS
    • hadoop1:start-dfs.sh
    • hadoop3:start-yarn.sh
    • hadoop4:yarn-daemon.sh start resourcemanager
  • 查看是否启动:
    • 在浏览器中:hadoop2:50070,如果正常启动页面就表示安装启动成功了。其中'hadoop2:9000'(standby)就表示hadoop2结点是standby状态,未激活。
    • 在浏览器中:输入链接hadoop3:8088,可以正常启动页面。
    • 在浏览器中:输入链接hadoop4:8088,可以正常启动页面。hadoop3结点正常的时候,会重定向到hadoop3:8088;如果hadoop3挂掉了,那么hadoop4会等待5s后,启动hadoop4上的ResourceManager,并跳转到hadoop4:8088

附录

  • 感谢DPB老师提供的资料。

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