在扫描

时间:2017-10-11 13:21:25

标签: java hadoop hdfs cloudera-manager accumulo

我编写了一个自定义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.2Cloudera 5.10.0

问题

虽然我的过滤器与我的自定义options一起正确描述(使用上面的config shell命令进行了验证),但在执行{{{}}时,它并未输入我的@override accept(k,v)方法来自shell的1}}因为它似乎忽略了我的逻辑。它也没有打印出任何log4j语句,导致我相信它根本没有被执行,而是默认为其他东西。 (我没有成功连接远程调试器)。此外,在scan参数上切换truefalse会保留所有记录或删除它们,因此肯定会执行某些操作。

另一个观察是我的negate没有被调用(因为它也没有产生我的log4j语句)。

注意:我的@override init(source, options, env)@override describeOptions()方法都被调用并打印出日志告诉我。

我在这里做错了什么?感谢

0 个答案:

没有答案