一、前提准备

实验环境下准备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环境搭建相关推荐

  1. [大数据技术与应用省赛学习记录二]——模块一(HADOOP完全分布式集群搭建)

    **在操作前,先梳理一下HADOOP完全分布式需要做些什么,不然像无头的苍蝇一样,永远不知道做什么.因为我本人比赛是一台服务器Centos 7,与三台客户端Ubuntu 18.04,所以以物理机的角度 ...

  2. Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法

    Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法 环境说明 系统:ubuntu18.04 主机名:test1 用 ...

  3. HADOOP 伪分布式集群搭建

    一 linux 环境的搭建 由于笔者这里使用的是vmware 虚拟机 采用centos7 linux 操作系统进行搭建,所以一下示例均以centos7进行示例 1.  搭建vmware 虚拟机 (1) ...

  4. 大数据开发·关于虚拟机Hadoop完全分布式集群搭建教程

    hadoop完全分布式集群搭建 一.搭建准备 1.安装VMware虚拟机 2.Xshell 7 远程客户端及Xftp 7安装 3.搭建模板虚拟机hadoop100 配置虚拟机网络 为虚拟机普通用户配置 ...

  5. Ubuntu18.04+Docker+Hadoop+Spark分布式集群搭建

    题前记:因为课程需求,下面将搭建过程用学术论文的格式写.(其实我并不想写的,没办法,学习作业嘛QAQ...) 我的联系方式:630056108 文章目录 Docker上的Hadoop大数据平台搭建与测 ...

  6. Hadoop完全分布式集群搭建详细图文教程

    本文所使用的环境及版本: CentOS Linux release 7.9.2009 (Core) jdk1.8.0_291 hadoop-3.2.2 一.安装模板机 1.安装CentOS 7.9并配 ...

  7. 基于ubuntu的hadoop完全分布式集群搭建

    借鉴网址1 借鉴网址2 hadoop官方配置教程 搭建虚拟机,克隆(或者先配置JAVA和Hadoop环境再克隆,之后要改主机名和映射以及SSH免密) 可以利用xsync集群分发脚本一台机器配置其他机器 ...

  8. Hadoop完全分布式集群搭建

    hadoop本地模式搭建 首先准备一台Linux环境的服务器关闭防火墙 # 查看防火墙状态 systemctl status firewalld # 停止防火墙 systemctl stop fire ...

  9. Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi

    Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi 今日课程学习目标 1.了解Linux操作系统发展介绍.安装配置 2.掌握SSH原理机制.Linux文件上传下载 3.掌握L ...

最新文章

  1. WEB文件管理器2.0版
  2. 局部类的引用成员函数或虚函数必须进行定义
  3. Asp.net控件之异同:HTML控件与Web服务器控件
  4. 数据结构二叉树的所有基本功能实现。(C++版)
  5. 华人包揽CVPR 2019最佳论文,李飞飞ImageNet成就经典
  6. 安全声明标记语言SAML2.0初探
  7. Codeforces Good Bye 2016 题解
  8. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端
  9. 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现
  10. ssh WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  11. ASP.NET2.0中控件的简单异步回调
  12. CentOS6.6上编译安装httpd2.4
  13. BeyondCompare3提示许可密钥过期完美解决方法:3281-0350
  14. Oracle日期和时间总结
  15. dda算法画直线_深度学习算法第一讲感知机数学原理解析及实现
  16. 【预训练模型】预训练语言模型的前世今生之风起云涌
  17. 2020年跨境电商好用的20个ERP系统
  18. PPT素材模板哪个网站资源内容比较丰富?
  19. AIL(Android init Language)
  20. 隔离电源模块的5个作用

热门文章

  1. bartlett方差齐性检验_R语言实用教程-数据正态性以及方差齐性检验
  2. java继承的知识点_Java知识点梳理——继承
  3. python反射实例化_Python类反射机制使用实例解析
  4. Django中提供的6种缓存方式
  5. 通过实例学习如何使用telerik:RadListView控件
  6. TaintDroid深入剖析之启动篇
  7. XML转JSON的javascript代码
  8. chHANDLE_DLGMSG(windows核心编程)讲解
  9. 【剑指Offer】面试招聘题目2:重建二叉树
  10. 利用nofllow与内页链接做好SEO