从0开始搭建Hadoop2.x高可用集群(HDFS篇)

  • 演示目标
  • 演示环境
  • 注意事项
  • 准备虚拟机
    • 关闭防火墙
    • 检查系统时间
    • 修改host
    • 设置免密登录
    • 卸载OpenJDK
    • 安装软件
  • 准备HDFS
    • 配置cote-site.xml
    • 配置hdfs-site.xml
    • 配置slaves
    • 配置hadoop-env
    • 拷贝配置
  • 准备Zookeeper
    • 配置zoo.cfg
  • 启动集群
    • 启动Zookeeper集群
    • 启动HDFS集群
      • 首次启动
  • 验证高可用(HA)

演示目标

搭建双NameNode节点的高可用集群,其中一台节点的状态为Active,另一台是standby。当Active节点发生故障时,standby节点能自动接管并切换到Active状态。

演示环境

软件 备注
VMware Workstation 15.5
CentOS CentOS-7-x86_64-DVD-1804.iso
JDK jdk-8u211-linux-x64.tar.gz
Hadoop hadoop-2.6.5.tar.gz
Zookeeper zookeeper-3.4.14.tar.gz
下载地址 若有需要请按需下载上述软件

注意事项

  • 文章中所有shell命令都是以root用户进行操作,所以请优先使用su root命令切换用户;
  • 在输入shell命令前先阅读命令注释,以避免遗漏和错误。
  • 可以使用虚拟机快照功能帮助自己在执行了错误的操作后进行回滚。

准备虚拟机

  • 安装WMware Workstation,并使用CentOS7镜像创建三台虚拟机;
  • 配置好三台虚拟机的网络环境使其之间能够相互Ping通(如何设置?),演示中所用的虚拟机网络信息如下:
HOSTNAME IP
vm1 192.168.0.51
vm2 192.168.0.52
vm3 192.168.0.53

关闭防火墙

依次使用所有虚拟机执行下列命令

# 关闭防火墙
systemctl stop firewalld
# 禁用开机启动
systemctl disable firewalld
# 编辑selinux文件
# 设置SELINUX值等于disabled
# SELINUX=disabled
vim /etc/sysconfig/selinux

检查系统时间

依次使用所有虚拟机执行下列命令

# 查看时区
timedatectl | grep Time
# 设置时区为上海
timedatectl set-timezone Asia/Shanghai
# 打印出当前系统时间
date
# 如果显示出的时间比当前时间快8小时,则执行下列命令
date -s '-8hour'
hwclock -w

修改host

使用虚拟机vm1执行下列命令

# 修改hostname
hostnamectl set-hostname vm1

使用虚拟机vm2执行下列命令

# 修改hostname
hostnamectl set-hostname vm2

使用虚拟机vm3执行下列命令

# 修改hostname
hostnamectl set-hostname vm3

使用虚拟机vm1执行下列命令

# 追加内容到hosts文件
cat >> /etc/hosts << EOF # 回车
> 192.168.0.51 vm1 # 回车
> 192.168.0.52 vm2 # 回车
> 192.168.0.53 vm3 # 回车
> EOF # 回车
# 将hosts文件拷贝到vm2和vm3
# 拷贝完毕后分别使用所有虚拟机执行ping vm1、ping vm2、ping vm3检查网络是否通畅
scp /etc/hosts root@vm2:/etc/hosts
scp /etc/hosts root@vm3:/etc/hosts

设置免密登录

依次使用所有虚拟机执行下列命令

# 登录本机,该操作用于初始化ssh目录
# 如果出现Are you sure you want to continue connecting (yes/no)?请输入:yes
ssh localhost
# 退出登录
exit
# 进入ssh目录
cd ~/.ssh/
# 生成密钥
# 执行后系统会出现多次提示,依次回车即可
ssh-keygen
# 编辑ssh_config文件
# 将StrictHostKeyChecking的值设置为no
# StrictHostKeyChecking no
vim /etc/ssh/ssh_config

使用虚拟机vm1执行下列命令

