HBase纪要(中)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
注册配置 MSE Nacos/ZooKeeper,118元/月
应用型负载均衡 ALB,每月750个小时 15LCU
简介: HBase纪要(中)

客户端API:最佳实践


1.      禁止自动刷写   setAutoFlush(false)


   这时,添加的put实例会被添加到一个相同的写入缓存中,在禁用自动刷写时,这些操作直到写缓冲区被填满时才会被送出。


  或者用户调用flushCommits()方法


  或调用HTable实例的close方法隐式调用flushCommits()方法



2.      使用扫描缓存setCaching()


   如果使用默认值1,则map任务会在处理每条记录时都请求region服务器。


   而如果设置为500,则一次可以传送500行数据到客户端进行处理。


这里要权衡传输数据的开销和内存的开销。



 表级别的扫描缓存    setScannerCaching()



3.      限定扫描范围


Scan扫描的范围尽可能的小



4.      关闭ResultScanner


HTabel.getScanner()返回的ResultScanner实例会消耗大量资源。


一定要在try/catch的finally块中关闭ResultScanner


5.      块缓存用法


    对Scan实例能够通过setCacheBlocks()方法来设置使用region服务器的块缓存。


    如果在MapReduce作业中使用扫描,这个方法应当被设置成false。


    对于那些频繁访问的行,建议使用块缓存。



6.      优化获取行健的方式


    适当的选用过滤器,最快捷的返回数据


7.      关闭Put上的WAL(关闭日志)


   服务器端不会把这个Put写到WAL中,而只把它写到memstore里。


    使用put的wrireToWAL(false)来关闭WAL



配置上的一些优化措施:



1.      减少ZooKeeper超时的发生


Zookeeper.session.timeout   属性来设置


2.      增加处理线程


Hbase.regionserver.handler.count属性定义了响应外部用户访问数据表请求的线程数。


默认值10有点小。


3.      增加堆大小


在hbase-env.sh文件中调整HBASE_HEAPSIZE的设置


4.      启用数据压缩


推荐使用Snappy或者LZO


配置启动region服务器时检查压缩是否正确安装:


<property>
   <name>hbase.regionserver.codecs</name>
   <value>snappy,lzo</value>
</property>


启用压缩:


hbase支持列族级别上的数据压缩。


create  ‘testtable’,{name=>’colfam1’,compression=>’GZ’}   //创建表,并对’colfam1’列族上的数据启用GZ压缩
describe ‘testtable’
//修改表,并启用压缩
create  ‘testtable2’,’colfam1’
disable   ‘testtable2’           --修改表的属性时,一定要先禁用表
alter  ‘testtable2’.{name=>’colfam1’,compression=>’GZ’}
enable  ‘testtable2’


5.      增加region大小


更大的region可以减少集群总的region数目。


管理较少的region可以让集群的运行更平稳。


默认情况下,region的大小事256MB。可以配置1GB或者更大的region。


     Hbase.hregion.max.filesize属性的值  

         


6.      调整块缓存大小


控制堆中块缓存大小的属性是一个用浮点数类型的百分比,默认值是20%。


  perf.hfile.block.cache.size


增大块缓存的情况:


Ø  如果块缓存的使用中,发现有很多的块被换出


Ø  用户负载大多数为读请求时,hbase将更加需要块缓存



7.       调整memstore限制


  memstore占用内存中堆大小的比例:


  上限:hbase.regionserver.global.memstore.upperLimit  (默认值为40%,设置为0.4)


 


下限:hbase.regionserver.global.memstore.lowerLimit(设置为0.35),用来控制服务器清空memstore之后剩余的大小。将上限和下限设置的接近一些可以避免过度刷写。



 处理读请求时,可以考虑同时减少memstore的上下限来增加块缓存的空间。


8.      增加阻塞时存储文件数目


Hbase.hstore.blockingStoreFiles


  决定了当存储文件的数目达到阀值时,更新操作(put,delete)将会被阻塞,并以此来给合并操作留出来时间减少存储文件的数目。


大负载的突发写入请求时,可以增加这个值。(默认值是7)


9.      增加阻塞倍率


Hbase.hregion.memstore.block.multiplier的默认值是2


阻塞客户端更新数据的请求的安全阀值。



增加这个值,可以更加平滑地处理写入突发流量:可以临时接受更多的数据


10.  减少最大日志文件限制


Hbase.regionserver.maxlogs=32    (默认值32)


控制基于磁盘的WAL文件数目,进而控制刷写频率。


对于写压力比较大的服务器,降低这个值会强迫服务器更频繁地将数据刷写到磁盘。这样刷写到磁盘上的数据所对应的日志就可以被丢弃了。


第11章     集群管理


减少节点


 Shell命令:


Balance_switch   false              --关闭负载均衡
  Hbase-daemon.sh   stop  regionserver    --停止集群中的一个region服务器
  Balance_switch   true            --启用负载均衡


过程分析:


  关闭节点的负载均衡,避免负载均衡和master回复刚才下线的region服务器之间可能产生的竞争。


 Region服务器会先将它所有的region关闭,然后再把自己的进程停止。Region服务器在ZooKeeper中对应的临时节点将会过期。Master会注意到region服务器停止服务并将其按崩溃的服务器处理:master会将这台服务器上的region重新分配到其他机器上。


坏处:region会下线一段时间,时间的长度由ZooKeeper的超时时间决定。


第一个被关闭的region要等所有region都关闭,且master注意到region服务器的znode被删除之后才能上线。



Hbase0.90.2之后,下线方式:

Graceful_stop.sh   hostname


--hostname是用户要卸载的region服务器。


会把region从对应的服务器上一个个移出来以减少扰动。它会在移动到下一个region前先检查新位置上的region是否已经部署好。直到对应的要关闭的服务器上没有region了。


此时,脚本会让对应的服务器关闭。


Master会察觉到服务器停止了服务。


由于服务器关闭时没有region,所以不会有WAL切分的相关操作。


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
负载均衡 监控 Shell
HBase纪要(下)
HBase纪要(下)
95 0
|
负载均衡 Java Shell
HBase纪要(上)
HBase纪要(上)
131 0
|
4月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
134 0
|
SQL 分布式计算 Hadoop
Hadoop集群hbase的安装
Hadoop集群hbase的安装
190 0
|
3月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储HBase设计目的
【6月更文挑战第2天】
48 6
|
3月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储Hbase高可靠性
【6月更文挑战第2天】
74 2
|
3月前
|
存储 分布式计算 Hadoop
Hadoop节点文件存储Hbase面向列
【6月更文挑战第2天】
33 2
|
4月前
|
分布式计算 安全 Hadoop
HBase Shell-org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet 已解决
在HBase Shell遇到错误时,检查Hadoop非安全模式:`hdfs dfsadmin -safemode get`。问题解决在于`hbase-site.xml`中添加配置:Zookeeper客户端端口设为2181和预写日志提供者设为filesystem。
|
4月前
|
分布式计算 Hadoop Java
Hbase2.2.2在线安装配置(对应Hadoop 3.1.3)
Hbase2.2.2在线安装配置(对应Hadoop 3.1.3)
88 2
|
4月前
|
分布式计算 Hadoop 关系型数据库
Hadoop任务scan Hbase 导出数据量变小分析
Hadoop任务scan Hbase 导出数据量变小分析
84 0