hbase是基于hadoop的hdfs框架做的分布式表格存储系统,所谓表格系统就是在k/v系统的基础上,对value部分支持column family和column,并支持多版本读写。

hbase的工作原理是保证系统中key全局有序存储,每个regionserver负责的某一个key range,并在regionserver中数据量过大的时候由master负责通知其分列成2个key range,并将其中一个key range交给其他regionserver维护,通过修改meta表生效从而达到了自动迁移,负载均衡。

一个核心的认识在于,任何一个key range的数据自身的可靠性依靠hdfs自身的多副本得到保证,对于hbase来说只需要关心一个key range当前由哪个regionserver读写,而key range的分裂实际上只是将1个存储文件分裂到hdfs上的2个文件,并通知其他的regionserver从hdfs上加载即可完成迁移。而regionserver的健康状况以及meta表存储在哪个regionserver均在zookeeper中记录,hbase发布版本自带了zookeeper,除非你想与其他服务共用zookeeper,否则不需要单独部署zk。

对于搭建hbase而言,首先必须保证hadoop分布式集群已经搭建成功,然后你也下载了hadoop兼容的hbase的二进制发布版本,这里我的hadoop是2.2版本,我选择了较稳定的hbase0.96版本,为了部署hbase你需要做下面的工作:

1,下载hbase二进制发布包,解压到hadoop的namenode节点上。

2,修改conf/hbase-site.xml:指定hbase连接到什么hdfs地址,指定hbase的数据存储目录tmp,指定hbase是分布式部署,指定内置zookeeper节点分别是什么,启动脚本会到对应机器上拉起zk,你应该了解zookeeper应该部署奇数个用于内部一致性选举,指定zookeeper的数据存储目录。

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://m1-reader-q1preonline07.m1.baidu.com:8010/hbase</value>
<description>The directory shared by RegionServers.
</description>
</property>
<property>
<name>hbase.tmpdir</name>
<value>/home/liangdong/hadoop/hbase/tmp</value>
<description></description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>m1-reader-q1preonline07.m1.baidu.com,m1-reader-q1preonline08.m1.baidu.com,m1-reader-q1preonline09.m1.baidu.com</value>
<description>Comma separated list of servers in the ZooKeeper Quorum.
For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
By default this is set to localhost for local and pseudo-distributed modes
of operation. For a fully-distributed setup, this should be set to a full
list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
this is the list of servers which we will start/stop ZooKeeper on.
</description>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/liangdong/hadoop/hbase/zookeeper</value>
<description>Property from ZooKeeper's config zoo.cfg.
The directory where the snapshot is stored.
</description>
</property>
</configuration>

3,修改conf/regionservers:也就是指定hbase集群在哪些节点上启动,节点个数可以随时扩容,hbase会自动分裂一些regionserver上的key range并由空闲节点加载参与服务,这里我把我hadoop的3个datanode的地址填进去了:

m1-reader-q1preonline08.m1.baidu.com
m1-reader-q1preonline09.m1.baidu.com
m1-reader-q1preonline10.m1.baidu.com

4,把整个hbase目录scp到regionservers里指定的节点上的相同路径下去,在此之前我搭建hadoop时应该已经建立了好信任关系。

5,为了hbase的进程能够跑起来,必须让java能找到hbase的jar包,所以我在所有部署hbase(包括regionserver和master)的节点上修改了.bashrc,令CLASSPATH包含了hbase的所有jar包,像这样:

HBASE_HOME=/home/liangdong/hadoop/hbase

CLASSPATH=${CLASSPATH}":"`find ${HBASE_HOME}/lib/*.jar | awk '{path=path":"$0}END{print path}'`

6,在master节点上调用bin/start-hbase.sh就可以启动所有的regionserver了,同时zookeeper和master进程均被拉起,你应该可以通过jps看到HMaster进程,它负责全局负载均衡,管理数据分裂与迁移,而HQuorumPeer就是内置的zk进程,HRegionServer就是管理实际的数据读写节点了。

7,部署成功后,你可以执行bin/hbase shell启动hbase命令行,输入status确认节点个数是否符合预期,之后就可以创建表格,读写数据了。

8,我没有在conf里指定各进程的服务地址,如果你需要做指定以及对hbase进行参数优化,可以参考官网的document,有一篇中文的里面有详细的调优指南等。

9,为了保障集群可用性,HMaster进程可以部署在多机上,同一时刻只有1个进程抢到Zookeeper注册并进行服务,其他节点均会观察ZK中的锁,一旦当前HMaster进程崩溃释放ZK锁,另外一个HMaster进程就会注册到ZK开始管理整个集群。 部署多个HMaster进程,只需要在hbase-site.xml里配置hbase.master这个选项,将机器HOST填写到其中即可,比如你希望B机器充当HMaster的一个冗余节点,那么你去B机器上把hbase-site.xml里添加上hbase.master,并将值写为B机器的Host,然后调用一下bin/habase master start就启动起来了,这个肯定是不能从主控机start-hbase.sh来弄的。

