我写了一个习惯 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
以及 false
上 negate
参数要么保留我的所有记录,要么删除它们,所以肯定有什么东西在执行。
另一个观察是我的 @override init(source, options, env)
没有调用(因为它也不会生成我的log4j语句)。
注:我的 @override describeOptions()
以及 @override validateOptions(options)
方法都被调用并打印出日志。
我做错什么了?谢谢
暂无答案!
目前还没有任何答案,快来回答吧!