美文网首页
hbase scan的startRow和endRow

hbase scan的startRow和endRow

作者: 王金松 | 来源:发表于2018-12-01 11:04 被阅读0次

举一个场景,安全领域的溯源分析,查询维度包括ip,时间戳,端口,协议,可能根据前两的维度的一个或者几个进行原始日志查询,我们可以把原始日志存储到hbase中,而前面提到的几个维度可以分别作为key的一部分。

首先我们应该考虑的是rowkey的设置,第一:散列或者反转,保证数据会随机分布到不同的region当中。第二:预分区,先对数据做一个基本的统计,比如我们预分十个区,我们可以统计一下每个区的startrow和endrow,这样保证每个区的数据相当,另外这样的好处是当我们根据rowkey查询的时候,可以保证直接定位到某个分区。我们线上的数据就是采用的第二种方式。

然后我们应该考虑rowkey的组成。分两种情况,第一种情况:维度不是特别多,我们完全可以把各个维度分别作为rowkey的一部分,比如上文提到的需求,就是采用的这种方式,因为一共四个维度,相对来说比较少。第二种情况:维度过多,如果都作为rowkey的一部分的话长度太大,此时建议考虑二级索引,举个例子:比如对于上面提到的四个维度,如果现在进行扩展,ip,端口,协议需要定位到源和目的,这样的话,整个维度提升到了七个,此时就建议采用二级索引。

目前我们已经确定了hbase存储,并且采用预分区的方式并且采用rowkey进行过滤查询,那么现在考虑rowkey的设计。从技术角度考虑,预分区的方式时间戳不能作为第一部分,这样一定会出现数据倾斜的现象;从业务角度考虑,我们定位日志的时候,首先需要定位ip,然后是端口,最后才是协议,也就是说我们的用户去定位日志的时候,如果定位到端口,那必须先定位ip,如果定位协议的话,必须先定位ip和端口。

综上所述,我们的rowkey设计为ip+timestamp+port+prot

设计搞定之后,我们再考虑查询的问题。我们知道对于hbase的查询,最快的方式就是get,这样的话,可以迅速定位到一条数据。而get查询其实就是scan的特殊情况,只是startRow和endRow一样。所以此时我们可以采用scan+startRow+endRow的方式进行操作。

e.g

Scan scan = new Scan();

scan.setStartRow(“127.0.0.1+${ts}+8080:”);

scan.setStopRow(“127.0.0.1+${ts}+9000”);

ResultScanner result = table.getScanner(scan);

for (Result r : result) { }

这样的话就可以吧该范围的数据查出来,当然我们可以再在内存中进行过滤

当着startRow和endRow需要注意一些情况。

请参考:https://www.cnblogs.com/llphhl/p/5719119.html

相关文章

  • hbase scan的startRow和endRow

    举一个场景,安全领域的溯源分析,查询维度包括ip,时间戳,端口,协议,可能根据前两的维度的一个或者几个进行原始日志...

  • HBase系列5-Hbase优化

    一. 预分区 每一个region维护者StartRow与EndRow,如果加入的数据符合某个Region维护的Ro...

  • HBase学习笔记(二)

    HBase优化相关 HBase查询优化 1、设置scan缓存 scanner.SetCaching(10000) ...

  • Hbase Scan的重要参数

    Scan是操作Hbase中非常常用的一个操作,虽然前面的Hbase API操作简单的介绍了Scan的操作,但不够详...

  • HBase Scan的重要参数

    Scan是操作Hbase中非常常用的一个操作,虽然前面的Hbase API操作简单的介绍了Scan的操作,但不够详...

  • code搬运工_关于Phoenix的Secondary Inde

    存储在HBase中的数据:(1) HBase唯一索引 primary row key(2) 全表扫描 scan(...

  • hbase 服务化文档

    hbase 单独抽出平台 说白了 就是解决 hbase put ,scan 操作 ,开发比较吃力 ,不优雅等问题。...

  • HBase读操作

    对于HBase而言读取操作有两种,即get和scan。按实现上来看的话,get请求也是一种scan请求,相当于sc...

  • HBase scan命令详解

    hbase中scan命令是我们经常使用到的,而filter的作用尤其强大。这里简要的介绍下scan下filter命...

  • HBase扫描操作Scan

    HBase扫描操作Scan 1 介绍 扫描操作的使用和get()方法类似。同样,和其他函数类似,这里也提供了Sca...

网友评论

      本文标题:hbase scan的startRow和endRow

      本文链接:https://www.haomeiwen.com/subject/tdplcqtx.html