记录apache版本的hadoop和hbase的安装,并启用高可用模式。

1. 主机环境

我这里使用的操作系统是centos 6.5,安装在vmware上,共三台。

主机名 IP 操作系统 用户名 安装目录
node1 192.168.1.101 centos 6.5 wxyuan /opt/hadoop,/opt/hbase
node2 192.168.1.102 centos 6.5 wxyuan /opt/hadoop,/opt/hbase
node3 192.168.1.103 centos 6.5 wxyuan /opt/hadoop,/opt/hbase

2. 集群规划

node1 node2 node3
NameNode NameNode
DataNode DataNode DataNode
DFSZKFailoverController DFSZKFailoverController
ResourceManager ResourceManager
NodeManager NodeManager NodeManager
JournalNode JournalNode JournalNode
HMaster HMaster
HRegionServer HRegionServer HRegionServer
Zookeeper Zookeeper Zookeeper

hadoop、hbase、zookeeper和jdk的版本信息如下:

组件 版本号
JDK 1.7.079
Hadoop 2.6.0
HBase 1.1.3
Zookeeper 3.4.6

下载地址:

JDK: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

zookeeper: http://archive.apache.org/dist/zookeeper/

hadoop: https://archive.apache.org/dist/hadoop/core/

hbase: http://archive.apache.org/dist/hbase/

hadoop和bhase的高可用依赖于zookeeper,所以需要安装zookeeper集群.关于JDK和zookeeper的安装,这里不再叙述。

3. 配置SSH免密码登陆

高可用模式下,hadoop的故障切换需要通过ssh登陆到其它机器,进行主备切换,因此需要配置主机间的免密码登陆。配置方式可参考Linux配置ssh免密码登陆

4. 安装hadoop

我这里安装使用的是普通用户(非root安装),下载的版本是hadoop-2.6.0.tar.gz。

4.1 修改配置文件

(1). 上传hadoop-2.6.0.tar.gz到/opt/hadoop目录下;

(2). 解压tar -zxvf hadoop-2.6.0.tar.gz;

(3). 修改配置文件:core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,配置文件在/opt/hadoop/hadoop-2.6.0/etc/hadoop目录下;

修改core-site.xml,内容如下:

<configuration>
<!-- hdfs连接地址,集群模式(高可用) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster</value>
</property>
<!-- namenode,datanode数据存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop-2.6.0/tmp</value>
</property>
<!-- zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>

修改hdfs-site.xml,内容如下:

<configuration>

    <property>
<name>dfs.nameservices</name>
<value>cluster</value>
</property> <property>
<name>dfs.ha.namenodes.cluster</name>
<value>nn01,nn02</value>
</property>
<!-- nn01的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster.nn01</name>
<value>node1:9000</value>
</property>
<!-- nn01的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster.nn01</name>
<value>node1:50070</value>
</property>
<!-- nn02的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster.nn02</name>
<value>node2:9000</value>
</property>
<!-- nn02的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster.nn02</name>
<value>node2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/cluster</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/hadoop-2.6.0/journaldata</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,需要ssh免登陆,默认端口22 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence(hadoop:22022)</value>
</property>--> <!-- 如果使用ssh进行故障切换,ssh通信所需要的密钥存储位置。注意:密钥默认保存在当前用户家目录的.ssh目录下,请根据实际情况修改 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/wxyuan/.ssh/id_rsa</value>
</property> <!-- connect-timeout超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property> </configuration>

修改yarn-site.xml,内容如下:

<configuration>
<!-- 启用HA高可用性 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property> <!-- 指定resourcemanager的名字 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property> <!-- 配置2个resourcemanager -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property> <property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property> <property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property> <!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

修改mapred-site.xml(该文件不存在,需要手动创建),cp mapred-site.xml.template mapred-site.xml,内容如下:

<configuration>
<!-- 采用yarn作为mapreduce的资源调度框架 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

(4) 修改slaves文件vim slaves,内容如下:

node1
node2
node3

(5) 修改hadoop-env.sh文件,指定jdk的地址

# The java implementation to use.
export JAVA_HOME=/opt/java/jdk1.7.0_79

(6) 配置用户的环境变量,vim ~/.bash_profile,增加如下内容

# hadoop environment variables
export HADOOP_HOME=/opt/hadoop/hadoop-2.6.0
export PATH=$HADOOP_HOME/bin:$PATH

4.2 拷贝复制到其它机器

scp -r /opt/hadoop/hadoop-2.6.0 wxyuan@node2:/opt/hadoop
scp -r /opt/hadoop/hadoop-2.6.0 wxyuan@node3:/opt/hadoop

