zoukankan      html  css  js  c++  java
  • 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,所以一个操作进行时,其他操作都需要等待。建议以后版本开放此线程池的配置项,能够并发处理操作。

  • 相关阅读:
    JAVA BASE64
    Mysql Index extends优化
    JAVA异步加回调的例子
    TCP长连接和短连接的区别
    浅析RPC概念框架
    MySQL Index Merge Optimization
    一简单的RPC实例(Java)
    return语句的用法
    java中对象和对象的引用
    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/8727810.html
Copyright © 2011-2022 走看看