一、 HBase的

二、基于Hadoop的HBase架构

HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper通过选举,保证任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。

一个RegionServer可以包含多个HRegion,每个HRegion维护一个HLog,和多个HFiles以及其对应的MemStore。RegionServer运行于DataNode上,数量可以与DatNode数量一致,请参考如下架构图:

四、HBase特征简要

4.1、自动故障处理和负载均衡

HBase运行在HDFS上,所以HBase中的数据以多副本形式存放,数据也服从分布式存放,数据的恢复也可以得到保障。另外,HMaster和RegionServer也是多副本的。

4.2、自动分区

HBase表是由分布在多个RegionServer中的region组成的,这些RegionServer又分布在不同的DataNode上,如果一个region增长到了一个阈值,为了负载均衡和减少IO,HBase可以自动或手动干预的将region切分为更小的region,也称之为subregion。

4.3、集成Hadoop/HDFS

虽然HBase也可以运行在其他的分布式文件系统之上,但是与HDFS结合非常之方便,而且HDFS也非常之流行。

4.4、实时随机大数据访问

HBase采用log-structured merge-tree作为内部数据存储架构,这种架构会周期性地将小文件合并成大文件以减少磁盘访问同时减少NameNode压力。

4.5、MapReduce

HBase内建支持MapReduce框架,更加方便快速,并行的处理数据。

4.6、Java API

HBase提供原声的Java API支持,方便开发。

4.7、横向扩展

HBase支持横向扩展,这就意味着如果现有服务器硬件性能出现瓶颈,不需要停掉现有集群提升硬件配置,而只需要在现有的正在运行的集群中添加新的机器节点即可,而且新的RegionServer一旦建立完毕,集群会开始重新调整。

4.8、列存储

HBase是面向列存储的,每个列都单独存储,所以在HBase中列是连续存储的,而行不是。

4.9、HBase Shell

HBase提供了交互式命令行工具可以进行创建表、添加数据、扫描数据、删除数据等操作和其他一些管理命令。

五、HBase在集群中的定位

HBase一种是作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBase在HDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。

六、HBase内部存储架构

HBase是由row key,column family,column和cell组成,row key确定唯一的一行,column family由若干column组成,column是表的字段,cell存储了实际的值或数据。

七、HBase与Hadoop

7.1、HDFS

* 为分布式存储提供文件系统

* 针对存储大尺寸的文件进行优化,不需要对HDFS上的文件进行随机读写

* 直接使用文件

* 数据模型不灵活

* 使用文件系统和处理框架

* 优化一次写入,多次读取的方式

7.2、HBase

* 提供表状的面向列的数据存储

* 针对表状数据的随机读写进行优化

* 使用key-value操作数据

* 提供灵活的数据模型

* 使用表状存储,支持MapReduce,依赖HDFS

* 优化了多次读,以及多次写

八、HBase的优缺点

8.1、优点

* 方便高效的压缩数据

* 支持快速数据检索

* 管理和配置简单,支持横向扩展,所以非常容易扩展

* 聚合查询性能非常高

* 可高效地进行分区,提供自动分区机制把大的region切分成小的subregion

8.2、缺点

* 对JOIN以及多表合并数据的查询性能不好

* 更新过程中有大量的写入和删除操作,需要频繁合并和分裂,降低存储效率

* 对关系模型支持不好,分区和索引模式设计比较困难。

九、HBase的环境角色

9.1、HMaster

9.1.1、功能描述

* 监控RegionServer

* 处理RegionServer故障转移

* 处理元数据的变更

* 处理region的分配或移除

* 在空闲时间进行数据的负载均衡

* 通过Zookeeper发布自己的位置给客户端

9.2、RegionServer

9.2.1、功能描述

* 负责存储HBase的实际数据

* 处理分配给它的Region

* 刷新缓存到HDFS

* 维护HLog

* 执行压缩

* 负责处理Region分片

9.2.2、内含组件

* Write-Ahead logs

HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。如果机器突然原地爆炸,把数据保存在内存中会引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

* HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

* Store

