2015-01-06 5 views
1

커스텀 반복자를 만들려고하고 있지만 사용 가능한 튜토리얼이 없기 때문에 Accumulo github 페이지에 제공된 코드를 살펴 보았습니다.Accumulo에서 SortedKeyValueIterator 인터페이스의 기능을 재정의하는 방법은 무엇입니까?

모든 클래스가 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을 구현하려는 경우 나는 이러한 기능을 무시하는 방법.

답변

4

SortedKeyValueIterator - http://accumulo.apache.org/1.6/apidocs/에서 Javadoc을 살펴보십시오. 그것은 각 방법이 무엇을하기로되어 있는지에 대한 좋은 출발점입니다.

반복자를 작성하는 좋은 비유는 반복자가 작업중인 Accumulo 테이블을 단일 연결 목록 (정렬 된 순서)으로 생각하는 것입니다. next()는 목록의 다음 노드로 이동하고 seek()은 0에서 많은 노드로 건너 뛰고 앞으로/아래로 이동합니다. init()은 Accumulo 테이블 구성과 클라이언트 모두에서 필요한 구성을 제공합니다 (반복자는 Accumulo 서버에서 실행될 가능성이 큽니다). deepCopy()는 현재 반복기의 정확한 상태를 새 인스턴스로 복제해야합니다 (Object.clone()과 유사).

I는 사용자 반복자 두 가지 예를 제공 할 수

(클라이언트에서 직렬화 필요)

또한 Accumulo에 http://accumulo.apache.org/1.6/apidocs/org/apache/accumulo/core/iterators/user/package-summary.html

+1

몇 가지 중요한 추가 비트를 다른 제공 "사용자가 직면"반복자 좀 걸릴 수 있습니다 :은 "최고"키로 seek'd 범위의 첫 번째 키/값 쌍을 단) (추구 /값. next() 단계 이후 쌍. 따라서 호출자가 seek() 후 즉시 getTopKey()/getTopValue()를 호출하고 next() 호출 후에 다시 호출 할 것이라고 가정 할 수 있습니다. 또한 기본을 구현하므로 WrappingIterator를 확장하는 것이 좋습니다. – Christopher

+0

기능에 대한 명확한 설명을 제공해 주셔서 감사합니다 !! – Vaibhav

+1

도와 드리겠습니다. 원할 경우 https://issues.apache.org/jira/secure/Dashboard.jspa에서 문제를 제기 할 수 있으며 다음 릴리스에서 문서를 업데이트하려고 노력할 것입니다. – elserj