2012-07-24 6 views
6

HDFS에 저장된 Avro 파일을 간단하게 읽으려고합니다. 나는 그것이 로컬 파일 시스템에있을 때 그러나 ....HDFS에서 간단한 Avro 파일 읽기

FileReader reader = DataFileReader.openReader(new File(filename), new GenericDatumReader()); 

for (GenericRecord datum : fileReader) { 
    String value = datum.get(1).toString(); 
    System.out.println("value = " value); 
} 

reader.close(); 

내 파일이 HDFS에, 그것을 읽는 방법을 알아 냈다. openReader에 Path 나 FSDataInputStream을 지정할 수 없습니다. 단순히 HDFS에서 Avro 파일을 읽는 방법은 무엇입니까?

편집 : SeekableInput을 구현하는 사용자 지정 클래스 (SeekableHadoopInput)를 만들어서이 작업을 수행 할 수 있습니다. 나는 이것을 github의 "ganglion"에서 "훔쳤습니다". 여전히,이를위한 Hadoop/Avro 통합 경로가있는 것처럼 보입니다.

감사

답변

21

(가 하둡에 따라 이후 브로 - mapred 서브 모듈에서,)를 FsInput 클래스이 작업을 수행 할 수 있습니다. Avro 데이터 파일에 필요한 검색 가능한 입력 스트림을 제공합니다.

Path path = new Path("/path/on/hdfs"); 
Configuration config = new Configuration(); // make this your Hadoop env config 
SeekableInput input = new FsInput(path, config); 
DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(); 
FileReader<GenericRecord> fileReader = DataFileReader.openReader(input, reader); 

for (GenericRecord datum : fileReader) { 
    System.out.println("value = " + datum); 
} 

fileReader.close(); // also closes underlying FsInput