[HADOOP] 어떻게 사용자 정의 RecordReader 및 InputFormat 클래스의 단위 테스트를 수행합니까?
HADOOP어떻게 사용자 정의 RecordReader 및 InputFormat 클래스의 단위 테스트를 수행합니까?
나는 map-reduce 프로그램을 개발했다. 사용자 정의 RecordReader 및 InputFormat 클래스를 작성했습니다.
매퍼 (mapper)와 감속기 (reducer)의 단위 테스트를 위해 MR 유닛 (MR Unit)과 모키토 (Mockito)를 사용하고 있습니다.
단위 테스트 RecordReader 및 InputFormat 클래스를 단위 테스트하는 방법을 알고 싶습니다. 이 클래스들을 테스트하는 가장 좋은 방법은 무엇입니까?
해결법
-
==============================
1.user7610 덕분에
user7610 덕분에
컴파일 된 및 다소 테스트 버전의 예제 코드에서 대답
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.mapreduce.InputFormat; import org.apache.hadoop.mapreduce.RecordReader; import org.apache.hadoop.mapreduce.TaskAttemptContext; import org.apache.hadoop.mapreduce.TaskAttemptID; import org.apache.hadoop.mapreduce.lib.input.FileSplit; import org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl; import org.apache.hadoop.util.ReflectionUtils; import java.io.File; Configuration conf = new Configuration(false); conf.set("fs.default.name", "file:///"); File testFile = new File("path/to/file"); Path path = new Path(testFile.getAbsoluteFile().toURI()); FileSplit split = new FileSplit(path, 0, testFile.length(), null); InputFormat inputFormat = ReflectionUtils.newInstance(MyInputFormat.class, conf); TaskAttemptContext context = new TaskAttemptContextImpl(conf, new TaskAttemptID()); RecordReader reader = inputFormat.createRecordReader(split, context); reader.initialize(split, context);
-
==============================
2.사용할 수있는 테스트 파일이 필요할 것입니다. 입력 형식이 FileInputFormat을 확장한다고 가정합니다. 이것을 가지고 있으면 LocalFileSystem (fs.default.name 또는 fs.defaultFS가 file : ///으로 설정된)을 사용하도록 Configuration 객체를 구성 할 수 있습니다. 마지막으로 파일의 경로, 오프셋 및 길이 (파일의 일부)로 FileSplit을 정의해야합니다.
사용할 수있는 테스트 파일이 필요할 것입니다. 입력 형식이 FileInputFormat을 확장한다고 가정합니다. 이것을 가지고 있으면 LocalFileSystem (fs.default.name 또는 fs.defaultFS가 file : ///으로 설정된)을 사용하도록 Configuration 객체를 구성 할 수 있습니다. 마지막으로 파일의 경로, 오프셋 및 길이 (파일의 일부)로 FileSplit을 정의해야합니다.
// DISCLAIMER: untested or compiled Configuration conf = new Configuration(false); conf.set("fs.default.name", "file:///"); File testFile = new File("path/to/file"); FileSplit split = new FileSplit( testFile.getAbsoluteFile().toURI().toString(), 0, testFile.getLength(), null); MyInputFormat inputFormat = ReflectionUtils.newInstance(Myinputformat.class, conf); RecordReader reader = inputFormat.createRecordReader(split, new TaskAttemptContext(conf, new TaskAttemptID()));
이제 독자가 반환 한 레코드가 예상 한 것과 일치한다고 주장 할 수 있습니다. 파일의 압축 된 버전을 만드는 것뿐만 아니라 분할의 오프셋과 길이를 변경하여 테스트해야합니다 (파일 형식이 지원하는지 여부).
from https://stackoverflow.com/questions/20371953/how-to-do-unit-testing-of-custom-recordreader-and-inputformat-classes by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 (Hadoop에서), 데이터를지도에 넣고 올바른 유형의 함수를 축소합니까? (0) | 2019.06.24 |
---|---|
[HADOOP] PIG에서 생성 된 bag (크기가 다를 수 있음)에서 첫 번째 튜플을 어떻게 추출합니까? (0) | 2019.06.24 |
[HADOOP] HBase에서 페이지 매김을 달성하는 방법? (0) | 2019.06.24 |
[HADOOP] 먼저 로컬 파일 시스템에 복사하지 않고 Java를 사용하여 HDFS에 저장된 파일의 압축을 해제 하시겠습니까? (0) | 2019.06.24 |
[HADOOP] 맵의 예상 값에서 키의 하둡 유형 불일치 텍스트 수신 값 LongWritable (0) | 2019.06.24 |