基于Hadoop分布式数据库HBase1.0部署及使用

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.安装配置


1

2

3

4

5

  # 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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

  # 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>


1

2

3

4

  # vi regionservers    

  HSlave0

  HSlave1

  HSlave2

  2. 配置系统变量


1

2

3

4

5

  # 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:


1

  # start-hbase.sh

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


1

  # hbase-daemon.sh start regionserver

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


1

2

3

4

5

6

  [root@HMaster0 ~]# jps

  2615 DFSZKFailoverController

  30027 ResourceManager

  29656 NameNode

  2841 HMaster

  8448 Jps

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


1

2

3

4

5

6

7

  [root@HSlave0 ~]# 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列


1

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

  5.2 查看表结构


1

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

  5.3 列出所有表


1

  hbase(main):025:0> list

  5.4 插入几条记录


1

2

3

4

5

6

  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 查看所有记录(全表扫描)


1

2

3

4

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 统计表中记录总数


1

2

3

4

  hbase(main):050:0> count 'tb1'

  2 row(s) in 0.0190 seconds

  

  => 2

  5.7 查看表中某条记录


1

2

3

4

5

6

  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 查看表中某行某列族中的所有数据


1

2

3

4

  hbase(main):055:0> get 'tb1','zhangsan','info'

  COLUMN                  CELL                                                             

   info:age               timestamp=1435129054098,value=man                                

   info:sex               timestamp=1435128714392,value=22

  5.9 更新一条记录(覆盖)


1

2

  hbase(main):063:0> put 'tb1','zhangsan','info:sex','23'

  0 row(s) in 0.0080 seconds

  6.0 给lisi增加一个comment字段


1

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

  6.1 删除某行某列族数据


1

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

  6.2 删除某行所有记录


1

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

  6.3 删除一个表


1

2

  hbase(main):072:0> disable 'tb1'  #先禁用

  hbase(main):073:0> drop 'tb1'   #再删除

时间: 2024-10-26 05:57:10

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

基于Hadoop的云计算与存储平台研究与实现

随着互联网技术的发展,数宇信息正在成指数增加,根据Internet Data Cente:发布的Digital Universe报告显示,在未来8年中所产生的数据量将达到40 ZB,相当于每人产生5200 G的数据,如何高效地计算和存储这些海量数据成为互联网企业所要而对的挑战.传统的大规模数据处理大多采用并行计算.网格计算.分布式高性能计算等,耗费昂贵的存储与 计算资源,而且对于大规模数据计算任务的有效分配和数据合理分割都需要复杂的编程才可以实现.基于Hadoop分布式云平台的出现成为解决此类问

基于Hadoop的广域测量系统数据处理

基于Hadoop的广域测量系统数据处理 曲朝阳: 朱莉: 张士林 为解决目前广域测量系统(WAMS)海量数据处理中存在的数据冗余.处理效率低等问题,设计并实现了一个基于Hadoop的WAMS数据处理云计算平台.首先,给出了平台的体系结构.其次,设计了基于Hadoop分布式文件系统(HDFS)存储的WAMS海量数据加载方法和利用MapReduce模型实现多个文件数据的并行抽取.转换和加载(ETL)操作流程.提出了结合MapReduce的MPApriori数据挖掘算法,用于高效地挖掘出连锁故障时各站

基于分布式数据库的存储和hadoop的分布式计算的分布式sql计算方法

    1.  目录 2.      目录... 1 3.      背景和设计思想... 3 4.      架构... 3 没有代理节点... 4 有代理节点... 4 模块说明... 5 两种架构的区别... 5 5.      应用架构... 5 6.      基本概念说明... 6 7.      增删改操作... 6 8.      查询操作... 7 阶段树... 7 阶段... 7 查询步骤... 8 9.      例子... 8 均衡策略... 8 查询... 10 9..

分布式数据库和Hadoop都不够好,于是我们设计了分布式SQL计算系统

设计思想 为了解决分布式数据库下,复杂的 SQL(如全局性的排序.分组.join.子查询,特别是非均衡字段的这些逻辑操作)难以实现的问题;在有了一些分布式数据库和 Hadoop 实际应用经验的基础上,对比两者的优点和不足,加上自己的一些提炼和思考, 设计了一套综合两者的系统,利用两者的优点, 补充两者的不足.具体的说, 使用数据库水平分割的思想实现数据存储,使用 MapReduce的思想实现 SQL 计算. 这里的数据库水平分割的意思是只分库不分表,对于不同数量级别的表,分库的数量可以不一样,例

分布式数据库和Hadoop都不够好,于是我们设计分布式SQL计算系统

设计思想 为了解决分布式数据库下,复杂的 SQL(如全局性的排序.分组.join.子查询,特别是非均衡字段的这些逻辑操作)难以实现的问题;在有了一些分布式数据库和 Hadoop 实际应用经验的基础上,对比两者的优点和不足,加上自己的一些提炼和思考, 设计了一套综合两者的系统,利用两者的优点, 补充两者的不足.具体的说,使用数据库水平分割的思想实现数据存储,使用 MapReduce的思想实现 SQL 计算. 这里的数据库水平分割的意思是只分库不分表,对于不同数量级别的表,分库的数量可以不一样,例如

基于Hadoop数据仓库Hive1.2部署及使用

接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别:   HBase是一种分布式.面向列的NoSQL数据库,基于HDFS存储,以表的形式存储数据,表由行和列组成,列划分到列族中.HBase不提供类SQL查询语言,要想像SQL这样查询数据,可以使用Phonix,让SQL查询转换成hbase的扫描和对应的操作,也可以使用现在说讲Hive仓库工具,让HBase作为Hive存储.   Hive是运行在H

基于Sql Server 2008的分布式数据库的实践(四)

原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create database V3 3.数据表设计 Win7 创建数据表student_7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 create table student_7 (     sid int not null,     sex nvarchar(1) not nul

基于Sql Server 2008的分布式数据库的实践(五)

原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ----------------------------------------------------------------------------------------------------------------- Index.php----选择界面,并且实现学生和老师的注册 sql_ini.php----SQL配置文件 ./student----学生的后台 ./admin----老师的后台 -------

基于Sql Server 2008的分布式数据库的实践(三)

原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.secure_connection,将Off改为On   3.找到com.allow_dcom = true,将前面的注释符号去掉 4.下载正确版本的 ntwdblib.dll (2000.80.194.0),覆盖Apache-20/bin/ntwdblib.dll.覆盖php-5.2.14-Win3