4.3 启动hadoop

启动hadoop前,需要执行几步格式化操作:

(1) 启动journalnode,三台机器都要这一步操作(仅第一次启动hadoop时,需要这一步操作,之后不再需要手动启动journalnode)

cd /opt/hadoop/hadoop-2.6.0/sbin
sh hadoop-daemon.sh start journalnode

(2) 在node1上执行格式化操作,格式化namenode和zkfc

hdfs namenode -format
hdfs zkfc -formatZK

(3) namenode主从信息同步:复制node1上的/opt/hadoop/hadoop-2.6.0/tmp目录到node2的/opt/hadoop/hadoop-2.6.0目录下,

scp -r /opt/hadoop/hadoop-2.6.0/tmp wxyuan@node2:/opt/hadoop/hadoop-2.6.0

上述步骤完成后,接下来我们就可以启动hadoop了,在node1机器上执行下面的命令,

# 启动hdfs
cd /opt/hadoop/hadoop-2.6.0/sbin
sh start-dfs.sh
# 启动yarn
sh start-yarn.sh

在node2机器上启动ResourceManager(备用主节点的ResourceManager需要手动启动)

cd /opt/hadoop/hadoop-2.6.0/sbin
sh yarn-daemon.sh start resourcemanager

在每台机器上,使用jps命令可查看启动的进程,这里以我的机器为例,查看相关进程

node1机器

[wxyuan@node1 sbin]$ jps
13245 NameNode
11922 DataNode
12228 DFSZKFailoverController
11654 QuorumPeerMain
12328 ResourceManager
12423 NodeManager
11439 JournalNode

node2机器

[wxyuan@node2 ~]$ jps
9025 NodeManager
8546 JournalNode
9183 ResourceManager
8472 QuorumPeerMain
8945 DFSZKFailoverController
8717 NameNode
8782 DataNode

node3机器

[wxyuan@node3 ~]$ jps
8464 QuorumPeerMain
8655 DataNode
8534 JournalNode
8789 NodeManager

4.4 web界面查看hadoop信息

(1) 浏览器访问 http://node1:50070



可以看到,当前节点node1处于active状态。

浏览器访问 http://node2:50070



可以看到,当前节点node2处于standby状态。

(2) 查看每个datanode的信息,http://node1:50075http://node2:50075http://node3:50075

(3) 查看yarn的web控制台,浏览器访问 http://node1:8088/cluster

4.5 测试高可用

(1) 在node1节点上执行jps命令,查看namenode进程的pid,使用kill命令杀死该进程,此时浏览器访问 http://node2:50070,可以看到状态已经变成active。

(2) 重新启动node1的namenode,sh start-dfs.sh,浏览器访问 http://node1:50070,可以看到此时状态已经变成standby。

注意:hadoop进程日志位于/opt/hadoop/hadoop-2.6.0/logs目录下。

5. 安装hbase

这里我下载的版本是hbase-1.1.3-bin.tar.gz

5.1 修改配置文件

(1). 上传hadoop-2.6.0.tar.gz到/opt/hbase目录下;

(2). 解压tar -zxvf hbase-1.1.3-bin.tar.gz;

(3). 修改配置文件:hbase-env.sh,hbase-site.xml,配置文件在/opt/hbase/hbase-1.1.3/conf目录下;

对于hbase-env.sh,需要修改的内容有三处:

//指定jdk目录
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/opt/java/jdk1.7.0_79 //指定pid文件目录
# The directory where pid files are stored. /tmp by default.
export HBASE_PID_DIR=/opt/hbase/hbase-1.1.3/pids //禁用HBase自带的Zookeeper,因为我们是使用独立的Zookeeper
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false

修改hbase-site.xml,内容如下:

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://cluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/opt/hbase/hbase-1.1.3/tmp/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/hbase-1.1.3/tmp/data</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
</configuration>

(4) 拷贝/opt/hadoop/hadoop-2.6.0/etc/hadoop目录下的core-site.xml和hdfs-site.xml文件到/opt/hbase/hbase-1.1.3/conf下,如果缺少这两个文件,启动hbase时会出现未知主机的异常,导致进程启动失败

(5) 修改regionservers文件

node1
node2
node3

(6) 新增backup-masters文件vim /opt/hbase/hbase-1.1.3/conf/backup-master,内容如下:

node2

(7) 配置用户的环境变量,vim ~/.bash_profile,增加如下内容:

# hbase environment variables
export HBASE_HOME=/opt/hbase/hbase-1.1.3
export PATH=$HBASE_HOME/bin:$PATH

5.2 拷贝复制到其它机器