10,有任何搭建问题,可以在下面留言,谢谢。

【hbase0.96】基于hadoop搭建hbase的心得的更多相关文章

  1. 【大数据】基于Hadoop的HBase的安装(转)

    https://note.youdao.com/share/?id=c27485373a08517f7ad2e7ec901cd8d5&type=note#/ 安装前先确认HBse和Hadoop ...

  2. hbase0.96与hive0.12整合高可靠文档及问题总结

    本文链接:http://www.aboutyun.com/thread-7881-1-1.html 问题导读:1.hive安装是否需要安装mysql?2.hive是否分为客户端和服务器端?3.hive ...

  3. 基于HBase0.98.13搭建HBase HA分布式集群

    在hadoop2.6.0分布式集群上搭建hbase ha分布式集群.搭建hadoop2.6.0分布式集群,请参考“基于hadoop2.6.0搭建5个节点的分布式集群”.下面我们开始啦 1.规划 1.主 ...

  4. 基于centos6.5 hbase 集群搭建

    注意本章内容是在上一篇文章“基于centos6.5 hadoop 集群搭建”基础上创建的 1.上传hbase安装包 hbase-0.96.2-hadoop2 我的目录存放在/usr/hadoop/hb ...

  5. Centos搭建mysql/Hadoop/Hive/Hbase/Sqoop/Pig

    目录: 准备工作 Centos安装 mysql Centos安装Hadoop Centos安装hive JDBC远程连接Hive Hbase和hive整合 Centos安装Hbase 准备工作: 配置 ...

  6. 大数据环境完全分布式搭建hbase-0.96.2-hadoop2

    1.上传hbase安装包 2.解压 3.配置hbase集群,要修改3个文件 (首先zookeeper集群已经安装好了 并且启动 hadoop启动) 注意:要把hadoop的hdfs-site.xml和 ...

  7. hadoop(八) - hbase集群环境搭建

    1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /clo ...

  8. 基于Hadoop生态SparkStreaming的大数据实时流处理平台的搭建

    随着公司业务发展,对大数据的获取和实时处理的要求就会越来越高,日志处理.用户行为分析.场景业务分析等等,传统的写日志方式根本满足不了业务的实时处理需求,所以本人准备开始着手改造原系统中的数据处理方式, ...

  9. 基于Eclipse搭建Hadoop源码环境

    Hadoop使用ant+ivy组织工程,无法直接导入Eclipse中.本文将介绍如何基于Eclipse搭建Hadoop源码环境. 准备工作 本文使用的操作系统为CentOS.需要的软件版本:hadoo ...

随机推荐

  1. mac-改造你的terminal

    今天在知乎上看到了一篇关于<程序员如何优雅使用Mac>,里面介绍了不少Mac的高端使用技巧,其中关于terminal的部分更是深深的吸引了我,于是我也开始了我的terminal改造计划. ...

  2. [翻译] ORMLite document -- How to Use Part (二)

    前言 此文档翻译于第一次学习 ORMLite 框架,如果发现当中有什么不对的地方,请指正.若翻译与原文档出现任何的不相符,请以原文档为准.原则上建议学习原英文文档. ----------------- ...

  3. jQuery技巧

    回到顶部按钮 图片预加载 判断图片是否加载完 自动修补破损图像 Hover切换class类 禁用输入 停止正在加载的链接 toggle fade/slide 简单的手风琴 使两个DIV同等高度 在浏览 ...

  4. bzoj1009矩阵快速面+kmp

    其实kmp真的很次要,求长度为20的kmp感觉真的有点杀鸡用牛刀 这题思路相当明确:一看题就是数位dp,一看n的大小就是矩阵 矩阵的构造用m*m比较方便,本来想写1*m的矩阵乘m*m的,但是感觉想起来 ...

  5. knockoutjs扩展与使用

    原来考虑使用avalon2.0 经过一周的试验,能力不够,用不起来.最终使用了knockout-3.4.js <!DOCTYPE html> <html> <head&g ...

  6. c# Repeater中CommandArgument传多个参数

    <ItemTemplate>                    <div onmouseover="javascript:this.style.cursor='hand ...

  7. Python 爬虫1——爬虫简述

    Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...

  8. jquery常见获取高度

    jquery获取文档高度和窗口高度,$(document).height().$(window).height() $(document).height():整个网页的文档高度 $(window).h ...

  9. setView的AlertDialog在受到二次点击后出错

    错误报告: 10-21 13:11:16.009: E/AndroidRuntime(27937): FATAL EXCEPTION: main10-21 13:11:16.009: E/Androi ...

  10. Daily Scrum02 12.14

    大家已经被各种作业折磨得体无完肤了,但是大家还挤出时间完成每天的软件工作啊…… 坚持就是胜利! Member 任务进度 下一步工作 吴文会 调试QuerySetting类函数 调试QuerySetti ...