在扫描时未正确调用accumulo自定义筛选器

euoag5mw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(293)

我写了一个习惯 Filter 这基本上只是提供的 AgeOffFilter 加上一些额外的东西。我的目标是根据自定义时间字段从accumulo中删除条目。

public class CustomAgeOffFilter extends Filter {

其概要如下:

public CustomAgeOffFilter()
@Override public boolean accept(k, v)
@Override public void init(source, options, env)
@Override public SortedKeyValueIterator<Key, Value> deepCopy(env)
@Override public OptionDescriber.IteratorOptions describeOptions()
@Override public boolean validateOptions(options)
//... and custom helper methods

我编译了我的类,把jar放进 $ACCUMULO_HOME/lib 并重新启动它。
我通过 Accumulo Shell 使用以下命令:

setiter -class my.class.path.CustomAgeOffFilter -n customageoff -p 10 -scan -t myTable

跑步 config -t myTable -f customageoff 退货:

---------+-------------------------------------------------+--------------------------------------
SCOPE    | NAME                                            | VALUE
---------+-------------------------------------------------+--------------------------------------
table    | table.iterator.scan.customageoff .............. | 10,my.class.path.CustomAgeOffFilter
table    | table.iterator.scan.customageoff.opt.ttl ...... | 1000
table    | table.iterator.scan.customageoff.opt.custom1 .. | 123
---------+-------------------------------------------------+--------------------------------------

我正在使用 Accumulo 1.7.2 通过 Cloudera 5.10.0 .
问题
虽然我的过滤器和我的习惯描述是正确的 options (使用 config 上面的shell命令),它不会进入我的 @override accept(k,v) 执行时的方法 scan 因为它似乎忽略了我的逻辑。它也没有打印出任何log4j语句,这让我相信它根本没有被执行,而是默认为其他语句(我在附加远程调试器时失败)。此外,切换 true 以及 falsenegate 参数要么保留我的所有记录,要么删除它们,所以肯定有什么东西在执行。
另一个观察是我的 @override init(source, options, env) 没有调用(因为它也不会生成我的log4j语句)。
注:我的 @override describeOptions() 以及 @override validateOptions(options) 方法都被调用并打印出日志。
我做错什么了?谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题