HFile存储在Store中,一个Store对应HBase表中的一个列族

* MemStore

顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。

* Region

Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region

9.3、Zookeeper

HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。

十、使用场景的探讨

10.1、何时使用

* 如果数据有很多列,且包含很多空字段

* 数据包含了不定数量的列

* 需要维护数据的版本

* 需要很高的横向扩展性

* 需要大量的压缩数据

* 需要大量的I/O

一般而言数百万行的数据和频率不高的读写操作,是不需要HBase的,如果有几十亿列数据,同时在单位时间内有数以千、万记的读写操作,可以考虑HBase。

10.2、何时不使用

* 数据总量不大时(比如就几个G)

* 当需要JOIN以及关系型数据库的一些特性时

* 如果关系型数据库可以满足需求

十一、HBase的安装与部署

11.1、Zookeeper集群的正常部署并启动

$ /opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/bin/zkServer.sh start

11.2、Hadoop集群的正常部署并启动(我的为高可用HA)

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/sbin/start-dfs.sh

$ /opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/sbin/start-yarn.sh

11.3、上传(hbase-0.98.6-cdh5.3.6.tar.gz)并解压HBase

tar -zxvf hbase-0.98.6-cdh5.3.6.tar.gz -C /opt/module/

11.4进入配置文件目录( cd /opt/module/hbase-0.98.6-cdh5.3.6/conf/)

11.5删除cmd文件 (   rm -rf *.cmd   )

11.6修改hbase-env.sh  (vim hbase-env.sh )

11.7修改hbase-site.xml  (  vim hbase-site.xml   ),在<configuration>中添加

<configuration>
<!--设置hbase节点位置 如果为高可用,则为高可用的名称例:hdfs://mycluster/hbase
如果是单节点,应该写成具体的哪台机器例:hdfs://hadoop201:80e
-->
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://mycluster/hbase</value>
</property>
<!-- 是否运行在分布式上面 -->
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property> <!-- 指定master节点 ,两种方式
1.只写端口号,表示可能用于高可用 例:60000
2.配置绝对的路径例:hadoop201:60000
-->
<property>
  <name>hbase.master</name>
  <value>60000</value>
</property> <!-- -->
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop201:2181,hadoop202:2181,hadoop203:2181</value>
</property> <!-- 配置zookeeper的dataDir路径(会自动创建) -->
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/opt/module/zookeeper-3.4.5-cdh5.3.6/data/zkData</value>
</property> </configuration>

11.8regionservers  (    vim regionservers    )

hadoop201
hadoop202
hadoop203

11.9替换HBase根目录下的lib目录下的与自己使用的版本不同的jar包为自己使用的jar包,以解决兼容问题

cd /opt/module/hbase-0.98.6-cdh5.3.6/lib/
rm -rf hadoop-*
如果zookeeper与使用的不同也需要删除替换,这里我的一样就不替换了()

涉及的jar包大约有

hadoop-annotations-2.5.0.jar
hadoop-auth-2.5.0-cdh5.3.6.jar
hadoop-client-2.5.0-cdh5.3.6.jar
hadoop-common-2.5.0-cdh5.3.6.jar
hadoop-hdfs-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-app-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-common-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-core-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-hs-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-hs-plugins-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-jobclient-2.5.0-cdh5.3.6.jar
hadoop-mapreduce-client-jobclient-2.5.0-cdh5.3.6-tests.jar
hadoop-mapreduce-client-shuffle-2.5.0-cdh5.3.6.jar
hadoop-yarn-api-2.5.0-cdh5.3.6.jar
hadoop-yarn-applications-distributedshell-2.5.0-cdh5.3.6.jar
hadoop-yarn-applications-unmanaged-am-launcher-2.5.0-cdh5.3.6.jar
hadoop-yarn-client-2.5.0-cdh5.3.6.jar
hadoop-yarn-common-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-applicationhistoryservice-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-common-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-nodemanager-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-resourcemanager-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-tests-2.5.0-cdh5.3.6.jar
hadoop-yarn-server-web-proxy-2.5.0-cdh5.3.6.jar
zookeeper-3.4.5-cdh5.3.6.jar

