• HBase调优案例(一)——建表长时间等待最后失败


    现象:

      1.在HBase Shell里执行建表操作会等很久,最终失败;

           2.通过代码侧进行建表同样不能成功。

    原因排查:

      1.查询HMaster日志,发现有接收到建表(create)的RPC请求;

        在zookeeper的/hbase/table和/hbase/table-lock路径下也都能看到此table;

        /hbase/table-lock/testXXXX路径下存在write**文件,表明获取table锁的过程没有问题;

      

      2.从代码侧观察,发现建表操作的CreateTableHandler线程开始运行的话,没有info打印。说明此线程未运行。

    代码样例:

    public void process(){
        TableName tableName = this.hTableDescriptor.getTableName();
        Log.info("—————开始建表———————");    
    }

      3.查看jstack,有DisableTable Handler一直处于sleep状态

    原因:

      由于HMaster上进行table-operations(create/disable)都是用的同一个线程池,并且线程池的大小为1,所以确认是DisableHandler线程一直未结束导致无法进行建表。

    总结:

      类似问题可以通过jstack查看具体是哪个线程运行导致当前建表操作提交了但是不能分配线程运行。

      当前HBase版本处理DDL操作的线程池最大线程数都是1,所以一个操作进行时,其他操作都需要等待。建议以后版本开放此线程池的配置项,能够并发处理操作。

  • 相关阅读:
    hdu 4578 线段树 ****
    hdu 4576 概率dp **
    hdu 4622 **
    vue中保存和获取cookie,读写cookie以及设置有效时间等,使用js-cookie
    go语言 strconv.ParseInt 的例子
    【golang】unsafe.Sizeof浅析
    Golang 漫谈之channel妙法
    总结了才知道,原来channel有这么多用法!
    字符集之在UTF-8中,一个汉字为什么需要三个字节?
    什么是Bitmap
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/8727810.html
Copyright © 2020-2023  润新知