본문 바로가기

Old Posts/Hadoop8

[Hadoop] 하둡 스트리밍(Hadoop Streaming)이란? 하둡 스트리밍(Hadoop Streaming)은 하둡과 함께 배포되는 유틸리티다. 하둡에서 MapReduce(이하 MR) 작업을 실행하기 위해서는 기본적으로 자바 언어를 이용해야 한다. 하지만 하둡은 하둡 스트리밍을 통해서 자바 이외에 파이썬이나 루비, Bash 스크립트 등으로도 MR 작업을 생성하고 실행할 수 있게 해준다. 하둡 스트리밍 동작 방식 하둡 스트리밍은 유닉스 스트림을 이용해 자바가 아닌 프로그램 혹은 스크립트가 MR 작업으로 동작하도록 해준다. 즉, 표준입력(stdin)과 표준출력(stdout)을 통해 입출력을 하는 프로그램과 스크립트는 하둡 스트리밍을 통해 MR의 Mapper 혹은 Reducer로 사용할 수 있다. 하둡 스트리밍은 다음과 같이 동작한다. 하둡 스트리밍 유틸리티는 Mappe.. 2022. 8. 2.
[Hadoop] Windows 환경에서 IOException 발생 케이스 - winutils.exe 파일 없음 윈도우 환경에서 Hadoop이나 HBase, Spark를 사용할 때 다음 에러를 만나게 되는 경우가 있다. 21:49:57.792 [main] ERROR org.apache.hadoop.util.Shell - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:382) ~[hadoop-common-2.7.4.jar:?] at org.apache.hadoop.util... 2022. 3. 5.
[Hadoop] HDFS 아카이브(HAR) 생성 및 사용법 예제 하둡 파일시스템, HDFS의 가장 큰 단점은 파일의 개수가 늘어나면 네임노드의 메모리 부하가 늘어난다는 점이다. 따라서 하둡 파일시스템을 사용할 때, 작은 파일을 여러개 생성하기보다는 큰 파일을 적게 생성해서 사용하는게 좋다. 하지만 일반 사용자들에게 HDFS를 오픈하면 작은 파일들이 여러개 생기는 경우를 피할 수 없다. 하둡은 이런 상황에 대비할 수 있게 HDFS위에 저장되는 파일의 개수를 줄일 수 있는 방안으로 HAR(Hadoop Archive) 기능을 제공한다. HAR(Hadoop Archive) 하둡의 아카이브는 우리가 일반적으로 사용하는 파일의 압축과 비슷한 개념이다. tar 명령으로 디렉토리에 존재하는 파일들을 하나의 아카이브 파일로 묶어주는 동작과 마찬가지로 하둡은 특정 디렉토리의 서브 디렉.. 2021. 8. 9.
[Hadoop] 하둡 클라이언트에서 커버로스(Kerberos) 인증 사용하기 - 여러 계정 인증 동시사용 (UserGroupInformation) 여러 사용자가 동시에 접근하는 하둡 클러스터를 서비스할 때, 데이터나 리소스에 대한 보안 강화를 위해 '커버로스(Kerberos)' 인증을 사용할 수 있다. 커버로스 인증을 사용하는 클러스터에 접근하려면 Principal과 Keytab 혹은 패스워드를 이용해 인증을 받고, 발급받은 커버로스 티켓을 이용해서 하둡을 사용하게 된다. HDFS 클라이언트가 네임노드 혹은 데이터 노드와 통신하면서 데이터를 받아오는 과정에서도 커버로스 인증을 사용할 수 있다. 하둡은 UserGroupInformation이라는 클래스를 이용해 커버로스 프로토콜을 사용할 수 있도록 프로그래머에게 편의를 제공한다. 메이븐 의존성 일단은 커버로스 인증을 사용하는 하둡 클라이언트를 테스트해보기 위해 다음 메이븐 의존성을 추가해보자. org.. 2021. 8. 8.
[Hadoop] TestDFSIO - 하둡 클러스터 성능 측정 도구 사용법 및 예제 구축한 하둡 클러스터의 입출력 성능을 측정하고 싶은 경우가 있다. 새로 구매한 서버들을 이용해서 클러스터를 구축했을 때 성능이 어느정도까지 뽑히는지 체크하거나 일정 수준 이상의 입출력 성능을 제공하기 위해서 어느정도의 장비를 투입해야하는지 가늠하기 위함이다. 하둡은 여러가지 클러스터 성능 측정 도구를 제공하고 있다. 그 중에 클러스터의 입출력 속도 측정을 위한 'TestDFSIO'라는 벤치마크 도구에 대한 사용법과 예제를 정리해보겠다. TestDFSIO란? 하둡 릴리즈의 'hadoop-mapreduce-client-jobclient-{버전}-tests.jar' 파일에 패키징되어 있는 TestDFSIO는 클러스터의 하둡 클러스터의 입출력 성능을 측정할 수 있는 도구다. 하둡 소스코드처럼 TestDFSIO .. 2021. 8. 8.
[Hadoop] HDFS, Yarn, MapReduce를 위한 유닛테스트 및 JUnit 사용법 및 예제 - MiniCluster 하둡 클러스터를 사용하는 클라이언트 프로그램을 작성하다보면 유닛테스트를 어떻게 해야하는지 고민이 생긴다. 유닛 테스트를 위한 테스트 클러스터를 별도로 구축해놓는 것도 이상하고, 실제 운영되는 클러스터에 유닛 테스트를 돌리는 것도 애매하다. 유닛 테스트는 대부분 간단한 동작만 테스트하는데 가벼운 방법이 필요하다. 다행히 하둡은 JUnit 같은 유닛 테스트 케이스 작성을 위한 '미니클러스터(Mini cluster)'를 제공한다. 하둡 클라이언트를 테스트하기위해 'MiniDFS', 'MiniYARN', 'MiniMR' 클러스터가 제공되며 이 포스트에서는 MiniDFS 클러스터를 이용해서 테스트케이스를 작성해보겠다. MiniCluster 의존성 설정 메이븐 프로젝트를 사용하는 경우 다음 의존성을 pom.xml .. 2021. 8. 8.
[Hadoop] 도커(Docker)로 하둡(Hadoop) 띄우기 하둠 HDFS 코드리뷰를 진행하면서 테스트용 클러스터를 만들 필요가 있었다. 실제 개발 장비에 설치되어 있는 하둡 클러스터를 이용해서 프로그램을 작성, 동작을 디버깅해볼 수도 있었지만 도커에 하둡을 띄워보면 어떨까하는 생각이 들어서 관련 자료를 찾아보며 정리를 했다. 하둡 도커 이미지 만들기 우선 하둡에 구동시킬 도커 이미지를 만들어보자. 우선 CentOS 이미지를 이용해 리눅스 컨테이너를 구동한다. docker run -it --name hadoop-base centos CentOS 컨테이너의 yum 패키지를 업데이트하고 필요한 라이브러리들을 설치한다. 필요한 라이브러리들은 다음 명령으로 설치할 수 있다. 이 과정에서 약간 시간이 걸린다. yum update yum install wget -y yum .. 2021. 8. 7.
[Hadoop] 'Unable to load native-hadoop library for your platform' 에러 하둡 클라이언트를 통해서 데이터노드(Datanode)에 있는 데이터를 읽다보면 로그 파일에 다음과 같은 에러가 찍혀있는 경우가 있다. Unable to load native-hadoop library for your platform ShortCircuit Read라는 기능의 코드리뷰를 하다가 원격 디버거로 들여다볼라고 돌렸는데 이런 에러가 발생했었다. 에러 메시지의 내용은 libhadoop 라이브러리가 로드되지 않았다는 의미다. 하둡 클라이언트의 동작에는 문제가 없다. 다만 ShortCircuit Read 기능이 제대로 돌지 않기 때문에 성능 저하가 발생한다. 해결방법 이 문제를 해결하기 위해 libhadoop 라이브러리를 제대로 로드할 수 있도록 설정을 변경해줘야한다. 일반적으로 libhadoop.so.. 2021. 5. 12.