# 进入ssh目录
cd ~/.ssh/
# 将vm1公钥文件中的内容追加到到authorized_keys文件
cat id_rsa.pub >> authorized_keys
# 分别将vm2和vm3的id_rsa.pub中的内容也追加到vm1的authorized_keys文件中
# 最终vm1的authorized_keys文件拥有所有虚拟机的公钥,文件类容类似如下所示:
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDK4UGWdR1BfeB55eN/5j4f5vG1qzARyZ0IzVbmujdVqeBC3jMJDBU4DiGNH1DlL7M9ga7ocmzIR+/B9u/7f7jQNAejsPNVTo4TUt5f8+f4csH7CSXUVbB8oQrWrpH7hwNIf5RMzCAoEGoDSxm7/AZUM632IRz4ns4GKiJVES871VNDbrtal82mmdVPf84V2YpdgP8FmSbGe3C2UdsS8PzZ3QMb+gMi+jNTKi4UN7dAZxh5v58fBKqyX9sFkvwWCibr2t3MUnHOdAP789i1KTAubWjlthiHhF+CnUn0S0BFTiWfec/hJwYlOo8rOReVdS4ymB/q5kR/5uNFHJUEQrsX root@vm1
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCVBoca02VsaihYD52FnkEEP/f/do/iO6ao/l12EFbnHWivYKbja4CMty/c4Uwowo33ylFVahhlEMornJ76tLtxsOMOPcJby6SJdbmx7Aqy1CVccMU7NrMYnRosnnazIq+tUCrGWhXGAmZ3TUSAC7RNrIAtFkzeYpsylWenexPx+/mbARon8gc0Y3KamcYJjAyK1hVQN3VixxjeNw8i4VfEvxEY74JRjYR63QQUGqptKuDQCBn06BgACIJxaLLNcxCyB5Fb72gOgjIWyG/+azItimxRDAEIqdax47HoKjrE+tpKrq0CIswm1q+NfafO5m06NtAydUzfedtLrAmVLUEX root@vm2
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDp1yt3cYWY3n8oMCGykr8oX1bGEbHWqNMxe2gOsJoBZCMKkqVyM98iajoG5KsZdNZM91+jqH6nbuse6lcDPOMKZ+rY+DqUSW/2tg3VqByAywNL3SW44gPQyKwdgNucAJtfgZdRaYiIglkEm9GT09zGCbUkd7YReNULeuTVx92CXH5jRBNCSHze9kg3s9eHOvKZ2rfNhIf/xqR2wxGlioBD0Ql3/jEAvGwgl2QTIC4BBrYgya8SIEpmaf0t6dIsDbnnzfcHgaZe/VdiQtT7km7Odx/65E/ECl7xYLZetrJS/cvebc5I+t/IP0OBSOeVHtHLux+o/aWBIN44uFcdwTMX root@vm3
# 将authorized_keys文件拷贝到vm2和vm3
scp ~/.ssh/authorized_keys root@vm2:~/.ssh/
scp ~/.ssh/authorized_keys root@vm3:~/.ssh/
# 使用任意虚拟机检查是否能免密登录
ssh vm1 #[vm2、vm3]
# 登录其他虚拟机后切记退出
exit

卸载OpenJDK

依次使用所有虚拟机执行下列命令

# 查看系统自带的OpenJDK信息
rpm -qa | grep java
# 显示信息类似如下:
tzdata-java-2018c-1.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
# 卸载系统自带的OpenJDK(以下每行卸载的软件名称应该以自己机器为主,请先检查)
# 卸载完成后输入java命令,如果提示command not found...则说明卸载成功
yum -y remove java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64 \
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64 \
java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64 \
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64# 如果卸载失败则检查虚拟机外网是否通畅,或者使用rpm命令卸载
rpm -e --nodeps #加上你要卸载的软件名称

安装软件

  • 将下载好的JDK、Hadoop、Zookeeper压缩包拷贝到vm1机器的/opt目录下,可以使用Xftp(官方下载地址)工具进行拷贝;
  • 使用tar -zxvf xxx.tar.gz依次解压三个压缩包。
  • 配置环境变量:

使用虚拟机vm1执行下列命令

