hadoop高可用HDFS搭建(三节点)

一:准备工作

本次搭建使用的hadoop版本是2.6.5,使用虚拟机准备三个干净的节点服务器,我们从零开始搭建。规范下三个节点的主机名分别是node003,node004,node005。

1.1 搭建的节点角色分布图

其中node003和node004是NameNode角色,node003,node004,node005会作为DataNode角色,node003,node004,node005会作为zookeeper的集群环境。ZKFC(ZKFailoverController process:zookeeper故障转移进程),JNN(JournalNodes)实现主角色(NameNode)之间的切换时,配置数据同步进程

1.2 主机名配置以及hosts文件配置

#修改主机名所在的文件,修改里头的HOSTNAME的值即可
vi /etc/sysconfig/network
#在如下文件中,配置主机名和ip地址的对应关系,让各个节点之间能正常通信
vi /etc/hosts

1.3 jdk环境(使用jdk1.8)配置

jdk1.8下载地址(网盘资源)
链接:https://pan.baidu.com/s/1HUx1nfatgL0Ld0xPbqAy4w
提取码:d2us

#添加如下配置到/etc/profile中
#配置JAVAHOME路径。即下载的jdk源码包后解压的路径
export JAVA_HOME=/usr/local/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
#将JAVAHOME和JREHOME加入到环境变量中
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
#将配置完毕后的PATH路径导出
export PATH=$PATH:${JAVA_PATH}

1.4 将jdk的配置文件以及jdk的源码包分发到其他节点上

#做分发之前,需要切换到备份发文件所在的路径
#切换到jdk源码包所在的位置
cd /usr/local/java
#将源码包分发到node004节点上的当前路径,node005同理
scp jdk-8u171-linux-x64.tar.gz root@node004:`pwd`
#将修改好的profile文件分发到其他节点
scp profile root@node004:`pwd`

1.5 各个节点之间的免密登录配置(很重要)

产生.ssh路径
#切换到根路径下的.ssh路径,如果没有这个路径,先执行以下命令
ssh localhost
#提示输入密码,切换后,就会产生一个新的.ssh路径在/root下
#退出切换的会话
exit
生成公钥和私钥文件对
#执行如下命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
#生成一个id_dsa.pub文件,将这个文件的内容追加到authorized_keys文件中
#追加的目的是能让自己免密登录自己
cat id_dsa >> authorized_keys
#将公钥文件分发到其他节点上,需要先确定其他节点也有.ssh路径,没有需要通过ssh localhost的方式进行创建
#分发命令如下,分发后更改下名字
scp id_dsa.pub root@node004:`pwd`/node003_dsa.pub
scp id_dsa.pub root@node005:`pwd`/node003_dsa.pub
#分发后,在各自的节点上将node003_dsa.pub追加到自己的authorized_keys文件中,实现node003到node004以及node005的免密登录
#同理将node004生成的pub文件分发到node003以及node005上,实现node004到node003以及node005的免密登录,node005同理操作

免密登录配置以及jdk环境配置完毕后,接下来就是hadoop的相关配置了,准备工作到此完毕。

二:hadoop2.6.5的HDFS搭建

提供资源下载地址:
链接:https://pan.baidu.com/s/1AtjMGnL5hOCgehIpsUCxDg
提取码:z27x

注意:各个节点之间需要做时间同步

date -s 'yyyy-MM-dd HH:mm:ss'

2.1: 将hadoop源码包上传到节点服务器

解压压缩包,得到解压后的路径hadoop-2.6.5

#解压hadoop源码包
tar zxvf hadoop-2.6.5.tar.gz

2.2: 配置hadoop的环境变量以及hadoop中配置jdk的JAVA_HOME

hadoop中配置JAVA_HOME

#切换到hadoop的配置文件所在路径
cd /usr/local/java/hadoop-2.6.5/etc/hadoop
#编辑以下三个文件,分别找到export JAVA_HOME的位置,将相应的值替换成真实的路径即可
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh

profile中配置hadoop路径

#在/etc/profile中追加如下内容
export HADOOP_HOME=/usr/local/java/hadoop-2.6.5
export HADOOP_PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin
export PATH=$PATH:${HADOOP_PATH}

