文档章节

CentOS6.5 hadoop2.4.0 HA 集群自动切换模式安装教程

东方神剑
 东方神剑
发布于 2014/11/05 13:37
字数 2187
阅读 148
收藏 1

    Hadoop 中的NameNode 好比是人的心脏,非常重要,绝对不可以停止工作。在hadoop1 时代,只有一个NameNode。如果该NameNode 数据丢失或者不能工作,那么整个集群就不能恢复了。这是hadoop1 中的单点问题,也是hadoop1 不可靠的表现。hadoop2 就解决了这个问题。

    hadoop2.2.0 中HDFS 的高可靠指的是可以同时启动2 个NameNode。其中一个处于工作状态,另一个处于随时待命状态。这样,当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动切换到另一个NameNode 提供服务。这些NameNode 之间通过共享数据,保证数据的状态一致。多个NameNode 之间共享数据,可以通过Nnetwork File System 或者Quorum Journal Node。前者是通过linux 共享的文件系统,属于操作系统的配置;后者是hadoop 自身的东西,属于软件的配置。我们这里讲述使用Quorum Journal Node 的配置方式,方式是自动切换。

    集群启动时,可以同时启动2 个NameNode。这些NameNode 只有一个是active 的,另一个属于standby 状态。active 状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务。

架构
    
在一个典型的HA 集群中,每个NameNode 是一台独立的服务器。在任一时刻,只有一个NameNode 处于active 状态,另一个处于standby 状态。其中,active 状态的NameNode 负责所有的客户端操作,standby 状态的NameNode 处于从属地位,维护着数据状态,随时准备切换。

    两个NameNode 为了数据同步,会通过一组称作JournalNodes 的独立进程进行相互通信。当active 状态的NameNode 的命名空间有任何修改时,会告知大部分的JournalNodes 进程。standby 状态的NameNode 有能力读取JNs 中的变更信息,并且一直监控edit log 的变化,把变化应用于自己的命名空间。standby 可以确保在集群出错时,命名空间状态已经完全同步了。

    

    为了确保快速切换,standby 状态的NameNode 有必要知道集群中所有数据块的位置。为了做到这点,所有的datanodes 必须配置两个NameNode 的地址,发送数据块位置信息和心跳给他们两个。

    对于HA 集群而言,确保同一时刻只有一NameNode 处于active 状态是至关重要的。否则,两个NameNode 的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs 必须确保同一时刻只有一个NameNode 可以向自己写数据。    

 

在学校服务器上配置了十台虚拟机,具体配置如下:

 

    所用的软件: hadoop-2.4.0.tar.gz jdk-8u5-linux-i586.tar.gz、zookeeper-3.4.5.tar.gz hbase-0.16.2.hadoop2-bin.tar.gz
                        eclipse-standard-luna-R-linux-gtk.tar.gz 、hadoop-eclipse-plugin-2.4.0.jar

    虚拟机系统采用CentOS6.5 32 位操作系统。虚拟机的安装,主机名,网络IP 地址等的设置,以及SSH 的安装、jdk 的安装
