hadoop HA配置

文章目录

一、准备工作

1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系 /etc/hosts
https://blog.csdn.net/hongchenshijie/article/details/102669331
4.关闭防火墙并设置为开机不自启
service iptables stop
5.ssh免登陆
https://blog.csdn.net/hongchenshijie/article/details/102696742
6.安装JDK,配置环境变量等
https://blog.csdn.net/hongchenshijie/article/details/102667827
7.注意集群时间要同步
https://blog.csdn.net/hongchenshijie/article/details/102775603
8.安装好zookeeper
https://blog.csdn.net/hongchenshijie/article/details/103486179

二、安装配置hadoop

提供已编译过 的 cdh 版本的hadoop

链接: https://pan.baidu.com/s/1PK32pd0ZIe1i_oBqFy1H1Q 提取码: 78dm 复制这段内容后打开百度网盘手机App,操作更方便哦
1. 上传到集群
2. 解压
tar -zxvf hadoop-2.6.0-cdh5.14.0.tar.gz -C  安装的目录
3.配置环境变量

3.1 进入 etc/profile.d 目录

 cd /etc/profile.d/

3.2 创建一个hadoop.sh 文件

vim hadoop.sh

3.3 添加以下内容 (先按i 进入编辑模式)

export HADOOP_HOME=安装的目录/hadoop-2.6.0-cdh5.14.0
export PATH=$PATH:$HADOOP_HOME/bin
4.修改core-site.xml配置文件

4.1 进入hadoop 配置文件目录

cd $HADOOP_HOME/etc/hadoop

4.2 修改core-site.xml (记得改为直接的节点名 我的三台节点名称分别是 hadoop01,hadoop02,hadoop03)
在 configuration 中添加以下内容

<!-- 集群名称在这里指定!该值来自于hdfs-site.xml中的配置 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://cluster1</value>
</property>
<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/export/servers/hadoop-2.6.0-cdh5.14.0/HAhadoopDatas/tmp</value>
</property>
<!-- ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
5.修改hdfs-site.xml

5.1 打开hdfs-site.xml

vim hdfs-site.xml

在configuration中添加以下内容 (注意修改节点名)

<!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 -->
<property>
	<name>dfs.nameservices</name>
	<value>cluster1</value>
</property>
<!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->
<property>
	<name>dfs.ha.namenodes.cluster1</name>
	<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.cluster1.nn1</name>
	<value>hadoop01:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
	<name>dfs.namenode.http-address.cluster1.nn1</name>
	<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-	address.cluster1.nn2</name>
	<value>hadoop02:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
	<name>dfs.namenode.http-address.cluster1.nn2</name>
	<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/export/install/hadoop-2.6.0-cdh5.14.0/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
	<name>dfs.client.failover.proxy.provider.cluster1</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</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>
6.修改 mapred-site.xml

5.1 拷贝以下 mapred-site.xml.template 并 命名为mapred-site.xml

cp  mapred-site.xml.template  mapred-site.xml

打开 mapred-site.xml 文件

vim  mapred-site.xml 

在configuration中添加以下内容

<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7.修改 yarn-site.xml

打开 yarn-site.xml 配置文件,节点名称记得修改

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>hadoop01</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>hadoop02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
8.修改slaves

打开 slaves

vim slaves

删除localhost,并添加以下内容
改为自己的节点名

hadoop01
hadoop02
hadoop03

三、将软件拷贝到所有节点

scp -r hadoop-2.6.0-cdh5.14.0 hadoop02:$PWD
scp -r hadoop-2.6.0-cdh5.14.0 hadoop03:$PWD

四、启动(由上到下执行)

1.启动zookeeper集群

每台节点都要执行

bin/zkServer.sh start
bin/zkServer.sh status

//如果是根据我提供的博客配置的zookeeper 可以用脚本键启动上述两条命令就可以省略
zkstart-all.sh
2.手动启动journalnode

每台节点都要执行

$HADOOP_HOME/hadoop-daemon.sh start journalnode

//使用jsp 进行检查发现 多了JournalNode进程
3.格式化namenode
hdfs namenode -format
//格式化后会在根据core-site.xml中的hadoop.tmp.dir配置的目录下生成个hdfs初始化文件
4.把hadoop.tmp.dir配置的目录下所有文件拷贝到另一台namenode节点所在的机器
cd $HADOOP_HOME/HAhadoopDatas
scp -r tmp hado0p02:$PWD
5. 格式化ZKFC(在active上执行即可) 也就是第一个节点
hdfs zkfc -formatZK
6.启动HDFS 在第一个节点执行
$HADOOP_HONE/sbin/start-dfs.sh
7.启动yarn
start-yarn.sh
8.手动在standby上手动启动备份的 resourcemanager (应该为第二个节点)
yarn-daemon.sh start resourcemanager

五、验证

1.验证 hdfs
http://第一个节点的ip地址:50070
//看到以下内容
NameNode 'node01:8020' (active)
http://第二个节点的ip地址:50070
//看到以下内容
NameNode 'node01:8020' (standby)
2.验证HDFS HA
//首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
//然后再kill掉active(第一个节点)的NameNode
kill -9 <pid of NameNode>
//通过浏览器访问:
http://第二个节点ip地址:50070
//看到以下内容
NameNode 'hadoop02:8020' (active)
//这个时候node02上的NameNode变成了active
//在执行命令:
hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2019-03-11 15:10 /profile
//刚才上传的文件依然存在!!!
//手动启动那个挂掉的NameNode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
//通过浏览器访问:
http://第一个节点的ip地址:50070
//看到以下内容
NameNode 'hadoop01:8020' (standby)
上一篇:CDH5.13.3部署并升级Spark2.x


下一篇:heartbeat双机热备(haproxy或glbd+mysql)