scp -r /opt/hbase/hbase-1.1.3 wxyuan@node2:/opt/hbase
scp -r /opt/hbase/hbase-1.1.3 wxyuan@node3:/opt/hbase

5.3 启动hbase进程

cd /opt/hbase/hbase-1.1.3/bin
sh start-hbase.sh

使用jsp命令可查看hbase相关进程:HMaster、HRegionServer

5.4 登陆web界面查看hbase信息

(1) 浏览器访问http://node1:60010,可以看到node1是master



(2) 浏览器访问http://node2:60010

5.5 高可用测试

(1) 在node1节点上执行jps命令,查看HMaster进程的pid,使用kill命令杀死该进程,此时浏览器访问 http://node2:60010,可以看到node2变成了master。

(2) 重新启动node1的HMaster,sh start-hbase.shhttp://node1:60010

注意:hbase进程日志位于/opt/hbase/hbase-1.1.3/logs目录下。

关于hbase基本的shell命令,可参考HBase shell基本命令介绍

hadoop和hbase高可用模式部署的更多相关文章

  1. CentOS6下OpenLDAP+PhpLdapAdmin基本安装及主从/主主高可用模式部署记录

    下面测试的部署机ip地址为:192.168.10.2051)yum安装OpenLDAP [root@openldap-server ~]# yum install openldap openldap- ...

  2. MongoDB高可用模式部署

    首先准备机器,我这里是在公司云平台创建了三台DB server,ip分别是10.199.144.84,10.199.144.89,10.199.144.90. 分别安装mongodb最新稳定版本: w ...

  3. hbase高可用集群部署(cdh)

    一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...

  4. 大数据学习笔记——Hbase高可用+完全分布式完整部署教程

    Hbase高可用+完全分布式完整部署教程 本篇博客承接上一篇sqoop的部署教程,将会详细介绍完全分布式并且是高可用模式下的Hbase的部署流程,废话不多说,我们直接开始! 1. 安装准备 部署Hba ...

  5. Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)

    Nginx.LVS.HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能. 1)在四层(tcp)实现负载均衡的 ...

  6. LVS+Keepalived 高可用环境部署记录(主主和主从模式)

    之前的文章介绍了LVS负载均衡-基础知识梳理, 下面记录下LVS+Keepalived高可用环境部署梳理(主主和主从模式)的操作流程: 一.LVS+Keepalived主从热备的高可用环境部署 1)环 ...

  7. HBase高可用原理与实践

    前言 前段时间有套线上HBase出了点小问题,导致该套HBase集群服务停止了2个小时,从而造成使用该套HBase作为数据存储的应用也出现了服务异常.在排查问题之余,我们不禁也在思考,以后再出现类似的 ...

  8. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  9. openstack pike 集群高可用 安装 部署 目录汇总

    # openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...

随机推荐

  1. Typora markdown代码块显示序号

    打开偏好设置,找到代码块 打开显示行号 然后关闭Typora重新打开 此时代码块就有行号了

  2. 全网最通透的Java8版本特性讲解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  3. Linux kernel 模块 hello 测试

    原文链接:https://www.cnblogs.com/nerohwang/p/3621316.html hello.c 文件: #include <linux/kernel.h> /* ...

  4. 操作系统-存储管理(5)IA-32/Linux的地址转换

    IA-32/Linux按字节编址:在保护模式下,IA-32采用段页式虚拟存储管理方式,存储地址采用逻辑地址.线性地址和物理地址来进行描述. 逻辑地址由48位组成,包含16位段选择符(高13位为段表项的 ...

  5. Understanding dopamine and reinforcement learning: The dopamine reward prediction error hypothesis

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 在中脑多巴胺能神经元的研究中取得了许多最新进展.要了解这些进步以及它们之间的相互关系,需要对作为解释框架并指导正在进行的 ...

  6. python编程入门笔记

    一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局 ...

  7. 创建human用户登录数据库创建表

    根据人力资源管理系统中表的设计,创建human用户登录数据库创建 准备阶段 把运行脚本复制到D:\app\Administrator\product\11.2.0\dbhome_1\demo\sche ...

  8. 硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理

    前提 很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章.之前在分析扩展线程池实现可回调的Future时候曾经提到并发 ...

  9. 网站被K或者降权后应该如何恢复

    http://www.wocaoseo.com/thread-133-1-1.html     网站被K后应该如何恢复,深圳SEO和大家一起研究一下,其实这类的问题大家经常会遇到,而且这类的文章铺天盖 ...

  10. 557反转字符串中的单词III

    class Solution: # 定义一个反转字符串的函数. def str_rever(self,s): length = len(s) s1 = '' for index in range(le ...