详见细细品味教程即可。
    所有配置目录均在/usr 目录下,比如:/usr/java /usr/hadoop /usr/zookeeper/usr/hbase
    第一步骤:jdk 的安装补充。

    按照细细品味教程进行jdk 的解压,环境变量的配置后,需要修改默认的jdk 版本,我们需要把自己安装的jdk 设置为默认的jdk 版本,具体代码如下:

    上图在输入updata-alternatives --config java 指令后,正常情况下会出现3 个可选项,上图由于第一次配置失误出现/usr/java/jdk1.8.0_05/lib/java,而我们要选择的是.../bin/java,因此输入4,自己按照自己的实际情况输入数字即可。当输入java-version 指令后出现最后3 行形式时说明配置成功。其他结点也是一样。

    第二步骤:zookeeper 的配置。(奇数个节点)
    将下载的软件拷入到/usr 目录下,如从桌面下复制,命令如下:(root 权限下)
    cp /home/hadoop/桌面/zookeeper-3.4.5.tar.gz /usr
    进入/usr 目录下,解压压缩包,重命名文件名,删除软件包:
    cd /usr
    tar -zxvf zookeeper-3.4.5.tar.gz
    mv zookeeper-3.4.5 zookeeper
    rm -rf zookeeper-3.4.5.tar.gz
    修改文件所有者及用户组权限:(root 权限)

    chown -R hadoop:hadoop zookeeper

    注:以下hadoop 以及hbase 的解压过程如上,只需要修改文件名即可,下面不再重复。
    配置环境变量:(root 权限下)

    vim /etc/profile

    

 

    source /etc/profile 使之生效,root 和普通用户权限下均要执行。
    注:所有环境变量的设置均在此设置,设置完成后使之生效,下面涉及此文件的操作只给出配置内容,步骤不再重复。
    配置zookeeper-3.4.5/conf/zoo.cfg 文件, 这个文件本身是没有的, 有个zoo_sample.cfg 模板
    cd /usr/zookeeper/conf 进入conf 目录
    cp zoo_sample.cfg zoo.cfg 拷贝模板
    vim zoo.cfg

    把zookeeper 集群的IP 地址以及端口号添加进来,按照自己的实际配置情况进行配置。
    创建dataDir 参数指定的目录,创建data 文件夹,在这个文件夹下,还要创建一个文本myid
    cd /usr/zookeeper
    mkdir data 创建data
    cd /usr/zookeepe/data 进入data 文件夹下
    vim myid 创建文本myid , 在这个文本内写入1 , 因为
    server.1=192.168.2.10:2888:3888 server 指定的是1,192.168.2.15 下面的myid 是2,192.168.2.12 下面myid 是3,192.168.2.13 下面myid 是4,192.168.2.14 下面myid
是5,这些都是根据server 来的。

    通过scp -r /usr/zookeeper root@192.168.2.X:/usr 给其他节点复制过去,并进行环境变量设置,以及按照上面说的myid 号修改自身的id 号。启动zookeeper,在hadoop 启动之前启动启动命令为:zkServer.sh start 记住是每个配置zookeeper 的节点都需要执行该命令。
    执行完启动命令,可执行zkServer.sh status,也是每个节点单独执行,查看选举结果,正常情况下有一个节点是leader,其余为follower

    第三步骤,安装hadoop,每个节点都需要安装。
    同样也需要解压等一系列准备工作,这里不再重复讲解,只给出具体配置文件配置过程。
    配置之前需要新建几个文件夹:
    ~/dfs/name
    ~/dfs/data
    ~/tmp/journal

    涉及的配置文件有7 个,分别是/usr/hadoop/etc/hadoop 文件夹下的hadoop-env.sh、yarn-env.sh、slaves core-site.xml、 hdfs-site.xml、 mapred-site.xml 、yarn-site.xml其中mapred-site.xml 不存在
    cd /usr/hadoop/etc/hadoop 进入到hadoop 配置文件的目录中
    cp mapred-site.xml.template mapred-site.xml 复制相应的模板文件

配置hadoop-env.sh

配置yarn-env.sh

 

配置slaves,写入从节点信息

配置core-site.xml

配置hdfs-site.xml

 

        注:上图中第九行   “ty>”由于截图时格式乱了,不过大家应该看得出来应该是</property>,都是成对出现的。

配置mapred-site.xml

配置yarn-site.xml

    配置/etc/profile 文件环境变量:

 

    此处只需设置hadoop path 即可。别忘source /etc/profile 使之生效。通过scp 命令复制给其他节点,此处不再重复,复制结束后检查一下是否文件的用户组都是hadoop:hadoop 形式,如若不是需要用chown -R hadoop:hadoop 文件名       进行修改。

