hbase

HBase介绍

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应来源。

上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。

此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

HBase系统架构

 client说明:

HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC

 HMaster说明:

HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:

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

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

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

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

 HRegionServer说明

HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个 Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。 MemStore是Sorted Memory 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上。下图描述了Compaction和Split的过程:

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

hbase完全分布式部署:

环境准备:

 hadoop集群:s100(namenode),s101(datanode),s102(datanode),s103(datanode)

 hbase集群:s100(master),s101(regionserver),s102(regionserver),s103(regionserver)

 zk集群:s101,s102,s103

部署habase:

 在部署hbase前,先部署完hadoop和zk,因为hbase集群依赖hadoop和zk,这里hadoop和zk已经部署完成。直接部署hbase

root@s100:~# tar  xf  hbase-1.2.3-bin.tar.gz 
root@s100:~# mv  hbase-1.2.3  /soft/hbase
root@s100:/soft/hbase# rm  -rf  docs/
#修改hbase配置文件,只要修改hbase-site.xml即可,hbase-en.sh环境变量配置文件保持默认值即可,因为jdk,hadoop环境变量已经配置好了
root@s100:/soft/hbase/conf# vim   hbase-site.xml 
<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://s100:8020/hbase</value>
	</property>
	<property>
		<name>hbase.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.clientPort</name>
		<value>2181</value>
	</property>
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>s101,s102,s103</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/root/hbase/zk</value>
	</property>
</configuration>

  修改regionserver配置文件,来指定regionserver节点

root@s100:/soft/hbase/conf# vim  regionservers 
s101
s102
s103

  将hbase添加到环境变量中

root@s100:/soft# cat  /etc/environment 
JAVA_HOME=/soft/jdk
HADOOP_HOME=/soft/hadoop
HIVE_HOME=/soft/hive
HBASE_HOME=/soft/hbase
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/soft/jdk/bin:/soft/hadoop/bin:/soft/hadoop/sbin:/soft/hive/bin:/soft/hbase/bin"
root@s100:/soft# source  /etc/environment

  分发hbase到regionserver节点上,同时将环境变量配置文件也分发下去

#分发hbase
root@s100:/soft# scp  -r  hbase  s101:/soft/
root@s100:/soft# scp  -r  hbase  s102:/soft/
root@s100:/soft# scp  -r  hbase  s103:/soft/
#分发环境变量配置文件
root@s100:/soft# scp  /etc/environment   s101:/etc/
root@s100:/soft# scp  /etc/environment   s102:/etc/
root@s100:/soft# scp  /etc/environment   s103:/etc/

  在hbase(master)节点启动hbase

root@s100:~# start-hbase.sh 
#查看jps进程
root@s100:~# jps
23840 HMaster
24451 Jps
7050 ResourceManager
6781 NameNode
root@s101:~# jps
23040 Jps
7105 DataNode
7382 NodeManager
22614 HRegionServer
20367 QuorumPeerMain
root@s102:~# jps
5697 NodeManager
20802 Jps
20259 HRegionServer
18119 QuorumPeerMain
5420 DataNode
root@s103:~# jps
5440 DataNode
5717 NodeManager
19483 HRegionServer
17373 QuorumPeerMain
19855 Jps

  注意点:有时候在启动hbase后,master节点启动了,而regionserver节点却没有启动起来或者启动起来和master没有连接,这个问题主要是各个节点的系统时间不同步,同步下各个节点时间即可。

  通过hbase shell连接hbase,对hbase的数据库进程增删改查操作

root@s101:~# hbase shell
#通过help命令,查看hbase  shell使用方式
hbase(main):001:0> help
COMMAND GROUPS:
  Group name: general
  Commands: status, table_help, version, whoami

  Group name: ddl
  Commands: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters

  Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

  Group name: tools
  Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_rs, flush, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, trace, unassign, wal_roll, zk_dump

  Group name: replication
  Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs

  Group name: snapshots
  Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot

  Group name: configuration
  Commands: update_all_config, update_config

  Group name: quotas
  Commands: list_quotas, set_quota

  Group name: security
  Commands: grant, list_security_capabilities, revoke, user_permission

  Group name: procedures
  Commands: abort_procedure, list_procedures

  Group name: visibility labels
  Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility

 

  hbase的master的url登录方式:http://192.168.1.100:16010     regionserver的登录方式:http://192.168.1.101:16030

如何部署masterHA,在master节点失效了,其他的master可以启用来管理regionserver

 可以在hbase配置文件目录中创建一个backup-masters配置文件,在这个配置文件中添加需要作为备用master的节点

root@s100:~# stop-hbase.sh 
#添加s103节点作为备用的master
root@s100:/soft/hbase/conf# vim  backup-masters

s103
root@s100:~# start-hbase.sh 
#这样s103节点上就启动了Hmaster进程了
root@s103:~# jps
9425 HRegionServer
6385 QuorumPeerMain
4019 DataNode
4311 NodeManager
9690 HMaster

  

posted @ 2018-05-14 16:44  goser  阅读(177)  评论(0)    收藏  举报