hbase批量查批量写报错org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

hbase批量查批量写报错org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException

2018-11-07 15:59:18 12139 2

org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException

at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.makeException(AsyncProcess.java:228)
at org.apache.hadoop.hbase.client.AsyncProcess$BatchErrors.access$1700(AsyncProcess.java:208)
at org.apache.hadoop.hbase.client.AsyncProcess.waitForAllPreviousOpsAndReset(AsyncProcess.java:1700)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:208)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.flush(BufferedMutatorImpl.java:183)
at org.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:1449)
at org.apache.hadoop.hbase.client.HTable.put(HTable.java:1052)
at com.pdd.service.medoc.dao.hbase.dao.impl.BaseDAO.lambda$batchInsertV3$15(BaseDAO.java:353)
at com.pdd.service.medoc.dao.hbase.config.HbaseTemplateV2.execute(HbaseTemplateV2.java:27)
at com.pdd.service.medoc.dao.hbase.dao.impl.BaseDAO.batchInsertV3(BaseDAO.java:339)
at com.pdd.service.medoc.dao.hbase.dao.impl.GoodsExtensionDAOV3Impl.batchInsert(GoodsExtensionDAOV3Impl.java:83)
at com.pdd.service.medoc.dao.hbase.dao.impl.GoodsExtensionDAOV3Impl

$$ FastClassBySpringCGLIB $$

f025277.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.pdd.service.medoc.dao.hbase.dao.impl.GoodsExtensionDAOV3Impl

$$ EnhancerBySpringCGLIB $$

499b33c1.batchInsert()
at com.pdd.service.medoc.build.sharding.ShardingGoodsHbaseLogic.processGoodsById(ShardingGoodsHbaseLogic.java:758)
at com.pdd.service.medoc.build.sharding.ShardingGoodsHbaseLogic.insertGoodsInfoIntoHbase(ShardingGoodsHbaseLogic.java:152)
at com.pdd.service.medoc.build.sync.SyncGoodsInfo.lambda$syncAll$0(SyncGoodsInfo.java:85)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
如上代码是批量读或者批量写时的报错,
public HbaseTemplateV2 hbaseTemplateV2() {

    HbaseTemplateV2 hbaseTemplateV2 = new HbaseTemplateV2();

    HbaseTemplateConfig config = new HbaseTemplateConfig();
    Configuration hBaseConfiguration = HBaseConfiguration.create();
    hBaseConfiguration.set("hbase.zookeeper.quorum", config.getZookeeperQuorumV2());
    hBaseConfiguration.set("hbase.zookeeper.property.clientPort", config.getZookeeperPortV2());
    hBaseConfiguration.set("zookeeper.znode.parent", config.getZookeeperParentV2());

    hBaseConfiguration.setInt("hbase.client.retries.number",3);
    hBaseConfiguration.setInt("ipc.socket.timeout",3000);//socket建立链接的超时时间
    hBaseConfiguration.setInt("hbase.rpc.timeout",3000);//单次rpc请求超时时间
    hBaseConfiguration.setInt("hbase.client.operation.timeout",18000);//单次数据操作总时间 不包括scan
    hBaseConfiguration.setInt("hbase.client.scanner.timeout.period",3000);//scan操作单次rpc请求超时时间
    hbaseTemplateV2.setConf(hBaseConfiguration);

    return hbaseTemplateV2;
}