启动hadoop
    0、首先把各个zookeeper 起来,如果zookeeper 集群还没有启动的话。
    zkServer.sh start 记住每台机子都要启动
    1、然后在某一个namenode 节点执行如下命令,创建命名空间
    hdfs zkfc -formatZK
    2、在每个节点用如下命令启日志程序
    hadoop-daemon.sh start journalnode
    3 、在主namenode 节点用./bin/hadoopnamenode -format 格式化namenode 和journalnode 目录
    hadoop namenode -format mycluster
    4、在主namenode 节点启动./sbin/hadoop-daemon.shstart namenode 进程
    hadoop-daemon.sh start namenode
    5、在备节点执行第一行命令,这个是把备namenode 节点的目录格式化并把元数据从主namenode 节点copy 过来,并且这个命令不会把journalnode 目录再格式化了!然后用第二个命令启动备namenode 进程!
    hdfs namenode –bootstrapStandby
    hadoop-daemon.sh start namenode
    6、在两个namenode 节点都执行以下命令
    hadoop-daemon.sh start zkfc
    7、在所有datanode 节点都执行以下命令启动datanode
    hadoop-daemon.sh start datanode

     以后执行时,可以按照上述步骤进行,也可以在zookeeper 启动后通过start-all.sh全部启动。

    所有节点都按照文章一开始表格内容打开浏览器浏览如下:

 

         安装成功,可以关掉active状态的namenode,通过浏览器观察两个namenode间状态的切换。

        我也是刚入门的小菜鸟,如安装教程与错误之处,还望高手不吝赐教。

© 著作权归作者所有

共有 人打赏支持
东方神剑

东方神剑

粉丝 64
博文 126
码字总数 93166
作品 0
朝阳
程序员
MySQL共享存储主备模式利用Keepalived实现双机高可用

简单介绍 先简单说下MySQL主从复制与keepalived模式和MySQL共享存储与Keepalived模式 MySQL共享存储主备模式不同于MySQL主主复制模式,MySQL主主是利用MySQL自带的replication复制技术实现两...

HMLinux
2017/01/22
0
0
Hadoop安装过程中的HA切换不成功的坑

在hadoop安装配置过程中,有很多同学按照网上教程配置完成,并启动HA即两台NameNode后,看到其中一台服务器是active,另一台则是standby模式,而且文件也可以正常写入到hdfs中,但是并没有去...

hotbigdata
04/20
0
0
Spark2.0.0集群部署教程

1.引言 在前面的博客中介绍了Spark的伪分布安装,在本篇博客中将介绍一下Spark的集群部署,在本博客中Spark的调度采用Hadoop的Yarn平台,因此在安装Spark之前,需要先部署Hadoop的集群,因为...

Liri
2017/12/16
0
0
HBase1.2.6集群部署教程

1.引言 在前面的博客中我们介绍HBase的伪分布安装,在本篇博客中就主要介绍一下HBase的集群部署,由于HBase是一款Hadoop之上的NoSQL数据库,因此我们在安装HBase之前需要首先部署Hadoop的集群...

Liri
2017/12/16
0
0
RabbitMQ(3)-单机与集群搭建

一.windows下搭建单机RabbitMQ RabbitMQ依赖于ErLang(面向并发的编程语言) 1.ErLang for windows 64 bit 下载最新版Erlanghttp://www.erlang.org/download.html,然后安装,设置环境变量 ...

你我他有个梦
2015/12/20
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
1
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
6
0
在Ubuntu安装和配置Sphinx

Ubuntu系统默认是配置有sphinx的,先检查一下,别多此一举。。。。。 在开始本指南之前,您需要: 一个Ubuntu 16.04服务器。 sudo的一个非root用户,您可以通过以下设置本教程 。 安装在服务...

阿锋zxf
今天
1
0
Qt编写输入法V2018超级终结版

对于qt嵌入式linux开发人员来说,输入法一直是个鸡肋问题,要么不支持实体键盘同步,要么不能汉字输入,要么不支持网页输入等,这几年通过陆续接触大量的各种输入法应用场景客户,得到真实需...

飞扬青云
今天
2
0
TypeScript基础入门之高级类型的多态的 this类型

转发 TypeScript基础入门之高级类型的多态的 this类型 高级类型 多态的this类型 多态的this类型表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的...

durban
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部