本次记录一下hbase创建solr二级索引出现的一些问题,传统比较保险的一种做法就是通过java API读取hbase中数据,同时创建到solr中。集群是五台服务器,对于几亿条的数据的数据全表扫描还是很困难的。

试过通过列中的时间进行过滤,都会有超时情况出现。rowkey的设计通过几个唯一的字段拼接而成的,分隔符为“|”。首位防止出现热点问题进行hash值处理,取账号字段hash值的最后两位。
防止数据量过大,在读取hbase数据时通过起止键加了一个filter进行时间过滤。本来是想减少对应区间内的数据量,反而弄巧成拙是性能下降了。下面是应用端报出的错误:
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Wed Mar 06 11:01:28 CST 2019, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=60103: Call to pbigdata1/196.1.40.33:21302 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=5267, waitTime=60002, operationTimeout=60000 expired. row '97|017701800122410025|20181015|260500000032|8010002753|22419999|20190218^@' on table 'tbl_accounting_entry' at region=tbl_accounting_entry,94|019801370002199|20190214|M00020010750|0080064230|20010505|20190219,1551715791119.1f23765783d3cbf72861b9c5bdf612b2., hostname=pbigdata1,21302,1551669174213, seqNum=251080

at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:275)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:240)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:62)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:217)
        at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:330)
        at org.apache.hadoop.hbase.client.ClientScanner.loadCache(ClientScanner.java:411)
        at org.apache.hadoop.hbase.client.ClientScanner.next(ClientScanner.java:374)
        at com.hadoop.solr.HbaseSolr_AccountingEntry.run(HbaseSolr_AccountingEntry.java:33)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=60103: Call to pbigdata1/196.1.40.33:21302 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=5267, waitTime=60002, operationTimeout=60000 expired. row '97|017701800122410025|20181015|260500000032|8010002753|22419999|20190218^@' on table 'tbl_accounting_entry' at region=tbl_accounting_entry,94|019801370002199|20190214|M00020010750|0080064230|20010505|20190219,1551715791119.1f23765783d3cbf72861b9c5bdf612b2., hostname=pbigdata1,21302,1551669174213, seqNum=251080
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:176)
        at org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:65)
        ... 3 more
Caused by: java.io.IOException: Call to pbigdata1/196.1.40.33:21302 failed on local exception: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=5267, waitTime=60002, operationTimeout=60000 expired.
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient.wrapException(AbstractRpcClient.java:285)
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1281)
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:224)
        at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:329)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:32741)
        at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:217)
        at org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:63)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:217)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:387)
        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:361)
        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:138)
        ... 4 more
Caused by: org.apache.hadoop.hbase.ipc.CallTimeoutException: Call id=5267, waitTime=60002, operationTimeout=60000 expired.
        at org.apache.hadoop.hbase.ipc.Call.checkAndSetTimeout(Call.java:70)
        at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1255)
        ... 13 more

在hbase服务端出现如下警告:

response时间过长,按理说通过rowkey去取数据应该不会这么慢。所以最后的问题定位在hbase查询时的filter导致的超时,将filter去掉再去读取问题解决了没有再报错。

但是感觉hbase rowkey的设计还是有点问题,rowkey打散的还是不够。首字母的区间设置应该还要更宽一些,或者直接通过hash值作为整个rowkey。

hbase创建solr索引的超时问题相关推荐

  1. hbase基于solr配置二级索引

    一.概述 Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页.查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Sec ...

  2. solr索引创建流程

    solr索引创建流程: 分词组件Tokenizer 分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token). 1.将文档分成一个一个单 ...

  3. 大数据架构-使用HBase和Solr将存储与索引放在不同的机器上

    摘要:    HBase可以通过协处理器    Coprocessor    的 方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增.删.改索引的操作,这样就可以同时使用HBase存 ...

  4. 大数据架构-使用HBase和Solr配置存储与索引

    大数据架构-使用HBase和Solr配置存储与索引 2014-08-22 11:04 王安琪 博客园 字号:T | T HBase可以通过协处理器Coprocessor的方式向Solr发出请求,Sol ...

  5. phoenix 使用详细介绍 创建二级索引

    phoenix 关联hbase 基本使用参考:https://blog.csdn.net/zhangshenghang/article/details/97491597 Phoenix 创建二级索引 ...

  6. Hbase的二级索引和RowKey的设计

    Hbase查询简介 Hbase查询的时候,有以下几种方式: • 通过 rowkey方式,指定 获取唯一记录 • 通过 scan方式,设置satrtRow 和stopRow 参数进行范围匹配(模糊查询) ...

  7. HBase phoenix二级索引

    1. 为什么需要用二级索引? 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询.如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄.对于较大的表 ...

  8. 将数据库表导入到solr索引

    将数据库表导入到solr索引 编辑solrcofnig.xml添加处理器 <requestHandler name="/dataimport" class="org ...

  9. Phoenix创建二级索引

    为什么需要Secondary Index 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询.如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄. ...

最新文章

  1. 【Java】阶段性总结练习------图书管理系统实现
  2. c 多线程运行混乱_一篇文章读懂 Python 多线程
  3. asp .net mvc ajax 传值到后台,并放回JSon值解析
  4. linux查看网卡速度
  5. 安卓连接linux软件,利用 Telnet 无线控制安卓手机 无需 Root
  6. php代码导入sql,php导入SQL文件(示例代码)
  7. 数据科学 IPython 笔记本 8.2 Matplotlib 的应用
  8. js的跨域问题和解决办法
  9. MySQL text类型的最大长度
  10. php post 传递数组参数,php提交post数组参数实例分析
  11. hibernate教程笔记1
  12. [Linux程序设计][调试][splint]
  13. Linux系统的命令应该如何记
  14. 编译原理第三版陈火旺第二章答案
  15. 架构之美第四章-架构与美
  16. 格拉布斯法—异常值判断(异常值)
  17. 2022中兴捧月算法挑战赛(RAW图像去噪)——初赛到决赛总结与反思
  18. 入门级概述光学相干层析(OCT)原理
  19. 鸿蒙珠融入体内,逍遥至尊之诸天逍遥
  20. Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!

热门文章

  1. 【Vue3】电商网站吸顶功能
  2. Linux学习2.0(非markdown编辑)
  3. [转]频谱、幅度谱、功率谱和能量谱
  4. Mobius函数(模板)
  5. 怎么把HTML网页重构为VUE,基于vue cli重构多页面脚手架过程详解
  6. ThinkPad装win7系统无法启动的解决办法
  7. 基本面指标怎样选股?基本面选股方法
  8. Leetcode 1833 雪糕的最大数量
  9. 国内电子商务的几种典型
  10. 从VB来看-InsertionSort(VB插入排序)