HBase1.0分布式NoSQL数据库部署及使用

基于上篇Hadoop2.6集群部署博文:http://lizhenliang.blog.51cto.com/7876557/1661354

接下来部署HBase1.0分布式NoSQL数据库,HBase中涉及到HMaster和HRegionServer两个概念。

(注:以下概念来着百度百科)

HMaster主要负责Table和Region管理工作:

1. 管理用户对Table的增、删、改、查操作

2. 管理HRegionServer的负载均衡,调整Region分布

3. 在Region Split后,负责新Region的分配

4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据。

HBase工作原理:

HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个ColumnFamily中,这样最高效。

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是SortedMemory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现WriteAhead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。

HBase高可用实现方式:

HBase同样分为Active和Standby,把数据存储在Zookeeper,可以启动两个或多个HMaster服务进程,第一个启动的做为HBase活动节点,其余的作为备用节点。如果一台故障,Zookeeper会选择出备用节点成为活动节点,让他接管故障的活动节点任务,保证总有一个Master运行。

二、HBase安装与配置(每台都要配置)

  1.安装配置

  # tar zxvf hbase-1.0.1.1-bin.tar.gz
  # mv hbase-1.0.1.1 /opt
  # vi hbase-env.sh
  export JAVA_HOME=/usr/local/jdk1.7
  export HBASE_MANAGES_ZK=false     #关闭通过内置Zookeeper管理HBase
  # vi hbase-site.xml
  <configuration>
       <!--HBase数据目录位置-->
   <property>
       <name>hbase.rootdir</name>
       <value>hdfs://hcluster/hbase</value>
   </property>
       <!--启用分布式集群-->
   <property>
       <name>hbase.cluster.distributed</name>
       <value>true</value>
   </property>
       <!--默认HMaster HTTP访问端口-->
   <property>
       <name>hbase.master.info.port</name>
       <value>16010</value>
    </property>
       <!--默认HRegionServer HTTP访问端口-->
    <property>
       <name>hbase.regionserver.info.port</name>
       <value>16030</value>
    </property>
       <!--不使用默认内置的,配置独立的ZK集群地址-->
   <property>
       <name>hbase.zookeeper.quorum</name>
       <value>HSlave0,HSlave1,HSlave2</value>
   </property>
  </configuration>
  # vi regionservers    
  HSlave0
  HSlave1
  HSlave2

  2. 配置系统变量

  # vi /etc/profile
  HBASE_HOME=/opt/hbase-1.0.1.1
  PATH=$PATH:$HBASE_HOME/bin
  export HBASE_HOME PATH
  # source /etc/profile

  3. 启动HBase

分别在HMaster0和HMaster1启动hmaster:

  # start-hbase.sh

分别在 HSlave0/1/2启动HRegionServer:

  # hbase-daemon.sh start regionserver

  4. 检查是否启动成功
  在主备节点查看有HMaster进程说明成功:

  [[email protected] ~]# jps
  2615 DFSZKFailoverController
  30027 ResourceManager
  29656 NameNode
  2841 HMaster
  8448 Jps

在RegionServer节点查看有HRegionServer进程说明成功:

  [[email protected] ~]# jps
  11391 NodeManager
  11213 DataNode
  11298 JournalNode
  10934 QuorumPeerMain
  12571 HRegionServer
  7005 Jps

通过访问WEB页面查看:

  5. hbase shell常用操作命令

根据下面tb1表的结构来演示hbase增删改查用法:

name info address
sex age
zhangsan 22 man beijing
lisi 23 woman   shanghai 

# hbase shell  #进入字符页面

5.1 创建表tb1,并有两个列族name、info和address,info列族下有sex和age列

  hbase(main):024:0> create ‘tb1‘,‘name‘,‘info‘,‘address‘

5.2 查看表结构

  hbase(main):025:0> describe ‘tb1‘

5.3 列出所有表

  hbase(main):025:0> list

