如何覆盖Accumulo中SortedKeyValueIterator接口的功能?

时间:2015-01-06 07:12:29

标签: java hadoop accumulo

我正在尝试创建一个自定义迭代器,但由于没有可用的教程,我查看了Accumulo github页面提供的代码。

我发现所有类都实现了SortedKeyValueIterator并覆盖了它的功能。

在创建实现SortedKeyValueIterator的新类时,在覆盖这些函数时,这些函数的作用是什么以及应该采用什么方法。

这是我试图理解的RowFilter类的示例代码。

 public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException {
super.init(source, options, env);
this.decisionIterator = new RowIterator(source.deepCopy(env));
}

 public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) {
 RowFilter newInstance;
 try {
       newInstance = getClass().newInstance();
     } catch (Exception e) 
      {
         throw new RuntimeException(e);
      }
  newInstance.setSource(getSource().deepCopy(env));
  newInstance.decisionIterator = new RowIterator(getSource().deepCopy(env));
  return newInstance;
   }

我想知道,这段代码做了什么,如果我想让另一个类实现SortedKeyValueIterator,我应该如何覆盖这些函数。

1 个答案:

答案 0 :(得分:4)

首先看一下SortedKeyValueIterator上的Javadoc - http://accumulo.apache.org/1.6/apidocs/。对于每种方法应该做的事情,这是一个很好的起点。

编写迭代器的一个很好的比喻是将您的Accumulo表(迭代器正在操作)视为单链表(按排序顺序)。 next()移动到列表中的下一个节点,seek()向前/向下移动,跳过零到多个节点。 init()从Accumulo表配置和客户端提供任何必要的配置(您的迭代器可能在Accumulo服务器中运行)。 deepCopy()应该将当前迭代器的确切状态复制到一个新实例中(类似于Object.clone())。

我还可以提供两个自定义迭代器示例:

您还可以查看其他提供的&#34;面向用户的&#34; Accumulo中的迭代器http://accumulo.apache.org/1.6/apidocs/org/apache/accumulo/core/iterators/user/package-summary.html