如上代码,是hbase初始化时的参数配置,
protected List batchGetV2(String tableName, List rowNames, String familyName) {

    return hbaseTemplateV2.execute(conn -> {
        Table table = conn.getTable(TableName.valueOf(tableName));
        Transaction t1 = Cat.newTransaction("transaction_hbase_batch_get", tableName);
        try {
            List<Get> getList = Lists.newArrayList();
            rowNames.forEach(rowName -> {
                Get get = new Get(Bytes.toBytes(rowName));
                get.addFamily(Bytes.toBytes(familyName));
                getList.add(get);
            });
            Result results = table.get(getList);
            List<T> fetchResult = Lists.newArrayList();
            for (Result result : results) {
                T t = convertResult2DTO(result);
                if(t!=null) {
                    fetchResult.add(t);
                }
            }
            return fetchResult;
        } catch (Exception e) {
            Cat.logError("#medoc-hbase# failed to batch get tablename." + tableName + ".rowNames." + JsonUtils.toJson(rowNames), e);
            log.error("#medoc-hbase# failed to batch get tablename." + tableName + ".rowNames." + JsonUtils.toJson(rowNames), e);
            t1.setStatus(e);
            return null;
        } finally {
            if (Objects.nonNull(table)) {
                table.close();
            }
            t1.complete();
            t1.setStatus(Transaction.SUCCESS);
        }
    });
}

如上代码是我批量读的代码,
具体背景是,任务启动,程序从DB里批量读取一定量的数据,然后再从hbase里读取,进行比较筛选后,再写入hbase,有时候批量读会报错,有时候批量写会报错,都是上面那个类型的错误

hbase客户端版本
"org.apache.hbase:hbase-client:$hbaseVersion"
hbaseVersion = '1.1.2.2.4.2.0-258'

调用方法所在类
org.apache.hadoop.hbase.client.Table

取消 提交回答
全部回答(2)
  • 游客q4xomsjb24u56
    2021-06-09 09:59:26

    碰到同样问题,批量读数据量较大时,hbase直接宕机,后续所有请求全部处于等待中,然后超时,新进连接直接无法连接,请问楼主除了降低读写量还有没有其他办法提高负载?

    0 0
  • 我是管理员
    2019-07-17 23:12:41

    后面降低了写数据的任务频率,同时降低数据写入量,运行平稳的时间稍微长了一点,但是看监控,只要GC一触发,就会继续报这个错误,我能理解成只要有GC 就会报这个错吗?如果是这样 怎么提高服务器在GC的同时负载能力不下降那么多呢

    0 0
添加回答
相关问答

1

回答

Apache Hadoop YARN中的ApplicationMaster的作用是什么?

2021-12-10 20:19:25 301浏览量 回答数 1

1

回答

Apache Hadoop YARN中的ResourceManager的作用是什么?

2021-12-10 20:18:54 194浏览量 回答数 1

1

回答

Hadoop中类DistributedCache的方法是什么?

2021-12-06 00:18:29 82浏览量 回答数 1

1

回答

Hadoop中为什么会自动生成cluster_id?

2021-12-05 10:12:40 123浏览量 回答数 1

1

回答

Hadoop中ReduceTask的排序是什么?

2021-12-04 21:46:30 71浏览量 回答数 1

1

回答

Hadoop 中若分区数不是1,reducetask为1,是否执行分区过程?

2021-12-05 11:15:08 93浏览量 回答数 1

1

回答

database cluster initialisation failed

2019-11-28 10:31:46 426浏览量 回答数 1

0

回答

A Container-based Sizing Framework for Apache Hadoop/Spark Clusters

2018-07-28 23:09:50 728浏览量 回答数 0

0

回答

Dr.Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop

2018-05-27 18:20:30 869浏览量 回答数 0

3

回答

client.GetAcsResponse(request)引发了“System.Xml.XmlException”类型的异常

2017-11-17 13:17:56 3514浏览量 回答数 3
+关注
hbase小能手
HBase是一个分布式的、面向列的开源数据库,一个结构化数据的分布式存储系统。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。阿里云HBase技术团队共同探讨HBase及其生态的问题。
文章
问答
问答排行榜
最热
最新
相关电子书
更多
spark替代HIVE实现ETL作业
立即下载
Apache Phoenix and HBase: Past, Present and Future of SQL over HBase
立即下载
[HBaseCon Asia 2018] HBase Project Status
立即下载