大数据 Hadoop高可用HA

前言

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

HA配置

集群规划

主机名IP地址安装的软件运行的进程
Hadoop1192.168.1.101JDK、HadoopNameNode、DFSZKFailoverController(zkfc)
Hadoop2192.168.1.102JDK、HadoopNameNode、DFSZKFailoverController(zkfc)
Hadoop3192.168.1.103JDK、HadoopResourceManager
Hadoop4192.168.1.104JDK、HadoopResourceManager
Hadoop5192.168.1.105JDK、Hadoop、ZooKeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
Hadoop6192.168.1.106JDK、Hadoop、ZooKeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
Hadoop7192.168.1.107JDK、Hadoop、ZooKeeperDataNode、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老师提供的资料。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值