5.4 插入几条记录

  hbase(main):028:0> put ‘tb1‘,‘zhangsan‘,‘info:sex‘,‘22‘
  hbase(main):039:0> put ‘tb1‘,‘zhangsan‘,‘info:age‘,‘man‘
  hbase(main):031:0> put ‘tb1‘,‘zhangsan‘,‘address‘,‘beijing‘
  hbase(main):046:0> put ‘tb1‘,‘lisi‘,‘info:age‘,‘woman‘
  hbase(main):047:0> put ‘tb1‘,‘lisi‘,‘info:sex‘,‘23‘
  hbase(main):048:0> put ‘tb1‘,‘lisi‘,‘address‘,‘shanghai‘

5.5 查看所有记录(全表扫描)

 hbase(main):040:0> scan ‘tb1‘
 ROW              COLUMN+CELL                                                       
 zhangsan                column=address:,timestamp=1435129009088,value=beijing                                              
 zhangsan        column=info:age,timestamp=1435129054098, value=man                                            
 zhangsan        column=info:sex,timestamp=1435128714392, value=22

  说明:

ROW:行,用来检索记录的主键。

COLUMN family:列族,是表的一部分,必须在创建表时定义,可以看到列名是以列族作为前缀,一个列族可以有多个列(column)。

CELL:存储单位,存储实际数据,也就是所看到的value,cell中没有数据类型,全部是字节码形式存储。

timestamp:时间戳,hbase写时自动赋值,为当前系统时间,精确到毫秒。如果每个cell保存同一份数据多个版本时,可通过时间戳来索引版本。

5.6 统计表中记录总数

  hbase(main):050:0> count ‘tb1‘
  2 row(s) in 0.0190 seconds
 
  => 2

5.7 查看表中某条记录

  hbase(main):054:0> get ‘tb1‘,‘zhangsan‘
  hbase(main):054:0> get ‘tb1‘,‘zhangsan‘
  COLUMN                  CELL                                                           
   address:               timestamp=1435129096397,value=beijing                            
   info:age               timestamp=1435129054098,value=man                                
   info:sex               timestamp=1435128714392,value=22

5.8 查看表中某行某列族中的所有数据

  hbase(main):055:0> get ‘tb1‘,‘zhangsan‘,‘info‘
  COLUMN                  CELL                                                             
   info:age               timestamp=1435129054098,value=man                                
   info:sex               timestamp=1435128714392,value=22

5.9 更新一条记录(覆盖)

  hbase(main):063:0> put ‘tb1‘,‘zhangsan‘,‘info:sex‘,‘23‘
  0 row(s) in 0.0080 seconds

6.0 给lisi增加一个comment字段

  hbase(main):070:0> incr ‘tb1‘,‘lisi‘,‘info:comment‘

6.1 删除某行某列族数据

  hbase(main):065:0> delete ‘tb1‘,‘zhangsan‘,‘info:sex‘

6.2 删除某行所有记录

  hbase(main):067:0> deleteall ‘tb1‘,‘zhangsan‘

6.3 删除一个表

  hbase(main):072:0> disable ‘tb1‘  #先禁用
  hbase(main):073:0> drop ‘tb1‘   #再删除
时间: 2024-10-17 11:40:53

HBase1.0分布式NoSQL数据库部署及使用的相关文章

《滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路》

滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路 余汶龙 阅读数:74342019 年 1 月 23 日 11:13 Fusion 是滴滴自研的分布式 NoSQL 数据库,完全兼容 Redis 协议,支持超大规模数据持久化和高性能读写.在滴滴内部支撑了数百个业务,具有 PB 级别的数据存储量,是使用最广泛的主存储服务之一.在支持滴滴业务高速发展过程中,积累了很多分布式存储领域的经验,孵化了离线到在线的高速数据导入方案.NewSQL 方案.跨机房同步等,一路解决了 Redis 容量限制

转:有事务处理的NoSQL数据库

原文来自于:http://www.infoq.com/cn/articles/MarkLogic-NoSQL-with-Transactions Java平台在其几乎整个生命周期中,都在煞费苦心地努力将数据库持久化功能无缝提供给开发人员.你是否已经尝试了早期的JDBC规范.EJB.O/R映射如Hibernate,或者最近的JPA规范,这一路上你不太可能没有遇到过关系型数据库.也许很可能你已经明白了面向对象建模与关系型数据库如何存储数据的区别(有时候开发人员称之为阻抗不匹配). 然而最近,NoSQ

