하나의 시스템에서 HDFS 클라이언트를 사용하여 HDSF 클러스터에서 분산 읽기를 구현할 수 있습니까?Map/Reduce없이 HDFS 분산 읽기
저는 3 개의 데이터 노드 (DN1, DN2, DN3)로 구성된 클러스터로 실험을 수행했습니다. 그런 다음 DN1에있는 클라이언트 프로그램에서 10 개의 독립적 인 파일에서 10 개의 동시 읽기를 실행하며 DN1에서 데이터를 읽는 것으로 나타났습니다. 다른 데이터 노드 (DN2, DN3)는 활동이 없음을 보여주었습니다 (디버그 로그로 판단).
모든 파일 블록이 3 개의 데이터 노드 모두에서 복제되었는지 확인 했으므로 DN1을 종료하면 데이터가 DN2 (DN2 만)에서 읽혀집니다.
읽는 데이터 양이 많아지지 않아서 (2GB에서 30GB로 시도) 도움이되지 않았습니다.
나는 여러 개의 큰 파일을 읽고 그 중 적은 양의 데이터 (몇 Kb)를 추출 할 필요가 있기 때문에 더 많은 서비스를 설정해야하기 때문에 map/reduce를 사용하지 않는 것이 좋습니다. 각 분할 작업의 HDFS 로의 출력. 오히려 결과를 데이터 노드에서 내 클라이언트 프로그램으로 직접 스트리밍하는 것이 좋을 것입니다. 나는 (jdk7)이 방식으로, 읽기/쓰기 데이터 SequenceFile
사용하고
은 :
//Run in thread pool on multiple files simultaneously
List<String> result = new ArrayList<>();
LongWritable key = new LongWritable();
Text value = new Text();
try(SequenceFile.Reader reader = new SequenceFile.Reader(conf,
SequenceFile.Reader.file(filePath)){
reader.next(key);
if(key.get() == ID_I_AM_LOOKING_FOR){
reader.getCurrentValue(value);
result.add(value.toString());
}
}
return result; //results from multiple workers are merged later
어떤 도움에 감사드립니다. 감사!
감사합니다. 그것은 그것을 설명한다! 프록시 팁 주셔서 감사. – rodion
Hadoop은 어느 노드가 어떤 랙에 있는지 어떻게 알 수 있습니까? - http://hadoop.apache.org/common/docs/current/cluster_setup.html#Hadoop+Rack+Awareness –
"angg"란 무엇입니까? –