大数据 Hadoop高可用HA

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Notzuonotdied/article/details/82924410

前言

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

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>
	<!-- 指定hdfs的nameservice为ns1 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://bi/</value>
	</property>
	<!-- 指定hadoop临时目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/hadoop/hdpdata/</value>
	</property>

	<!-- 指定zookeeper地址 -->
	<property>
		<name>ha.zookeeper.quorum</name>
		<value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value>
	</property>
</configuration>
  • 修改vim hdfs-site.xml
    • 向其中增加如下内容:
<configuration>
	<!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>bi</value>
	</property>
	<!-- bi下面有两个NameNode,分别是nn1,nn2 -->
	<property>
		<name>dfs.ha.namenodes.bi</name>
		<value>nn1,nn2</value>
	</property>
	<!-- nn1的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.bi.nn1</name>
		<value>hadoop1:9000</value>
	</property>
	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.bi.nn1</name>
		<value>hadoop1:50070</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.bi.nn2</name>
		<value>hadoop2:9000</value>
	</property>
	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.bi.nn2</name>
		<value>hadoop2:50070</value>
	</property>
	<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/bi</value>
	</property>
	<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/opt/hadoop/journaldata</value>
	</property>
	<!-- 开启NameNode失败自动切换 -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!-- 配置失败自动切换实现方式 -->
	<property>
		<name>dfs.client.failover.proxy.provider.bi</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
	<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>/root/.ssh/id_rsa</value>
	</property>
	<!-- 配置sshfence隔离机制超时时间 -->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>
  • 修改vim mapred-site.xml
    • 向其中增加如下内容。
<configuration>
	<!-- 指定mr框架为yarn方式 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>
  • 修改vim yarn-site.xml
    • 向其中增加如下内容。
<configuration>
	<!-- 开启RM高可用 -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!-- 指定RM的cluster id -->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrc</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>hadoop3</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>hadoop4</value>
	</property>
	<!-- 指定zk集群地址 -->
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</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老师提供的资料。

猜你喜欢

转载自blog.csdn.net/Notzuonotdied/article/details/82924410