존재하는 HashSet을 사용하고 싶습니다./매핑되는 동안 한 파일에 대해 작동하고 다음 파일이 매핑 될 때 다시 설정/다시 작성됩니다. isSplitable을 재정 의하여 TextInputFormat을 수정하여 false를 반환하므로 파일이 분할되지 않고 전체적으로 Mappers에서 처리됩니다. 이런 식으로 할 수 있습니까? 아니면 Accumulo 테이블에 기록하는 횟수를 줄이는 다른 방법이 있습니까?맵 전용 맵핑 작업에 의해 맵핑되는 동안 오브젝트의 인스턴스를 하나의 파일과 연관시킬 수 있습니까?
내가 먼저 글로벌 변수를 원한다고 생각하지 않는다. 유일성을 보장하고 Accumulo 테이블에 적은 돌연변이를 쓰고 싶습니다.
내 프로젝트는 선형 누적 클라이언트 프로그램의 샤드 예제에서 Index.java 파일의 기능을 Accumulo에서 동일한 테이블을 생성하면서 mapreduce 기능을 사용하는 프로그램으로 변환하는 것입니다. 그것은 화두가되기 때문에 mapreduce가되어야하며, 본질적으로 테라 바이트의 데이터에 대한 선형 프로그램보다 빠르게 실행됩니다. http://grepcode.com/file/repo1.maven.org/maven2/org.apache.accumulo/examples-simple/1.4.0/org/apache/accumulo/examples/simple/shard/Index.java
이 프로그램은 Accumulo에 돌연변이를 작성하는 BatchWriter를 사용하고 파일별로을 수행합니다 여기
참조에 대한 색인 코드입니다. 필요한 것보다 많은 돌연변이를 작성하고 유일성을 보장하기 위해 (비록 Accumulo가 결국 압축을 통해 동일한 키를 병합한다고 생각하지만) Index.java는 단어가 이전에 실행되었는지 확인하는 데 사용되는 HashSet을 가지고 있습니다. 이것은 모두 비교적 이해하기 쉽습니다.지도 전용 mapreduce 작업으로 이동하는 것은 더 복잡합니다.
이 좀 나는 Accumulo 테이블을 본 적이 부분 출력에서 작동하는 것 같다 매핑에서 내 시도했지만, 선형 프로그램에 비해 정말 정말 느린 실행 Index.java
public static class MapClass extends Mapper<LongWritable,Text,Text,Mutation> {
private HashSet<String> tokensSeen = new HashSet<String>();
@Override
public void map(LongWritable key, Text value, Context output) throws IOException {
FileSplit fileSplit = (FileSplit)output.getInputSplit();
System.out.println("FilePath " + fileSplit.getPath().toString());
String filePath = fileSplit.getPath().toString();
filePath = filePath.replace("unprocessed", "processed");
String[] words = value.toString().split("\\W+");
for (String word : words) {
Mutation mutation = new Mutation(genPartition(filePath.hashCode() % 10));
word = word.toLowerCase();
if(!tokensSeen.contains(word)) {
tokensSeen.add(word);
mutation.put(new Text(word), new Text(filePath), new Value(new byte[0]));
}
try {
output.write(null, mutation);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
그리고 느린 문제는 ZooKeeper 및 Accumulo가 설치된 Hadoop의 단일 노드 인스턴스 인 테스트 인스턴스에서이 모든 것을 실행한다는 것입니다. 그렇다면 독창성을위한 솔루션을 찾아야합니다.
제공된 도움이나 조언을 크게 듣습니다.