可以通过find命令快速进行定位,例如

cd /opt/module/hadoop-2.5.0-cdh5.3.6/
find -name hadoop-hdfs-2.5.0-cdh5.3.6.jar

然后将找到的jar包复制到hbase的lib目录下

注:这里有我整理好的此版本的jar包放在(CDH_HadoopJar.tar.gz) (cp -a /opt/software/HadoopJar/* /opt/module/hbase-0.98.6-cdh5.3.6/lib/)

11.10将整理好的HBase安装目录scp到其他机器节点

cd /opt/module/
scp -r hbase-0.98.6-cdh5.3.6/ hadoop202:/opt/module/
scp -r hbase-0.98.6-cdh5.3.6/ hadoop203:/opt/module/

11.11将Hadoop配置文件软连接到HBase的conf目录下

* core-site.xml
$ ln -s /opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop/core-site.xml /opt/module/hbase-0.98.6-cdh5.3.6/conf/core-site.xml
* hdfs-site.xml
$ ln -s /opt/module/hadoop-2.5.0-cdh5.3.6/etc/hadoop/hdfs-site.xml /opt/module/hbase-0.98.6-cdh5.3.6/conf/hdfs-site.xml
(尖叫提示:不要忘记其他几台机器也要做此操作)

11.12启动服务

$ bin/hbase-daemon.sh start master
$ bin/hbase-daemon.sh start regionserver
或者:
$ bin/start-hbase.sh
对应的停止命令:
$ bin/stop-hbase.sh

11.13查看页面

启动成功后,可以通过主机名:60010地址来访问HBase的管理页面
例如,http://hadoop201:60010

十二、HBase常用操作

12.1、进入HBase客户端命令操作界面

  $ bin/hbase shell

12.2、查看帮助命令

  hbase(main):001:0> help

12.3、查看当前数据库中有哪些表

  hbase(main):002:0> list

12.4、创建一张表(  create '表名','列祖名'  )

  hbase(main):003:0>  create 'student','info'

12.5、向表中存储一些数据( put '表名','ROWKEY','列族名:列名','值' )

  hbase(main):004:0> put 'student','1001','info:name','Thomas'

  hbase(main):005:0> put 'student','1001','info:sex','male'

  hbase(main):006:0> put 'student','1001','info:age','18'

12.6、扫描查看存储的数据

  hbase(main):007:0> scan 'student'

(表名+RowKey+列族+列+(时间戳)+值)

或:查看某个rowkey范围内的数据

hbase(main):014:0> scan 'student',{STARTROW => '1001',STOPROW => '1007'}

12.7查看表结构

  hbase(main):009:0> describe 'student'

12.8更新指定字段的数据

  hbase(main):009:0> put 'student','1001','info:name','Nick'

  hbase(main):010:0> put 'student','1001','info:age','100'

12.9查看指定行的数据

  hbase(main):012:0> get 'student','1001'

  或:查看指定行指定列或列族的数据

  hbase(main):013:0> get 'student','1001','info:name'

12.10删除数据

  12.10.1删除某一个rowKey全部的数据

    hbase(main):015:0> deleteall 'student','1001'

  12.10.2删除掉某个rowKey中某一列的数据

    hbase(main):016:0> delete 'student','1001','info:sex'

12.11清空表数据

  hbase(main):017:0> truncate 'student'

12.12删除表

  首先需要先让该表为disable状态,使用命令:

    hbase(main):018:0> disable 'student'

  然后才能drop这个表,使用命令:

    hbase(main):019:0> drop 'student'

  (尖叫提示:如果直接drop表,会报错:Drop the named table. Table must first be disabled)

12.13统计一张表有多少行数据

  hbase(main):020:0> count 'student'

十三、HMaster的高可用

13.1、确保HBase集群已正常停止

  $ bin/stop-hbase.sh

13.2、在conf目录下创建backup-masters文件

  $ touch conf/backup-masters

13.3、在backup-masters文件中配置高可用HMaster节点

  $ echo hadoop202 > conf/backup-masters

13.4、将整个conf目录scp到其他节点

  $ scp -r conf/ hadoop202:/opt/module/hbase-0.98.6-cdh5.3.6/

  $ scp -r conf/ hadoop203:/opt/module/hbase-0.98.6-cdh5.3.6/

13.5、打开页面测试

http://hadoop201:60010

  最后,可以尝试关闭第一台机器的HMaster:

  $ bin/hbase-daemon.sh stop master

  然后查看第二台的HMaster是否会直接启用

Hbase简单配置与使用的更多相关文章

  1. HBase + Kerberos 配置示例(二)

    接上篇<HBase + Kerberos配置示例(一)>,我们继续剩下的配置工作. 环境准备 Hadoop配置 Zookeeper配置 HBase配置 Java测试程序 环境准备 安装ha ...

  2. hbase安装配置(整合到hadoop)

    hbase安装配置(整合到hadoop) 如果想详细了解hbase的安装:http://abloz.com/hbase/book.html 和官网http://hbase.apache.org/ 1. ...

  3. Phoenix(sql on hbase)简单介绍

    Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...

  4. 企业级hbase HA配置

    1 HBase介绍HBase是一个分布式的.面向列的开源数据库,就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类 ...

  5. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

  6. 以实际的WebGIS例子探讨Nginx的简单配置

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...

  7. CentOS 7.0 使用 yum 安装 MariaDB 与 MariaDB 的简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB,两条命令都可以 systemctl sta ...

  8. ssm简单配置

    MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架. MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获. MyBatis 只使用简单的XML 和注解来配置和映射 ...

  9. 安装MariaDB和简单配置

    1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...

随机推荐

  1. Trinity的分步运行

    当使用Trinity组装时,如果数据量过大,可以考虑使用--min_kmer_cov 2参数丢弃uniquely occurring kmer, 从而降低内存消耗 设置--no_distributed ...

  2. MySQL 组提交(group commit)

    目录 前言 改进 原理 实现 参数 注意 前言 操作系统使用页面缓存来填补内存和磁盘访问的差距 对磁盘文件的写入会先写入道页面缓存中 由操作系统来决定何时将修改过的脏页刷新到磁盘 确保修改已经持久化到 ...

  3. C# 使用PrintDocument类打印标签

    最近做了一个项目,使用不干胶标签贴在RFID抗金属标签上,那么就会出现标签打印的问题,该如何打印呢?后来经过网上冲浪发现,其实打印标签和打印A4纸的方法一样,只不过就是布局.设置纸张大小的问题. 本文 ...

  4. PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工 ...

  5. BF算法(模式匹配)

    BF算法 (Brute-Force算法) 一种简单的模式匹配算法,目的是寻找模式串p是否在目标串s中有出现. 思想:先从第一个字符开始匹配,如果p[j]==s[i],那么继续向下比较,一旦不相等,即回 ...

  6. walle多渠道打包+Tinker(bugly)热更新集成+360加固(乐固)

    这三个东东是干啥的相信大家都有所耳闻了,如果你没有听说过,请出门左拐,百度一下你就知道.这里不对这三个东东具体的集成方式做详细的介绍,因为官方文档已经写的很详细了,主要是对同时使用这三个东东时所需要注 ...

  7. Java集合类常见面试知识点总结

    微信公众号[Java技术江湖]一位阿里Java工程师的技术小站 Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java ...

  8. git第十节--git hub

    github 是一个开源的协作社区 github 插件octtree 为别人的仓库做贡献 fork 别人仓库内容到自己的个人仓库 git clone 到本地进行开发push 到个人仓库 提PR(pul ...

  9. spring的第二天

    spring的第二天 ssm框架 spring  在昨天简单的介绍了一下spring,那么今天接着继续介绍. spring值的注入 自动装配[autowire] 引用资源 applicationCon ...

  10. Python 判断文件/目录是否存在

    使用 os 模块 判断文件是否存在 os.path.isfile(path) 判断目录是否存在 os.path.isdir(path) 判断路径是否存在 # 使用 path 模块 os.path.ex ...