如何避免HBase写入过快引起的各种问题 - 中国数据分析行业网
  • 关于《2016年亚博电竞客户端下载行业发展报告》的公告
  • 什么是亚博电竞客户端下载
  • 亚博电竞客户端下载师事务所简介
  • 亚博电竞客户端下载师简介
  • 大亚博电竞客户端下载平台(Datahoop)简介
  • 中国亚博电竞客户端下载行业自律公约
  • 九大最适合实时亚博电竞客户端下载的应用领域
  • 亚博电竞客户端下载清明小长假出行特点
  • “海归”就业路线图的大亚博体育app彩票描绘
  • 大亚博体育app彩票预测清明节出游最佳城市
  • 技术热点

  • 亚博体育app彩票中心网络的救命稻草-OOB
  • 创建有效的大亚博体育app彩票模型的6个技巧
  • 企业纷纷上云,IT运维如何借力AI实现智能化
  • 如何选择正确的亚博体育app彩票集成工具
  • Datahoop大亚博电竞客户端下载平台

    Datahoop,新一代企业亚博电竞客户端下载平台。是中国商业联合会亚博电竞客户端下载专业委员会主导下,集合了业内高级亚博电竞客户端下载专家,建立的多功能分析平台。目前正在进行小范围的公测...

    解决方案

  • 关于陕西诚合广信亚博电竞客户端下载师事务所有限公司备案及入会申请的批复
  • 关于组织参加“第十九届亚太零售商大会暨国际消费品博览会”的通知
  • 关于举办2019年亚博电竞客户端下载行业个人亚博yabo官方执业教育的通知
  • 关于给CPDA个人亚博yabo官方提供2019年6月免费微课学习的通知
  • 亚博yabo官方服务

    入会申请快速指南

  • 1.请您先阅读入会须知[入会须知]
  • 2.下载入会申请表 [团体申请] [个人申请]
  • 3.通过协会邮箱提交申请表
  • Email : xiehui@chinacpda.org
  • 4.如果您还有其它疑问,请联系
  • 协会亚博yabo官方处 010-59000056转651、652
  • 5.查看更多亚博yabo官方入会相关信息:
  • 了解入会详情
  • 李昆仑

  • 犀数科技,首席亚博体育app彩票官——孙雪

  • 沈志勇

  • 江青

  • 周庭锐

  • 地            址:北京市朝阳区朝外大街乙6号朝外SOHO,C座9层
  • 邮            编:100020
  • 总            机:(010)5900-0991/0339/0223/0056
  • 人事 行政处:010-59000991转606
  • 运  营 中  心:010-59000991
  • 商  务 合  作:010-59000339转630、13001995337
  • 会   员    处 :010-59000056转651、652
  •         Email :xiehui@chinacpda.org
  • 乘   地   铁:东大桥站
  • 乘   公   交:关东店站
  • 当前位置 > 首页 > 技术热点 > 如何避免HBase写入过快引起的各种问题

    如何避免HBase写入过快引起的各种问题

    来源:中国亚博电竞客户端下载行业网 | 时间:2018-04-10 | 作者:亚博体育app彩票委

    首先我们简单回顾下整个写入流程

    1. client api ==> RPC ==> server IPC ==> RPC queue ==> RPC handler ==> write WAL ==> write memstore ==> flush to filesystem

    整个写入流程从客户端调用API开始,亚博体育app彩票会通过protobuf编码成一个请求,通过scoket实现的IPC模块被送达server的RPC队列中。最后由负责处理RPC的handler取出请求完成写入操作。写入会先写WAL文件,然后再写一份到内存中,也就是memstore模块,当满足条件时,memstore才会被flush到底层文件系统,形成HFile。

    667

    当写入过快时会遇见什么问题?

    写入过快时,memstore的水位会马上被推高。

    你可能会看到以下类似日志:

    1. RegionTooBusyException: Above memstore limit, regionName=xxxxx ...

    这个是Region的memstore占用内存大小超过正常的4倍,这时候会抛异常,写入请求会被拒绝,客户端开始重试请求。当达到128M的时候会触发flush memstore,当达到128M * 4还没法触发flush时候会抛异常来拒绝写入。两个相关参数的默认值如下:

    1. hbase.hregion.memstore.flush.size=128M
    2. hbase.hregion.memstore.block.multiplier=4

    或者这样的日志:

    1. regionserver.MemStoreFlusher: Blocking updates on hbase.example.host.com,16020,1522286703886: the global memstore size 1.3 G is >= than blocking 1.3 G size
    2. regionserver.MemStoreFlusher: Memstore is above high water mark and block 528ms

    这是所有region的memstore内存总和开销超过配置上限,默认是配置heap的40%,这会导致写入被阻塞。目的是等待flush的线程把内存里的亚博体育app彩票flush下去,否则继续允许写入memestore会把内存写爆

    1. hbase.regionserver.global.memstore.upperLimit=0.4  # 较旧版本,新版本兼容
    2. hbase.regionserver.global.memstore.size=0.4 # 新版本

    当写入被阻塞,队列会开始积压,如果运气不好最后会导致OOM,你可能会发现JVM由于OOM crash或者看到如下类似日志:

    1. ipc.RpcServer: /192.168.x.x:16020 is unable to read call parameter from client 10.47.x.x
    2. java.lang.OutOfMemoryError: Java heap space

    HBase这里我认为有个很不好的设计,捕获了OOM异常却没有终止进程。这时候进程可能已经没法正常运行下去了,你还会在日志里发现很多其它线程也抛OOM异常。比如stop可能根本stop不了,RS可能会处于一种僵死状态。

    如何避免RS OOM?

    一种是加快flush速度:

    1. hbase.hstore.blockingWaitTime = 90000 ms
    2. hbase.hstore.flusher.count = 2
    3. hbase.hstore.blockingStoreFiles = 10

    当达到hbase.hstore.blockingStoreFiles配置上限时,会导致flush阻塞等到compaction工作完成。阻塞时间是hbase.hstore.blockingWaitTime,可以改小这个时间。hbase.hstore.flusher.count可以根据机器型号去配置,可惜这个数量不会根据写压力去动态调整,配多了,非导入亚博体育app彩票多场景也没用,改配置还得重启。

    同样的道理,如果flush加快,意味这compaction也要跟上,不然文件会越来越多,这样scan性能会下降,开销也会增大。

    1. hbase.regionserver.thread.compaction.small = 1
    2. hbase.regionserver.thread.compaction.large = 1

    增加compaction线程会增加CPU和带宽开销,可能会影响正常的请求。如果不是导入亚博体育app彩票,一般而言是够了。好在这个配置在云HBase内是可以动态调整的,不需要重启。

    上述配置都需要人工干预,如果干预不及时server可能已经OOM了,这时候有没有更好的控制方法?

    1. hbase.ipc.server.max.callqueue.size = 1024 * 1024 * 1024 # 1G

    直接限制队列堆积的大小。当堆积到一定程度后,事实上后面的请求等不到server端处理完,可能客户端先超时了。并且一直堆积下去会导致OOM,1G的默认配置需要相对大内存的型号。当达到queue上限,客户端会收到CallQueueTooBigException 然后自动重试。通过这个可以防止写入过快时候把server端写爆,有一定反压作用。线上使用这个在一些小型号稳定性控制上效果不错。

    来源:51CTO

  • 资质查询快速通道