2.3: 配置高可用集群环境

hdfs-site.xml配置文件如下:

<configuration>#配置每个block块的副本数为2<property><name>dfs.replication</name><value>2</value></property>#配置SecondaryNameNode节点浏览器访问的地址以及端口号<property><name>dfs.namenode.secondary.http-address</name><value>node003:50090</value></property>#定义集群的服务名称mycluster<property><name>dfs.nameservices</name><value>mycluster</value></property>#配置该集群下的nameNode节点的别名nn1 nn2<property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property>#配置NameNode的nn1节点的内部通信地址+端口号<property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>node003:8020</value></property>#配置NameNode的nn2节点的内部通信地址+端口号<property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>node004:8020</value></property>#配置NameNode节点web端访问的地址和端口号<property><name>dfs.namenode.http-address.mycluster.nn1</name><value>node003:50070</value></property>#配置NameNode的nn2节点web端访问的地址和端口号<property><name>dfs.namenode.http-address.mycluster.nn2</name><value>node004:50070</value></property>#配置NameNode之间同步元数据的进程节点信息(JNN节点  JournalNodes)<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node003:8485;node004:8485;node005:8485/mycluster</value></property>#配置JournalNode角色的nameSpace的路径<property><name>dfs.journalnode.edits.dir</name><value>/var/mySelf/hadoop/ha/jn</value></property>#配置HDFS的客户端Clients和Actibe NameNode通信的代理类(一个Java Class)<property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>#配置当Standy By的NameNode需要成为主的时候,强制杀死另外一个NameNode<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_dsa</value></property>#配置开启自动故障转移<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
</configuration>

core-site.xml配置文件如下

<configuration>#在hdfs-site.xml中配置的集群名称<property><name>fs.defaultFS</name><value>hdfs://mycluster</value></property>#当前集群环境的元数据存储路径<property><name>hadoop.tmp.dir</name><value>/var/mySelf/hadoop/ha</value></property>#zookeeper集群地址,用来协调NameNode和JournalNode之间的交互<property><name>ha.zookeeper.quorum</name><value>node003:2181,node004:2181,node005:2181</value></property>
</configuration>

补充说明:

需要在如下路径中的文件加上dataNode的节点主机名信息。不然dataNode无法启动

cd /usr/local/java/hadoop-2.6.5/etc/hadoop
vi salves
#在这个文件中添加dataNode节点的主机名信息
node003 node004 node005

2.4 创建hadoop配置文件中指定的相应的路径

元数据的存储路径,在core-site.xml中定义的

mkdir -p /var/mySelf/hadoop/ha

JournalNode的nameSpace路径,在hdfs-site.xml中定义的

mkdir -p /var/mySelf/hadoop/ha/jn

2.5 分发hadoop集群的文件包到另外一个NameNode上,JournalNode的路径文件需要分发到三个JournalNode中

cd /usr/local/java
#将配置好的hadoop包分发到另一个NameNode节点上
scp -r hadoop-2.6.5 root@node004:`pwd`
#因为node005上要启动JournalNode,也需要有这个源码包以及JournalNode的nameSpace路径
scp -r hadoop-2.6.5 root@node005:`pwd`
#将NameNode元数据存储路径的文件夹分发到另一个NameNode节点上
cd /var/
scp -r /var/mySelf/ root@node004:`pwd`
#将JournalNode的地址分发到另外两个JournalNode节点服务器上,在hdfs-site.xml中有定义
cd /val/mySelf/
scp -r hadoop root@node004:`pwd`
scp -r hadoop root@node005:`pwd`

到此,hadoop高可用的环境准备就此完毕

三:Zookeeper集群环境搭建

在搭建Hadoop的HDFS环境中,必须会依赖zookeeper做协调。
下载地址:
参考上边的地址中,包含了hadoop的安装包以及zookeeper的安装包。

3.1 将安装包上传到服务器进行解压

tar zxvf zookeeper-3.4.6.tar.gz

得到解压后的路径 /usr/local/java/zookeeper-3.4.6,进入到解压后的zookeeper路径中

