大数据学习笔记之HBase(四):HBase高级、HBase案例,
文章目录
- 三十、HBase节点的管理
- 30.1、服役(commissioning)
- 30.2、退役(decommissioning)
- 方式一:
- 方式二(推荐)
- 三十一、集群失效的可能性
- 30.1、磁盘
- 30.2、操作系统
- 30.3、网络
- 30.4、内存
- 三十二、HBase数据的备份与恢复
- 32.1、离线备份
- 32.1.1、同一集群的备份
- 32.1.2、备份数据到另外一个集群
- 32.1.3、离线恢复
- 32.1、在线备份
- 三十三、HBase的过滤器
- 33.1、主要功能:提高随机读性能
- 33.2、参考文章:http://blog.csdn.net/opensure/article/details/46453681,http://blog.csdn.net/dadoneo/article/details/6847481
- 三十四、HBase的协处理
- 34.1、简介
- 34.2、协处理器类型
- 34.2.1、Coprocessor
- 34.2.2、RegionServer
- 34.2.3、Endpoint
- 三十五、HBase版本确界
- 35.1、版本是下界
- 35.2、版本的上界
- 三十六、HBase在目前行业前景中的应用
- 36.1、FaceBook
- 36.1.1、为何选择
- 36.1.2、在HBase中存储什么
- 36.1.3、流程控制
- 36.1.4、规模
三十、HBase节点的管理
30.1、服役(commissioning)
当启动regionserver时,regionserver会向Hmaster注册并开始接收本地数据,开始的时候,新加入的节点不会有任何数据,平衡器开启的情况下,将会有新的region移动到开启的RegionServer上。如果启动和停止进程是使用ssh和HBase脚本,那么会将新添加的节点的主机名加入到conf/regionservers文件中。
就是把RegionServer挂到集群上面,通知zookeeper,zookeeper通知给HMaster,告诉它,新加入了一个RegionServer,一旦新加过来之后,就会进行负载均衡,将一部分region转移到新的RegionServer上面,如果成功的新加进来了,会在conf/regionservers文件中添加这个节点的位置。
30.2、退役(decommissioning)
方式一:
顾名思义,就是从当前HBase集群节点中删除某个RegionServer,这个过程分为如下几步:
Step1、使用以下命令停止负载平衡器
hbase> balance_switch false
Step2、在退役节点上停止RegionServer
hbase> hbase-daemon.sh stop regionserver
Step3、RegionServer一旦停止,会关闭维护的所有region
Step4、Zookeeper上的该RegionServer节点消失
Step5、Master节点检测到该RegionServer下线
Step6、RegionServer的region服务得到重新分配
该关闭方法比较传统,需要花费一定的时间,而且会造成部分region短暂的不可用,这里的region指的是退役的RegionServer负责的region。
想一下为什么要有第一步: balance_switch false,如果不关闭负载均衡,region可能还在切分,切分玩之后还在负载均衡,第一个节点的RegionServer,它的压力特别大,HMaster会分担压力给其他的集群,就让他下线,让他没法工作,就需要先将负载均衡器观点,后面的工作马上停掉,你马上就退役了
方式二(推荐)
我们有一种更骚气的关闭方法:
Step1、RegionServer先卸载所管理的region
这个卸载不是说的卸载app,可以理解为linux机器上对硬盘的挂载和卸载,用了就挂载,不用了就卸载,而不是摧毁
$ bin/graceful_stop.sh
例如:
$ bin/graceful_stop.sh hadoop-senior02.itguigu.com
这样就卸载了第二台机器的RegionServer所管理的Region,卸载完之后就开始自动平衡了
Step2、自动平衡数据
Step3、和之前的2~6步是一样的
方式一:RegionServer正在跑着,突然把进程给停掉了,停掉之后,停掉之后Region中的数据立刻就访问不到了,中间有段时间检测到RegionServer不存在,然后就把region负载到其他的RegionServer里面,在这个过程中,正在访问的RegionServer不能提供服务了,就会短暂的出现regoin访问不到的情况
方式二:RegionServer正在跑着,然后把region给卸载掉,卸载意思是,他后续不再提供什么变更的服务了,这个时候region还是活着的,HMaster会把已经卸载的region放到其他的RegionServer里面,当转移成功了,把RegionServer停掉就可以了,在这个过程中实现了无缝对接,可能有停顿但是是毫秒级别的
当然你也可以直接把电源拔了。
三十一、集群失效的可能性
集群机器上不同的Java版本可能会引起崩溃问题,不同版本的Hadoop和HBase也会引起兼容性问题,如下几种组件出现问题,也会导致集群失效。
30.1、磁盘
例如磁盘转速过慢,导致一些其他服务超时,或者磁盘损坏等。
30.2、操作系统
例如操作系统在升级补丁时,升级到了一个无法兼容当前集群的版本。
30.3、网络
网络震荡,阻塞等原因造成的集群服务连接超时。
30.4、内存
内存的损坏或者内存溢出,或者在执行一些具体任务时,由于编码问题造成的内存泄漏导致了内存溢出。
三十二、HBase数据的备份与恢复
HBase中存储着大量的在线业务数据和离线业务数据,所以备份对于我们而言会非常重要。接下来讲解一下如何执行在线和离线备份。
32.1、离线备份
此方法时完全停止HBase服务后,使用distcp命令运行MapReduce任务进行备份,将数据备份到另一个地方,可以是同一个集群,也可以是专用的备份集群。如果你的集群是线上集群,不能下线停止服务,则此方法不可取,请阅读在线备份方法。
32.1.1、同一集群的备份
即,把数据转移到当前集群的其他目录下,可以使用命令:
$ bin/hadoop distcp
hdfs://hadoop-senior01.itguigu.com:8020/hbase
hdfs://hadoop-senior01.itguigu.com:8020/HbaseBackup/backup20170803
前面是将要被备份的目录,后面是将要被分到的目录
前提:两个集群的版本号是相同的,如果版本号不同的话,压缩的格式等可能不一样,需要做特殊的处理
通过MapReduce可以查看当前拷贝任务的执行情况
注意:在执行这个任务的时候,假如当前正在执行hbase,需要将当前的hbase停掉,如果不是这样的话,有些数据是不能拷贝的,因为文件在不停的变化,不停的变化就意味着当前的文件是被锁定的状态,客户端往hbase里面写文件,文件就被锁定了,所以不能拷贝这个文件,甚至有些临时文件,刚拷贝完又删掉了。
MapReduce的任务,当某个节点的任务执行失败之后,会尝试重新调度这个任务,分配到其他的节点去执行,如果这个任务一直失败,加入分配了三个或者四个节点就失败了,这个节点就不再尝试了,会执行下一个任务。
可以看到图中就是在不停的重试,大概会重试四次
最后还是成功了,所以在拷贝的时候一定要保证待拷贝的文件所对应的服务是离线的状态
到hdfs中进行查看
32.1.2、备份数据到另外一个集群
即,把数据复制转移到另一个集群的存储空间中,使用如下命令:
$ bin/hadoop distcp
hdfs://hadoop-senior01.itguigu.com:8020/hbase
hdfs://z01:8020/HbaseBackup/backup20170803
这种备份方式其实更适用于建立专门的备份集群。
尖叫提示:复制时,一定要开启Yarn服务。
32.1.3、离线恢复
与备份方法一样,将数据整个移动回来即可。
32.1、在线备份
即,在HBase不离线的情况下,使用快照来备份数据。
三十三、HBase的过滤器
这里所说的是布隆过滤器,就是当需要在扫描过程中过滤掉大部分数据的时候使用,它可以减少内部数据的查找,从而加快扫描速度。这些数据存储在Hfiles的元数据区,一旦写入就不会再改变。布隆过滤器通过折叠的方式减少占用的空间,当分配region给RegionServer时,Hfile被打开,布隆过滤器载入内存。
33.1、主要功能:提高随机读性能
33.2、参考文章:http://blog.csdn.net/opensure/article/details/46453681,http://blog.csdn.net/dadoneo/article/details/6847481
三十四、HBase的协处理
34.1、简介
协处理器(coprocessor),每个RegionServer都会有一个协处理器进程,所有的region都包含对协处理器实现的引用。可以通过RegionServer的类路径加载,也可以通过HDFS类加载器加载。协处理器的设计是为了方便开发者向HBase中添加额外的功能,而不是给普通使用者使用。它可以用来做服务器端的操作,比如region分裂、合并以及客户端的创建,读取,删除,更新等操作,实现用户自定义功能。
34.2、协处理器类型
34.2.1、Coprocessor
提供region生命周期的管理,比如打开,关闭,分裂,合并等等。
34.2.2、RegionServer
提供对表修稿操作的监控,比如get,put,scan,delete
34.2.3、Endpoint
提供在region端执行任意函数的功能,比如RegionServer上的列聚集函数。
三十五、HBase版本确界
35.1、版本是下界
默认的版本下界是0,即禁用。row版本使用的最小数目是与生存时间(TTL Time To Live)相结合的,并且我们根据实际需求可以有0或更多的版本,使用0,即只有1个版本的值写入cell。
35.2、版本的上界
默认的版本上界是3,也就是一个row保留3个副本(基于时间戳的插入)。该值不要设计的过大,一般的业务不会超过100。如果cell中存储的数据版本号超过了3个,再次插入数据时,最新的值会将最老的值覆盖。
HBase的单元格中能存出多个版本的数据,但是如果数据的版本号相同,新的数据会覆盖掉旧的数据。
三十六、HBase在目前行业前景中的应用
36.1、FaceBook
36.1.1、为何选择
- 提高读写吞吐量
- 相比于其他数据库有更高的随机读取性能
- 水平可伸缩性
- 自动故障转移
- 超强的一致性
- 超强的容错性
36.1.2、在HBase中存储什么
- 即时消息
- 搜索数据
36.1.3、流程控制
客户端请求用户目录服务获取用户详细信息,得到用户详细信息之后,客户端发送请求给应用服务器,其可以是一个运行特定应用程序的Tomcat服务器,使用定制服务的应用程序可以通过HBase索引来搜索用户相关的单元格数据,单元格可以存放写入的消息、追加或者检索的数据。
36.1.4、规模
每天:
- 消息量:发送和接收的消息数超过60亿
- 将近1000亿条数据的读写
- 高峰期每秒150万左右操作
- 整体读取数据占有约55%,写入占有45%
- 超过2PB的数据,涉及冗余共6PB数据
- 数据使用LZO压缩
- 数据每月大概增长300千兆字节。