# 编辑profile文件
vim /etc/profile
# 在文件内容开头添加以下内容
export JAVA_HOME=/opt/jdk1.8.0_211
export HADOOP_HOME=/opt/hadoop-2.6.5
export ZK_HOME=/opt/zookeeper-3.4.14
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
export PATH=$ZK_HOME/bin:$PATH
# 使环境变量立即生效
# 完成后输入java命令检查是否设置成功
source /etc/profile
# 将解压后的三个软件拷贝到vm2和vm3
scp -rp /opt/jdk1.8.0_211/ root@vm2:/opt/
scp -rp /opt/jdk1.8.0_211/ root@vm3:/opt/
scp -rp /opt/hadoop-2.6.5/ root@vm2:/opt/
scp -rp /opt/hadoop-2.6.5/ root@vm3:/opt/
scp -rp /opt/zookeeper-3.4.14/ root@vm2:/opt/
scp -rp /opt/zookeeper-3.4.14/ root@vm3:/opt/
# 将profile文件拷贝到vm2和vm3
scp /etc/profile root@vm2:/etc/
scp /etc/profile root@vm3:/etc/

使用虚拟机vm2执行下列命令

# 使环境变量立即生效
# 完成后输入java命令检查是否设置成功
source /etc/profile

使用虚拟机vm3执行下列命令

# 使环境变量立即生效
# 完成后输入java命令检查是否设置成功
source /etc/profile

准备HDFS

  • 查看官方文档的方式:

    • 官方在线文档;
    • 在Windows中打开hadoop-xxx.tar.gz压缩包中根目录下的\share\doc\hadoop\index.html可以查看当前版本的离线文档;
  • 节点部署情况 :
NameNode DataNode JournalNode Zookeeper
vm1
vm2
vm3

配置cote-site.xml

使用虚拟机vm1执行下列命令

# 进入Hadoop配置文件目录
cd /opt/hadoop-2.6.5/etc/hadoop
# 编辑core-site.xml
vim core-site.xml
<!-- core-site.xml文件配置如下 -->
<configuration><property><name>fs.defaultFS</name><value>hdfs://hdfs-cluster</value></property><property><name>ha.zookeeper.quorum</name><value>vm1:2181,vm2:2181,vm3:2181</value></property><property><name>hadoop.tmp.dir</name><value>/opt/hadoop-2.6.5/tmp</value></property>
</configuration>

配置hdfs-site.xml

使用虚拟机vm1执行下列命令

# 进入Hadoop配置文件目录
cd /opt/hadoop-2.6.5/etc/hadoop
# 编辑hdfs-site.xml
vim hdfs-site.xml
<!-- hdfs-site.xml文件配置如下 -->
<configuration><property><name>dfs.nameservices</name><value>hdfs-cluster</value></property><property><name>dfs.ha.namenodes.hdfs-cluster</name><value>nn1,nn2</value></property><property><name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name><value>vm1:8020</value></property><property><name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name><value>vm2:8020</value></property><property><name>dfs.namenode.http-address.hdfs-cluster.nn1</name><value>vm1:50070</value></property><property><name>dfs.namenode.http-address.hdfs-cluster.nn2</name><value>vm2:50070</value></property><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://vm1:8485;vm2:8485;vm3:8485/hdfs-cluster</value></property><property><name>dfs.client.failover.proxy.provider.hdfs-cluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><property><name>dfs.journalnode.edits.dir</name><value>/opt/hadoop-2.6.5/data/journalnode</value></property><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
</configuration>

配置slaves

使用虚拟机vm1执行下列命令

# 进入Hadoop配置文件目录
cd /opt/hadoop-2.6.5/etc/hadoop
# 编辑slaves
vim slaves
# slaves文件配置如下,使用回车换行
vm1
vm2
vm3

配置hadoop-env

使用虚拟机vm1执行下列命令

# 编辑hadoop.env.sh
vim /opt/hadoop-2.6.5/etc/hadoop/hadoop-env.sh
# 将export JAVA_HOME=${JAVA_HOME}修改为下列内容
export JAVA_HOME=/opt/jdk1.8.0_211

拷贝配置

使用虚拟机vm1执行下列命令

# 将vm1上配置好的配置文件拷贝到vm2和vm3
scp -rp /opt/hadoop-2.6.5/etc/hadoop root@vm2:/opt/hadoop-2.6.5/etc/
scp -rp /opt/hadoop-2.6.5/etc/hadoop root@vm3:/opt/hadoop-2.6.5/etc/

