본문 바로가기
카테고리 없음

[하둡(Hadoop)] HDFS, Yarn, 맵리듀스(MapReduce)를 위한 유닛테스트 및 JUnit 예제

by 꼬마낙타 2019. 1. 28.
반응형

하둡 HDFS를 사용하는 프로젝트를 진행하다가 "어떻게 유닛 테스트를 작성할 것인가?"라는 질문을 스스로에게 하게 되었다. 유닛 테스트를 위한 별도의 클러스터를 구축해놓는 것도 웃기고, 실제 운영되는 클러스터에 테스트 부하를 쏘는 것도 웃기다. 유닛 테스트는 대부분 간단한 동작을 테스트 할 텐데 좀 더 가벼운 방법은 없을까?


다행히도 하둡은 JUnit 같은 유닛 테스트 작성을 위한 미니 클러스터(MiniCluster)를 제공한다. MiniDFS, MiniYARN, MiniMR 클러스터가 제공되며, 이 포스트에서는 MiniDFS 클러스터를 이용한 방법에 대해서 다뤄보겠다. 


Maven 설정

Java 프로그램의 경우 유닛 테스트인 JUnit에서 하둡의 미니 클러스터들을 사용하기 위해서는 dependency를 추가해줘야한다. 


<dependency>

    <groupId>org.apache.hadoop</groupId>

    <artifactId>hadoop-minicluster</artifactId>

    <version>2.7.3</version>

    <scope>test</scope>

</dependency>

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.12</version>

    <scope>test</scope>

</dependency>



MiniDFSCluster를 이용한 JUnit

MiniDFSCluster를 이용하여 JUnit 테스트 코드를 작성해보자.




랜덤 바이트를 컨텐츠로 갖는 HDFS 파일을 만들고 정상적으로 Read가 동작하는지 확인하는 테스트 케이스다. 읽는 동작이 제대로 되는지 System.out 으로 바이트를 출력해서 확인해봤다.


HDFS로의 파일 입출력은 일반적인 클러스터와 동일하다. MiniDFSCluster.Builder의 builder() 메소드 수행 이후 로컬에 MiniDFSCluster 네임노드가 구동된다. "hdfs://localhost" 호스트와 만들어진 클러스터의 cluster.getNameNodePort() 메소드를 호출해 얻어진 포트 번호를 이용해서 HDFS 클라이언트를 사용할 수 있다. 


사용이 끝난 MiniDFSCluster는 shutdown()  메소드를 이용해 정리할 수 있다. 

반응형

댓글