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
浙公网安备 33010602011771号