准备Zookeeper

使用vm1、vm2、vm3搭建Zookeeper集群。

配置zoo.cfg

使用虚拟机vm1执行下列命令

# 进入Zookeeper配置文件目录
cd /opt/zookeeper-3.4.14/conf/
# 编辑zoo.cfg文件
vim zoo.cfg
# 添加以下内容:
tickTime=2000
dataDir=/opt/zookeeper-3.4.14/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=vm1:2888:3888
server.2=vm2:2888:3888
server.3=vm3:2888:3888
# 将zoo.cfg拷贝到vm2和vm3
scp /opt/zookeeper-3.4.14/conf/zoo.cfg root@vm2:/opt/zookeeper-3.4.14/conf/
scp /opt/zookeeper-3.4.14/conf/zoo.cfg root@vm3:/opt/zookeeper-3.4.14/conf/
# 创建目录
mkdir /opt/zookeeper-3.4.14/data -p
# 在$dataDir路径下创建myid文件,文件内容为1
cd /opt/zookeeper-3.4.14/data
echo '1' > myid

使用虚拟机vm2执行下列命令

# 创建目录
mkdir /opt/zookeeper-3.4.14/data -p
# 在$dataDir路径下创建myid文件,文件内容为2
cd /opt/zookeeper-3.4.14/data
echo '2' > myid

使用虚拟机vm3执行下列命令

# 创建目录
mkdir /opt/zookeeper-3.4.14/data -p
# 在$dataDir路径下创建myid文件,文件内容为3
cd /opt/zookeeper-3.4.14/data
echo '3' > myid

启动集群

在启动过程中,如果有问题,应该优先查看日志。

  • 查看日志可以使用tail -f -n 100 /xx/xxx进行查看;
  • Zookeeper日志查看zookeeper.out文件;
  • HDFS日志查看Hadoop根目录下的logs文件夹;

启动Zookeeper集群

依次使用所有虚拟机执行下列命令

# 启动Zookeeper
zkServer.sh start

启动HDFS集群

  • 全面启动HDFS使用start-dfs.sh
  • 全面停止HDFS使用stop-dfs.sh
  • 首次启动HDFS集群时,不能直接使用start-dfs.sh,此时需要一些额外操作,主要是为了格式化NameNode。首次启动操作如下:

首次启动

使用虚拟机vm1执行下列命令

# 启动所有JournalNode,注意是hadoop-daemons.sh而不是hadoop-daemon.sh,两者区别在于多了一个s,前者是启动所有节点的jn
hadoop-daemons.sh start journalnode
# 格式化NameNode
hdfs namenode -format
# 启动NameNode
hadoop-daemon.sh start namenode

使用虚拟机vm2执行下列命令

# 拷贝vm1上namenode的格式化数据
hdfs namenode -bootstrapStandby
# 启动NameNode
hadoop-daemon.sh start namenode
# 初始化ZKFC
hdfs zkfc -formatZK
# 停止所有HDFS相关服务
stop-dfs.sh
# 重新启动所有HDFS相关服务
start-dfs.sh

验证高可用(HA)

  • 在Windows中使用浏览器打开两个NameNode的地址:

    • http://192.168.0.51:50070
    • http://192.168.0.52:50070
  • 如图所示,此时vm1虚拟机上的NameNode节点为Active状态:

  • 杀死状态为Active的NameNode,此时是vm1上的NameNode。

使用虚拟机vm1执行下列命令

# 查看Namenode的pid
jps
# 显示结果如下
17779 DFSZKFailoverController
17335 NameNode
15144 QuorumPeerMain
17609 JournalNode
18089 Jps
17439 DataNode
# 杀掉NameNode
kill -9 17335
  • 刷新http://192.168.0.52:50070,检查状态是否从standby转为Active
  • 如果以上步骤都没问题,则HDFS高可用集群搭建完毕,如果存在问题,请检查以下几点:
    • 检查Zookeeper和Hadoop的配置文件是否正确配置、日志是否有错误输出;
    • 检查jps命令显示的服务数是否正确;
    • 检查是否正确的完成了首次启动中的操作说明。