详解NoSQL数据库使用实例

一.NoSQL基础知识 1.关于NoSQL 在"NoSQL"一词,实际上是一个叫Racker的同事创造的,当约翰埃文斯埃里克要组织一次活动来讨论开源的分布式数据库.这个名称和概念都由此而来. 有些人反对NoSQL术语,因为它听起来像我们定义自己是什么.在一定程度,但长期仍然是有价值的,因为当一个关系数据库是唯一的工具,你知道,每一个问题,看起来像一个大拇指. NoSQL是让人们知道有其他选择哪里.但我们并不反对关系数据库,因为当这确实是工作的最佳工具. 一个与NoSQL名称真正关注的是

具体解释NoSQL数据库使用实例

一.NoSQL基础知识 1.关于NoSQL 在"NoSQL"一词.实际上是一个叫Racker的同事创造的,当约翰埃文斯埃里克要组织一次活动来讨论开源的分布式数据库. 这个名称和概念都由此而来. 有些人反对NoSQL术语,由于它听起来像我们定义自己是什么.在一定程度,但长期仍然是有价值的.由于当一个关系数据库是唯一的工具,你知道,每个问题,看起来像一个大拇指. NoSQL是让人们知道有其它选择哪里.但我们并不反对关系数据库,由于当这确实是工作的最佳工具. 一个与NoSQL名称真正关注的是

开源Nosql数据库Cassandra3.0实战-集群部署与插件使用

简介 Cassandra是一套开源分布式NoSQL数据库系统,Cassandra的主要特点是无中心的设计,其分布式集群由一堆数据库节点共同构成一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取.对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了. 随着Nosql的火热,Hbase.Mongodb已然成了NoSQL数据库的代表,而Cassandra在国内的使用却不多(

NoSQL数据库的分布式模型

NoSQL数据库的分布式模型 单一服务器 在一个服务器完全能够胜任工作时就没必要考虑分布式,这样部署简单,维护也方便很多: 分片 特点 数据的各个部分存放在集群的不同服务器中: 比如按字母来划分:以a-g开头的键值都存放到第一台服务器上,以h-n开头的存放到第二台... 需要考虑的问题 如何存放数据,让用户基本上只需从一台服务器上获取数据 如果经常需要与多个结点交互才能取到需要数据,可能分片策略不合适,或者该场景中分片不是一个理想的方案: 数据节点的分布:地理位置与访问用户的关系 数据结点分布在

Hadoop1.0.4+Hbase0.94.2+Hive0.9.0 分布式部署安装

因为个人太懒,所以很多配图没有上传,完整的部署安装教程另外备份了.这里记录一下防止文档丢了   Hadoop1.0.4+Hbase0.94.2+Hive0.9.0 分布式部署安装 目录 1 服务器配置 2 Hadoop安装 3 Hbase安装 4 Hive安装 版本控制信息 版本 日期 拟稿和修改 说明 1.0 2012-11-27 Yoan.Liang 报文标准初稿(内部版本:1000) 1       服务器配置 1.1    下载安装JDK 1.2    修改NameNode与DataNo

java架构之数据库MongoDB4.0入门到实践掌握NoSQL数据库企业主流解决方案

java架构之数据库MongoDB4.0入门到实践掌握NoSQL数据库企业主流解决方案简介: MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 1.下载 从官网下载压缩包, 官网地址:https://www.mongodb.com/download-center/v2/community. 下载命令: ?

Sql Server Compact 4.0数据库部署安装

Sql Server Compact 4.0相比3.5版本增强了很多,支持Entity Framework 4.1,对于轻量级应用来讲,使用Sql Server Compact 4.0是个很好的选择,而且部署相当方便,不需要 Sql Server Compact 4.0的安装包,仅需要发布相关的dll以及web.config配置即可. 开发环境下,需要安装 vs2010 sp1 Microsoft SQL Server Compact 4.0 Visual Studio 2010 SP1 Too