Mapreduce-Job-Process

맵리듀스 잡은 클라이언트가 잡 실행을 요청하는 단계, 해당 잡이 초기화되는 단계, 잡을 실행하기 위한 태스크를 할당하는 단계, 할당된 태스크가 실행되는 단계, 마지막으로 잡이 완료되는 단계로 구성됩니다.

1. 잡 실행 요청

맵리듀스 애플리케이션인 클라이언트가 잡 실행을 요청하면 아래와 같이 작업이 진행됩니다.

  1. 클라이언트는 org.apache.hadoop.mapreduce.Job의 waitForCompletion 메서드를 호출해 잡 실행을 요청합니다. 이때 클라이언트의 요청은 Job의 내부 컴포넌트인 JobClient에 전달됩니다.

  2. JobClient는 잡트래커의 getNewJobId 메서트를 호출해 새로운 잡ID를 요청합니다. 잡트래커는 잡의 출력 파일 경로가 정상적인지 확인한 후 잡ID를 발급합니다. 참고로 JobClient와 잡트래커는 RPC로 통신하며, JobSubmissionProtocol에 정의된 프로토콜을 사용합니다.

  3. 클라이언트는 잡을 실행하는 데 필요한 정보를 잡트래커와 태스크트래커에게 공유해야 합니다. 그래서 JobClient는 다음과 같은 파일을 HDFS에 저장합니다.

    • 입력 스플릿 정보
    • JobConf에 설명된 정보
    • 잡 클래스 파일 혹은 잡 클래스가 포함된 JAR 파일
  4. JobClient는 잡트래커의 submitJob 메서드를 호출해 잡 실행을 요청합니다.

Read more

맵리듀스란?

맵리듀스는 HDFS에 저장된 파일을 분산 배치 분석을 할 수 있게 도와주는 프레임워크입니다. 개발자는 맵리듀스 프로그래밍 모델에 맞게 애플리케이션을 구현하고, 데이터 전송, 분산 처리, 내고장성 등의 복잡한 처리는 맵리듀스 프레임워크가 자동으로 처리해줍니다.

맵리듀스의 개념

맵리듀스(MapReduce) 모델은 맵(Map)과 리듀스(Reduce)라는 두 가지 단계로 데이터를 처리합니다.

  • Map : 입력 파일을 한 줄씩 읽어서 데이터를 변형(transformation)
    • 데이터 변형 규칙은 자유롭게 정의가 가능
    • 출력 또한 한 줄에 하나의 데이터가 출력
  • Reduce : Map의 결과 데이터를 집계(aggregation)
Read more

하둡 HDFS 입출력 따라해보기

Maven project에 입/출력 예제 코드 생성

우선 maven project 디렉토리로 이동해줍니다.

maven project를 만드는 방법을 모르는 분은 Maven으로 Java 프로젝트 시작하기라는 본문의 포스트를 참고해주세요.

./maven project path/src/main/java/package name/ 경로까지 들어오게되면 App.java라는 java 파일이 있는 위치까지 오게됩니다. (경로는 사람마다 다릅니다.)

필자는 프로젝트 명을 study-hadoop라고 지었고 package는 cpprhtn, 현재 경로는 /Users/bigdata/study-hadoop/src/main/java/cpprhtn 입니다.

이후에 아래와 같은 코드를 짜줍니다.

Read more

Hadoop HDFS fs Command Error

하둡 HDFS 명령어란

하둡은 사용자가 HDFS를 쉽게 제어할 수 있게 shell 명령어를 제공합니다. 이 shell 명령어는 fs(FileSystem Shell)라고 하며 아래와 같이 사용하게 됩니다.

1
2
3
4
./bin/hadoop fs -[cmd] [args]

# PATH setting이 된 경우
hadoop fs -[cmd] [args]

에러가 뜨는 경우 (WARNING은 해당사항 X)

일단 당연하게도 에러가 발생했을때, 해당 에러명을 복사해서 구글링을 해보는 방법이 첫번째 입니다.

그래도 해결되지 않는 경우에 최후의 수단으로 아래와 같은 방법을 통하여 namenode를 format해버리는 방법이 있습니다.

1
2
3
4
5
6
7
8
9
10
11
# hadoop를 실행중이라면 종료
stop-all.sh

# namenode format
hadoop namenode -format

# 하둡 실행
start-all.sh

# 명령어 작동 확인
hadoop fs -[명령어] [파라미터]

HDFS란?

HDFS(Hadoop Distributed File System)는 수십 테라바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템입니다.

1. HDFS란?

기존에도 DAS, NAS, SAN과 같은 대용량 파일 시스템이 있었으나 HDFS와 기존 대용량 파일 시스템의 가장 큰 차이점은 저사양 서버를 이용해 스토리지를 구성할 수 있다는 것입니다.

HDFS를 사용하면 고사양 서버에 비해 매우 저렴한 저사양 서버 수십, 수백대를 묶어서 하나의 스토리지처럼 사용할 수 있으며 물리적으로는 분산된 서버의 로컬 디스크에 저장되어있지만 HDFS에서 제공하는 API를 이용하여 파일의 읽기 및 저장을 마치 한 서버에서 작업하듯이 구성할 수 있습니다.

그렇다고 HDFS가 기존 대용량 파일 시스템을 완전히 대체하는 것은 아닙니다.

고성능, 고가용성이 필요한 경우에는 SAN을, 안정적인 파일 저장이 필요한 경우에는 NAS를 사용합니다.

또한 트랜잭션이 중요한 경우에도 HDFS가 적합하지 않으며, 대규모 데이터를 저장하거나, 배치로 처리를 하는 경우에 HDFS를 사용하면 됩니다.

Read more

Installing hadoop on MAC OS M1

M1 맥북에서 하둡 환경을 구성하다보니 수많은 블로그를 참고하였고, 설명이 제각각이라 그대로 따라만 하면 설치할 수 있도록 정리해보았습니다.

1. Java JDK 설치

Java JDK는 intel용을 설치하면 로제타2를 통해 돌아가므로

M1칩에서 네이티브로 돌아가는 Azul의 OpenJDK(download)를 설치하면 됩니다.

OpenJDK

java-8 lts / mac os / arm64 옵션이 맞는지 확인하고나서 .tar.gz 파일을 다운받고, 다운받은 파일을 더블클릭하여 실행시키면 설치가 진행됩니다.

이후에 터미널창을 열고 아래와 같이 Java path를 설정하시면 됩니다.

Read more