从0开始搭建Hadoop2.x高可用集群(HDFS篇)相关推荐

  1. 轻松搭建Redis缓存高可用集群

    Redis 高可用集群搭建 详情见 https://my.oschina.net/u/3796575/blog/1787078 转载于:https://www.cnblogs.com/xunyi/p/ ...

  2. 【Docker Swarm】搭建Docker Swarm高可用集群(详细版)

    文章目录 1️⃣什么是Docker Swarm? 2️⃣Docker Swarm相关命令说明 3️⃣Docker Swarm集群节点规划 4️⃣创建Docker Swarm高可用集群操作步骤演示

  3. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有一些要商城的,还有要springboot,springcloud,k8s等,几乎涵 ...

  4. mysql pxc搭建_MySQL PXC 高可用集群搭建

    一些名词介绍: WS:write set写数据集IST: Incremental State Transfer增量同步SST:State Snapshot Transfer全量同步 pxc环境所涉及的 ...

  5. kubesphere+kubernetes搭建生产环境高可用集群(一)

    docker部署安装harbor镜像仓库(附证书制作) 节点角色 主机名 CPU(核) 内存(GB) 系统盘(GB) 数据盘(TB) IP 备注 镜像仓库节点 harbor 2*8 256 2*600 ...

  6. Hadoop搭建高可用集群(保姆级教程)

    准备工作: 1.搭建完成zookeeper,如果没有搭建,请跳转到zookeeper集群搭建保姆级教程 2.集群的jdk都安装完成,如果没有,请跳转到linux编写个脚本快速搭建jdk保姆级教程 3. ...

  7. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  8. 双vip的MySQL高可用集群

    目录 一.mysql集群的搭建 IP地址规划: 使用ansible给从服务器安装mysql 1.使用master与所有从服务器建立SSH免密通道,然后添加到mysqld组到hosts文件里面 2.使用 ...

  9. Hadoop2.0高可用集群搭建【保姆级教程】

    搭载Hadoop2.0高可用集群 说明 准备 下载好所需要的文件 目录准备 虚拟机网络配置(可能会在其他文章中讲到) 文件的安装 配置环境变量 环境变量的验证 关闭防火墙 配置Hadoop高可用集群 ...

最新文章

  1. 如何创建修改分区表和如何查看分区表
  2. C#调用WebService实例和开发
  3. 关于GiF动图你不知道的9件事
  4. leetcode944. 删列造序
  5. 打造一个全命令行的Android构建系统
  6. ae 导出html5,AE脚本-导出json格式的Web动画工具 Bodymovin v5.7.0 + 使用教程
  7. 过游戏保护系列-巨人游戏保护(1)过PcHunter和Od检测
  8. 三角函数和差公式的推导
  9. 免费:轻松实现在微信中直接下载APK
  10. 活跃用户怎么理解?活跃用户的数据怎么看?
  11. 计算机心理测试题,心理测验丨测试你隐藏的懒人指数?
  12. 流量不清零跑得快风波,运营商到底在掩盖什么
  13. 机器学习建模工具PyCaret详讲
  14. SQL 注入漏洞(一)
  15. C/C++趣味编程经典100例详解
  16. 我的世界服务器如何修改天气,我的世界天气修改设置、天气关闭锁定、天气指令代码作弊码大全-66街机网...
  17. 嵌入式 新建基于固件库的MDK5工程模板
  18. 我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?
  19. 聚划算加码“百亿补贴”背后,不仅仅是为了下沉
  20. gohead 嵌入式服务器

热门文章

  1. 阿里旺旺自动回复工具开发一
  2. css内边距外边距和边框
  3. YAPI简单使用教程
  4. 玻色量子CEO文凯受邀出席首经贸金融学院系列讲座
  5. 【Photoshop实用教程】如何用魔术棒工具替换背景?
  6. 【gcc/g++】1.编译器, 编译过程和基本参数
  7. st-link v2怎么连接_固件升级:BOOX Nova\Note\Max2电纸书V2.1.1版固件发布
  8. 【Mac】使用Karabiner 映射输入法快捷键
  9. unigui点线动画连线
  10. 电子人的浪漫--致爱丽丝音乐盒