Hadoop完全分布式HA环境搭建
一、前提准备
实验环境下准备4台虚拟机,必须安装好jdk并配置好环境变量。(点击查看jdk的安装配置)
二、节点规划
NN1 | NN2 | DN | ZK | ZKFC | JN | |
---|---|---|---|---|---|---|
node1 | * | * | * | |||
node2 | * | * | * | * | * | |
node3 | * | * | * | |||
node4 | * | * |
三、免密钥
这里需要node1和其他节点彼此免密钥。
在node2上创建密钥:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
先让node2对自己免密钥:
[root@node2 .ssh]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
验证node2是否对自己免密钥:
[root@node2 .ssh]# ssh node2
The authenticity of host 'node2 (192.168.16.112)' can't be established.
RSA key fingerprint is 49:bb:a4:25:d4:30:d9:4f:98:57:f5:e7:c5:6a:13:a2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2,192.168.16.112' (RSA) to the list of known hosts.
Last login: Wed Jun 12 21:07:06 2019 from 192.168.16.1
此时node2还需要控制node1:
[root@node2 .ssh]# scp id_dsa.pub node1:`pwd`/node2.pub
然后node1只需要把分发过来的node2.pub追加到authorized_keys :
[root@node1 .ssh]# cat node2.pub >> authorized_keys
然后在node2节点上访问node1,就成了:
[root@node2 .ssh]# ssh node1
Last login: Wed Jun 12 20:34:14 2019 from 192.168.16.1
同样,其他节点也是如此,这里就不过多赘述了!
四、搭建Zookeeper集群
在节点规划时,我们划定zookeeper安装在node2、node3、node4上。
解压zookeeper:
tar xf zookeeper-3.4.6.tar.gz
将zookeeper移动到指定目录下:
mv zookeeper-3.4.6 /opt/software/
修改配置文件~/.bash_profile:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export HADOOP_HOME=/opt/software/hadoop-2.6.5
export ZOOKEEPER_HOME=/opt/software/zookeeper-3.4.6
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
修改完后使用“source”或者“ . ”命令重新加载配置文件,如果输入“zk”再按Tab键能给出一堆的提示命令,就没问题了。
修改zookeeper位于“/opt/software/zookeeper-3.4.6/conf”目录下的配置文件(可以先copy一份zoo_sample.cfg 为zoo.cfg),注意zoo.cfg的第12行:
#修改存储路径
dataDir=/var/software/hadoop/zk
#并在该文件末行追加:
server.1=192.168.16.112:2888:3888
server.2=192.168.16.113:2888:3888
server.3=192.168.16.114:2888:3888
zookeeper在运行时有2个状态:可用和不可用。能够提供分布式协调服务,说明zookeeper是能够一直可靠运行的。zookeeper3个节点跑的时候,也是遵循主从模型的:leader和fllower。一旦leader挂了,就陷入了无主模型,然后他会立刻推选出新的leader,继续对外提供服务。有主的情况下正常工作,通信走的是2888 。选举的时候走的是3888 。
zookeeper运行时有2个id:server的id,叫myid;事务id,zxid;选举规则就是:大家先亮出事务id,谁的事务id最大谁就是leader。如果事务id都一样,就依据“server.1”,谁的数字最大,谁就是新leader。
创建zk配置文件中的指定目录:
mkdir -p /var/software/hadoop/zk
并且通过追加的方式将配置的数字给到myid:
echo 1 > /var/software/hadoop/zk/myid
剩下的2台节点也需要安装配置zookeeper,这里我直接分发过去:
[root@node2 software]# scp -r ./zookeeper-3.4.6/ node3:`pwd`
[root@node2 software]# scp -r ./zookeeper-3.4.6/ node4:`pwd`
当然,node3和node4也要放置myid,重复操作创建目录并追加数字到myid即可!
在node3和node4上重复以上配置环境变量的操作!
之后,就可以在node2、node3和node4上启动zookeeper了:
zkServer.sh start
这里我们先启动node2上的zookeeper:
[root@node2 zk]# zkServer.sh start
JMX enabled by default
Using config: /opt/software/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node2 zk]# zkServer.sh status
JMX enabled by default
Using config: /opt/software/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
需要注意的是,如果只启动一个zk节点,它也只是启动了。但是查看它的状态,显示“not running”。为什么?因为现在只有一个zk节点,对于3来说没有过半。接下来启动node3上的zk,显示leader,node2上的zk就是follower。此刻就算启动node4上的zk,leader和follower的关系也不会变了。
五、配置hadoop的配置文件
这里的安装方式及配置环境变量,可以参考伪分布式的搭建。(点击查看伪分布式环境搭建)
修改slaves文件:
node2
node3
node4
去到“/opt/software/hadoop-2.6.5/etc/hadoop”目录下,修改“hdfs-site.xml”文件:
<configuration>
<property><name>dfs.replication</name><value>2</value></property><!-- 定义hdfs集群ID号 -->
<property><name>dfs.nameservices</name><value>mycluster</value>
</property>
<!-- 定义hdfs集群中namenode的ID号 -->
<property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value>
</property>
<!-- 定义namenode的主机名和RPC协议的端口 -->
<property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>node1:8020</value>
</property>
<property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>node2:8020</value>
</property>
<!-- 定义namenode的主机名和HTTP协议的端口 -->
<property><name>dfs.namenode.http-address.mycluster.nn1</name><value>node1:50070</value>
</property>
<property><name>dfs.namenode.http-address.mycluster.nn2</name><value>node2:50070</value>
</property>
<!-- 定义共享edits的URL -->
<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<!-- journalnode集群中用于保存edits文件的目录 -->
<property><name>dfs.journalnode.edits.dir</name><value>/var/software/hadoop/ha/jn</value>
</property>
<!-- 定义HDFS的客户端连接HDFS集群时返回active namenode地址 -->
<property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- HDFS集群中两个namenode切换状态时的隔离方法 -->
<property><name>dfs.ha.fencing.methods</name><value>sshfence</value>
</property>
<!-- HDFS集群中两个namenode切换状态时的隔离方法的密钥 -->
<property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_dsa</value>
</property>
<!-- HA的HDFS集群自动切换namenode的开关-->
<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
</configuration>
修改core-site.xml文件:
<configuration><property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property>
<property><name>hadoop.tmp.dir</name><value>/var/software/hadoop/ha</value>
</property>
<!-- HDFS连接zookeeper集群的地址和端口 -->
<property><name>ha.zookeeper.quorum</name><value>node2:2181,node3:2181,node4:2181</value></property>
</configuration>
将修改的这几个配置文件分发给node2、node3、node4 。
六、启动
以上操作都做完了,现在就剩下部署的细节了。在部署的细节中,牵扯到了格式化。现在有了2个NN,要通过JN传递数据了。所以在格式化之前要优先启动JN。
在node1、node2和node3分别先后单独手工启动一个JN:
# hadoop-daemon.sh start journalnode
格式化NN:
[root@node1 .ssh]# hdfs namenode -format
#一定要见到“has been successfully formatted”才行!
启动NN:
[root@node1 .ssh]# hadoop-daemon.sh start namenode
拷贝元数据:
[root@node2 .ssh]# hdfs namenode -bootstrapStandby
#一定要看到“successfully ”才行
格式化zookeeper:
[root@node1 .ssh]# hdfs zkfc -formatZK
#一定要见到“successfully ”
在node4上启动zk客户端:
[root@node4 hadoop]# zkCli.sh
zookeeper也有一个目录树结构,可以使用“ls /”命令查看:
现在回忆一下我们刚才都干了点啥?
格式化NN——>同步——>格式化zookeeper
停止上面的节点:
[root@node1 .ssh]# stop-dfs.sh
接下来就可以启动了:
[root@node1 .ssh]# start-dfs.sh
启动成功之后,可以查看各自节点的jps是否和节点规划符合!
然后我们再去到火狐浏览器,node1:50070 和 node2:50070验证就成了。
注意!
千万、千万、千万要注意集群ID是否一致。笔者曾经因为初始化过两次,导致DN启动不起来。经过排查发现集群ID不一致,贼尴尬!
Hadoop完全分布式HA环境搭建相关推荐
- [大数据技术与应用省赛学习记录二]——模块一(HADOOP完全分布式集群搭建)
**在操作前,先梳理一下HADOOP完全分布式需要做些什么,不然像无头的苍蝇一样,永远不知道做什么.因为我本人比赛是一台服务器Centos 7,与三台客户端Ubuntu 18.04,所以以物理机的角度 ...
- Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法
Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法 环境说明 系统:ubuntu18.04 主机名:test1 用 ...
- HADOOP 伪分布式集群搭建
一 linux 环境的搭建 由于笔者这里使用的是vmware 虚拟机 采用centos7 linux 操作系统进行搭建,所以一下示例均以centos7进行示例 1. 搭建vmware 虚拟机 (1) ...
- 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程
hadoop完全分布式集群搭建 一.搭建准备 1.安装VMware虚拟机 2.Xshell 7 远程客户端及Xftp 7安装 3.搭建模板虚拟机hadoop100 配置虚拟机网络 为虚拟机普通用户配置 ...
- Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建
题前记:因为课程需求,下面将搭建过程用学术论文的格式写.(其实我并不想写的,没办法,学习作业嘛QAQ...) 我的联系方式:630056108 文章目录 Docker上的Hadoop大数据平台搭建与测 ...
- Hadoop完全分布式集群搭建详细图文教程
本文所使用的环境及版本: CentOS Linux release 7.9.2009 (Core) jdk1.8.0_291 hadoop-3.2.2 一.安装模板机 1.安装CentOS 7.9并配 ...
- 基于ubuntu的hadoop完全分布式集群搭建
借鉴网址1 借鉴网址2 hadoop官方配置教程 搭建虚拟机,克隆(或者先配置JAVA和Hadoop环境再克隆,之后要改主机名和映射以及SSH免密) 可以利用xsync集群分发脚本一台机器配置其他机器 ...
- Hadoop完全分布式集群搭建
hadoop本地模式搭建 首先准备一台Linux环境的服务器关闭防火墙 # 查看防火墙状态 systemctl status firewalld # 停止防火墙 systemctl stop fire ...
- Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi
Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi 今日课程学习目标 1.了解Linux操作系统发展介绍.安装配置 2.掌握SSH原理机制.Linux文件上传下载 3.掌握L ...
最新文章
- WEB文件管理器2.0版
- 局部类的引用成员函数或虚函数必须进行定义
- Asp.net控件之异同:HTML控件与Web服务器控件
- 数据结构二叉树的所有基本功能实现。(C++版)
- 华人包揽CVPR 2019最佳论文,李飞飞ImageNet成就经典
- 安全声明标记语言SAML2.0初探
- Codeforces Good Bye 2016 题解
- moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端
- 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现
- ssh WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- ASP.NET2.0中控件的简单异步回调
- CentOS6.6上编译安装httpd2.4
- BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
- Oracle日期和时间总结
- dda算法画直线_深度学习算法第一讲感知机数学原理解析及实现
- 【预训练模型】预训练语言模型的前世今生之风起云涌
- 2020年跨境电商好用的20个ERP系统
- PPT素材模板哪个网站资源内容比较丰富?
- AIL(Android init Language)
- 隔离电源模块的5个作用