记一次处理bug经历

    此次问题设计组件稍复杂,这里大体说一下,我是作过车信息查询的。负责大数据模块,有另一个组专门负责卡口,数据是由他们从各卡口抽取,而后插入到hbase中。再经过协处理器,将数据在写进hbase以前发送到AMQ消息队列,而后再消费创建solr索引,架构基本就是这样的。
java

    基于这个,在元旦先后,数据出现点小问题。在元旦前高速卡口上的数据都是能够经过solr查询到的,而元旦以后的数据没法查询到的。当时发现问题时咱们自信的认为确定是抽数据那块出现问题了,后来经查,高速卡口的数据确实抽取到数据了。而后咱们逐个组件查找问题,首先咱们从hbase开始。因为抽数据那边不确却的知道具体是那些数据丢失,只知道卡口有个编号这些编号都属于高速上的,给咱们查询带来一些不便。我首先想到一个简便的方法查询,就是经过hive建一个外部表而后映射到hbase中我须要查询的表,这里能够选择新的只用映射几个我须要知道的字段。apache

    映射语句以下:架构

CREATE EXTERNAL TABLE xx(
rowkey string, 
aa string, 
bb string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "
:key,
cf:aa,
cf:bb")
TBLPROPERTIES("hbase.table.name" = "table");

    而后,咱们就能够通hive很容易就查出咱们须要的数据。app

    在hbase这确实查到有高速卡口的数据。而后咱们有想到,消费AMQ中数据的程序是咱们本身写的,可不多是在消费的时候出现问题。经查看咱们消费程序的日志,没有异常日志。为了确认不是在消费这个节点上出现问题,我现场在代码中加入一个条件,若是遇到高速卡口的数据就日志打印出来。重启消费程序后,验证结果是始终没有高速卡口的数据出现。oop

    至此基本把问题缩小到协处理器和AMQ上。当时当时负责协处理器的同事当时不在,一时半会也没法经过代码验证。而后只有硬着头皮先去查看协处理器的日志,这一看日志,果然发现有问题,发现咱们RS有一节点上的日志中有协处理器的几条日志,日志是咱们本身定义的,大体意思就是协处理器在region上没有挂载成功。问题是找到了,当时该如何解决。继续在日志里面查找,发现有报找不到类的异常,缺乏AMQ的jar包,由于协处理器中是把数据发送到AMQ的,因此须要AMQ相关的包链接AMQ。而后咱们添加上AMQ相关包,重启该节点上的RegionServer,OK了,solr中能查到高速卡口的数据。大数据

    至此问题解决了,经过此次查找问题,一个是经验积累。另外一方面也明白了,规范的重要性,之全部出现这样的状况时由于,元旦前添加了个节点,也就是出问题的节点。咱们有添加节点的文档,可是很零散。一旦有遗漏就是给本身挖了一大坑,因此把流程规范是不可或缺的。spa

相关文章
相关标签/搜索