cd /usr/local/java/zookeeper-3.4.6
cd conf/
#修改配置文件名称
mv zoo_sample.cfg zoo.cfg

3.2 编辑配置文件zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/mySelf/zooKeeperDataDir
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
#配置集群环境2888是zookeeper选举leader和follower的时候的通信端口 3888是zookeeper服务器之间的通信端口
server.0=192.168.187.132:2888:3888
server.1=192.168.187.133:2888:3888
server.2=192.168.187.129:2888:3888

3.3 根据配置的dataDir的值创建相应的路径

#dataDir=/var/mySelf/zooKeeperDataDir
mkdir -p /var/mySelf/zooKeeperDataDir
echo 0 > myid

注意: echo 0 > myid 的时候,这个数字是0还是其他,取决于zoo.cfg中配置集群环境是server.编号值 server.0对应的服务器的myid的内容就是0 server.1对应的服务器的myid的内容就是1 这个值得大小决定服务器启动后,谁是主谁是从,值大的就是leader 否则就是follower

3.4 配置zookeeper的环境变量
编辑/etc/profile文件,追加如下内容

export ZOOKEEPER_HOME=/usr/local/java/zookeeper-3.4.6
export PATH=$PATH:${ZOOKEEPER_HOME}/bin

3.5 zookeeper安装包以及dataDir以及环境变量的文件分发到其他节点上

cd /usr/local/java/
scp -r zookeeper-3.4.6 root@node004:`pwd`
scp -r zookeeper-3.4.6 root@node005:`pwd`cd /etc/
scp profile zookeeper-3.4.6 root@node004:`pwd`
scp profile zookeeper-3.4.6 root@node005:`pwd`cd /var/mySelf/
scp -r zooKeeperDataDir root@node004:`pwd`
scp -r zooKeeperDataDir root@node004:`pwd`

3.6 更改其他两个节点的myid里头的值,根据zoo.cfg中配置的值进行设定,接着启动zookeeper集群

#启动命令
zkServer.sh start
#查看启动的状态
zkServer.sh status

四:hadoop集群启动

4.1: 启动JournalNode集群(JNN),一共三个节点

#三个节点分别启动
hadoop-daemon.sh start journalnode

4.2:格式化一个NameNode节点,并且同步另一个

#格式化NameNode,随便找一个节点执行:
hdfs namenode -format
#启动被格式化的那个NameNode节点的NameNode进程
hadoop-daemon.sh start namenode
#另一个NameNode进行同步操作
#在node004上操作
hdfs namenode -bootstrapStandby

4.3: 格式化ZKFC进程,并且启动hdfs集群

#格式化zkfc,在zookeeper中可见目录创建:
hdfs zkfc -formatZK
#格式化成功会提示:(ha.ActiveStandbyElector: Successfully created /hadoop-ha/mycluster in ZK.)#启动HDFS集群:
start-dfs.sh

五:MapReduce(计算框架)框架引入HDFS中

5.1: 在任意一个ResourceManager中修改如下配置文件
修改配置文件名称

mv mapred-site.xml.template  mapred-site.xml

修改文件内容

<configuration>#使用yarn来管理<property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

5.2: 配置yarn-site.xml

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>#开启高可用<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property>#定义ResourceManage集群的名称id<property><name>yarn.resourcemanager.cluster-id</name><value>cluster1</value></property>#配置ResourceManage下的节点id信息<property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property>#配置第一个节点<property><name>yarn.resourcemanager.hostname.rm1</name><value>node004</value></property>#配置第二个节点<property><name>yarn.resourcemanager.hostname.rm2</name><value>node005</value></property>#配置zookeeper集群<property><name>yarn.resourcemanager.zk-address</name><value>node003:2181,node004:2181,node005:2181</value></property>
</configuration>

hadoop高可用hdfs搭建(三节点)相关推荐

  1. Hadoop完全分布式环境搭建(三节点)

    一.实验机型及架构描述 二.基础环境配置 三.JDK-Hadoop环境配置 四.Hadoop配置文件修改 五.启动hadoop集群(均在adserver操作) 本篇引用文章地址: https://bl ...

  2. hadoop 查看节点主备装填_基于ZooKeeper搭建Hadoop高可用集群

    作者博客:https://blog.csdn.net/m0_37809146/ 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用 ...

  3. 搭建一个国内高可用的IPFS网关节点,低价打造去中心化无限存储节点

    前言 首先介绍一下IPFS(InterPlanetary File System)中文称为星际文件系统,是一个旨在实现文件的分布式存储.共享和持久化的网络传输协议. IPFS是WEB 3.0时代的基石 ...

  4. HA:HADOOP高可用机制

    课程大纲(HADOOP高可用机制) HA运作机制 什么是HA HADOOP如何实现HA HDFS-HA详解 HA集群搭建 目标: 掌握分布式系统中HA机制的思想 掌握HADOOP内置HA的运作机制 掌 ...

  5. CLOUD 04:zookeeper,kafka,hadoop高可用

    zookeeper 安装 1 禁用防火墙和 selinux 2 设置 /etc/hosts ip 主机名对应关系 3 安装 openjdk zookeeper 角色,选举 leader 集群主节点 f ...

  6. 美团点评基于MGR的CMDB高可用架构搭建之路【转】

    王志朋 美团点评DBA 曾在京东金融担任DBA,目前就职于美团点评,主要负责金融业务线数据库及基础组件数据库的运维. MySQL Group Replication(以下简称MGR),于5.7.17版 ...

  7. oVirt管理端高可用模式搭建(hosted-engine)

    oVirt管理端高可用模式搭建 oVirt是一个分布式虚拟化解决方案,旨在管理整个企业基础架构,oVirt使用受信任的KVM管理程序 操作系统版本:centos7.5 ovirt版本:ovirt4.2 ...

  8. 大数据-HADOOP高可用、联邦机制- 学习笔记 -BH4

    HADOOP高可用.联邦机制 正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 HA的运作机制 hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不中断服务),实 ...

  9. MHA+keepalive高可用环境搭建

    MHA+keepalive高可用环境搭建 2017年02月17日 14:05:57 阅读数:2582 MHA(Master HighAvailability)目前在MySQL高可用方面是一个相对成熟的 ...

最新文章

  1. 电商直播团队,管理好团队就成功了一半
  2. WINXP 提升速度
  3. php解析url编码,php对URL传参进行编码和解码解析
  4. 很久没写东西了,留个言。
  5. CSS裸奔节,一个被遗忘的前端节日!
  6. 我参与的一个项目的继续总结:经验篇
  7. 失物招领小程序_在机场丢了东西怎么办?温州机场失物招领在线办理平台暖心上线!...
  8. autojs遍历当前页面所有控件_解放双手,手机自动化神器AutoJS的使用
  9. Word2010编号、多级列表、样式、图注的综合设置
  10. 2009年25大最新网络游戏排行榜
  11. 左宗棠:大清朝最后一棵顶梁柱
  12. 场景图生成论文阅读笔记 之 LinkNet: Relational Embedding for Scene Graph
  13. WIN7 shutdown 定时/倒计时 命令关机
  14. 股权模板:72套股权分配方案
  15. OKK集中生产加工中心(MC)的主要部品
  16. 领导层必看:要想公司管理好,办公软件少不了
  17. [Machine Learning] 方向导数梯度(Directional Derivative Gradient)
  18. 物联网医疗来了:让患者获得一站式医疗服务
  19. Asp之Cookie篇—概述Cookie原理、归纳Cookie方法属性及应用
  20. VBA实现KMP和LCS算法

热门文章

  1. 微信小程序:实用多功能工具箱微信小程序源码
  2. 爬取人民日报评论版面文章
  3. PHP程序判断星座,php根据日期判断星座的函数分享
  4. 微信小程序学习(2)-云开发
  5. 【Dia】如何解决dia无法输入中文
  6. diamond之综合报不知名的错误
  7. (win7) 在IIS6.0 中配置项目
  8. matlab 铁路振动,基于MATLAB仿真的国产铁路移频信号分析
  9. 世界自闭症日 World Autism Awareness Day,请关爱自闭症儿童
  10. Singleton(单例模式)创建型