HDFS를 정리해 봤으니 이제 YARN을 정리해봅니당



1. YARN

    • Yet Another Resource Negotiator의 약자. 0.23대 버전에서 소개되어 2.0버전을 이끌게 되었습니다. (MRv2라고도 합니다.)
    • 분산 클러스터 환경에서 자원 관리에 대한 부분을 모두 YARN에게 맡김으로서 MR이 아닌 다른 서비스에서도 사용 가능하도록 구성되었습니다.

2. Architecture

1) Resource Manager(RM)

        • 마스터 노드에 존재하며, 기본적으로 한개만 존재하지만 HA를 위해 여러개가 존재할 수 있습니다.
        • 클러스터 전체 노드들과 통신하면서 상태를 조절하기 때문에, 개별 노드에 독립적으로 구성하여 병목이 발생하지 않게 해야 합니다.
        • 클러스터 내의 자원을 총괄하여 관리합니다.
        • 어플리케이션이 실행될 때, 필요한 YARN 클러스터 내부의 리소스를 할당해줍니다.

2) Node Manager(NM)

        • 클러스터 내 개별 노드에서 각각 동작합니다.
        • 리소스 매니저에게 각 노드의 상태 정보를 제공합니다.
        • 어플리케이션이 실행될 때, 컨테이너가 생성되는데 이를 실행할 환경을 구성하고 컨테이너의 자원 사용 상황을 주시하여 요청한 리소스를 넘는지 확인합니다. (넘으면 kill 시킵니다.)


3.  Process

yarn 동작에 대한 이미지 검색결과

    • 마스터 노드에 리소스 매니저가 있습니다.
    • 각 워커 노드에 노드 매니저가 있습니다.
    • 리소스 매니저는 어플리케이션 매니저(Applications Manager, 이하 ASM)와 스케쥴러를 포함하고 있습니다.
    • 외부로부터의 요청이 없으면 노드 매니저는 자신의 상태를 계속해서 리소스 매니저에 전송하고, 리소스 매니저는 클러스터 전체 자원 상황만 관리하고 있습니다.
    • 이제 어플리케이션이 클라이언트로부터 제출됩니다. 시~작!
    1. 사용자가 어플리케이션을 제출, 리소스 매니저의 ASM이 이를 담당하게 됩니다.
    2. ASM은 클러스터 어딘가에 어플리케이션 마스터(Application Master, 이하 AM)를 생성합니다. 또한, ASM은 AM이 비정상 종료되면 다시 시작시켜서 작업을 진행할 수 있도록 합니다.
    3. AM은 RM에 있는 스케줄러에 자원을 요청하고 RM내의 스케줄러는 전체 클러스터의 자원 상황을 고려하여 어떤 노드에서 작업을 시작하면 좋을지 판단하여 알려줍니다.
    4. AM은 RM으로부터 전달받은 작업을 수행할 노드의 NM에게 컨테이너를 요청합니다.
    5. NM은 해당 노드에 어플리케이션의 세부 작업을 진행할 컨테이너를 생성하고 환경을 구성해줍니다.
    6. 컨테이너는 진행 상황을 AM에게 전달합니다. 만약, 이 단계에서 장애가 발생하면 3번부터 다시 시작합니다.
    7. 작업이 종료됩니다. AM과 컨테이너는 필요하지 않으므로 종료되고, 잡 히스토리 서버를 두어 작업 로그를 유지합니다.


머리속에 다시금 새기기 위해 정리가 필요하여 남겨봅니다.


1. HDFS

    • Hadoop Distributed File System의 약자. 빅데이터를 안전하게 저장하기 위한 파일 시스템.
    • 2003년도에 The Google File System으로부터 시작되었고 이 파일 시스템은 빅 데이터를 처리해야하므로 기본적으로 확장성 있게 설계되었으며, 큰 규모로 분산 저장/복제가 가능하도록 설계되었습니다.
    • 많은 서버들이 분산으로 데이터를 저장해야 하므로 각각의 서버의 고장으로부터 안전할 수 있도록 fault-tolerance가 고려되어있고 여러명의 사용자로부터 처리요청을 받게 되므로 전체적인 성능이 멀티테넌시 환경에서 높게 나오도록 설계되었습니다.
    • low latency보다는 high throughput 중점으로 되어있다. 즉, 작은 파일을 대량으로 처리하는 것 보다 큰 파일을 배치로 처리하는데 효율적이라는 의미입니다. 따라서 자동적으로 실시간 처리보다는 한번에 많은 작업을 처리하는 배치 처리에 맞게 구성이 되어있는 것이죠.


    • 또한, HDFS에 저장된 데이터 블록은 immutable합니다. 이 말은 HDFS가 WORM(Write-Once, Read-Many)라는 말과도 일맥상통합니다.
    • MR을 통해 분석되는 파일들은 수정이 필요하지 않고, 중간결과 파일도 독립적으로 저장됩니다. 그 뿐만 아니라 HDFS에서는 replication도 지원하는데, 수정 작업이 들어올 경우, 분산되어 있는 모든 replica를 찾아서 내용을 수정해야 하기 때문입니다.


2. Architecture

hdfs architecture에 대한 이미지 검색결과

    

  • HDFS의 기본 구조는 위 그림과 같이 구성되어 있는데, 크게 네임 노드와 데이터 노드로 나눌 수 있습니다.


1) 네임 노드(Name Node)

  • HDFS에 저장된 데이터의 모든 메타정보를 메모리에 관리하고 있다가 사용자의 요청이 있을 시에 빠르게 전달합니다.
  • 메타데이터는 파일 시스템의 디렉터리 이름과 구조, 파일 이름과 해당 파일을 여러 블록으로 나눈 목록을 갖고 있습니다. 이 목록으로 실제 데이터 노드에 저장되어 있는 데이터 블록을 찾아갈 수 있습니다. 저장되는 메타데이터의 종류 대해 조금 더 살펴보면
    • 디렉토리 구조 : HDFS의 디렉토리 구조도 일반 파일 시스템과 동일하게 트리 구조로 되어있습니다. 하지만 실제로 디렉토리를 생성하면 메타데이터에만 존재하고 데이터 노드에는 아무 일도 발생하지 않습니다.
    • 파일 : HDFS의 파일도 일반 파일 시스템과 동일하게 크기, 생성 시간, 권한, 소유자, 그룹 등과 같은 정보를 갖고 있습니다.
    • 블록 : HDFS는 하나의 파일을 일정한 크기로 쪼개서 데이터 노드에 나누어 저장하는데 이를 블록이라고 합니다. 이렇게 나누게 되면 큰 파일도 손쉽게 나눠서 저장할 수 있으며, 후에 특정 파일에 대한 처리를 할 때에도 커다란 파일을 메모리에 다 올리지 않고, 작은 블록만을 메모리에 올려서 처리하는 일이 가능해집니다. 블록의 크기는 기본적으로 64M이며, 블록으로 파일을 나누었으므로 그 순서 또한 네임 노드에 함께 저장됩니다.
        - 블록의 크기에 따른 장/단점 : 블록의 사이즈를 크게 결정할 경우, 클라이언트와 네임 노드의 통신 횟수가 줄어듭니다. 하나의 파일을 저장하기 위해 각 블록을 요청할 때마다 네임 노드와 통신을 해야 하는데, 블록 크기가 크기 때문에 그 만큼 블록의 갯수는 줄어들게 되기 때문입니다. 이 때문에 네임 노드의 부하가 줄어들게 됩니다.
        - 또한 블록이 커지게 되면 replica등의 정보도 줄어들어 메타데이터의 크기도 줄어들게 되고 이는 사용 메모리 공간이 줄어드는 결과로 나타납니다.  하지만, 사용자 데이터를 저장하기 위해서 큰 블록을 할당했는데, 작은 파일만 쓰게 된다면 해당 블록은 파일 사이즈 만큼만 할당되어 기본 크기보다 작아지게 되는데 예를 들어, 기본값으로 64MB의 블록 크기를 갖는 시스템에서 32MB의 파일 4개가 각각의 블록에 저장되면 HDFS블록은 4개가 필요하게 되고, 블록들을 위한 메타데이터도 4개가 생성됩니다. 하지만 128MB파일이 들어오면 2개의 HDFS블록만 생성되면 되겠죠. 이와 같이 블록의 크기가 크게 되면 불필요하게 HDFS블록을 생성해야 하는 문제가 있고 이로 인하여 부하가 발생할 수 있다고 합니다. (물론 HAR등과 같이 다른 파일을 하나의 블록에 저장하도록 하는 메카니즘도 존재합니다.)
    • 데이터 노드 정보 : 블록들을 잃어버리지 않기 위해 replica를 생성하는데 이런 블록들이 저장되는 데이터 노드의 위치 정보가 저장됩니다.

  • 데이터 노드들의 상태 정보를 유지하고 관리합니다.

    • 현재 HDFS에 등록되어 있는 데이터 노드의 목록과 현재 동작이 가능하지 등을 지속적으로 heartbeat를 통해 관리하게 되고 이 정보를 이용해서 새롭게 추가되는 데이터 블록이 어디에 저장되어야 하는지, replication이 제대로 이루어지고 있는지 등을 알아낼 수 있습니다.

    • 조금 더 상세히 살펴보면, 클라이언트는 데이터를 read혹은 write할 때, 메타데이터를 얻기 위해 네임 노드와, 실제 사용자 데이터를 읽기/쓰기위해 데이터 노드와 통신합니다. 처음에 클라이언트가 데이터를 HDFS에 쓰기 위해서는 어디에 업로드 해야하는지 알아야 하고 이 정보는 오직 네임 노드에서 메타데이터를 얻어와야만 알 수 있습니다. 따라서 업로드 하고자 하는 파일의 정보를 네임 노드에게 요청하게 되고, 요청을 받은 네임 노드는 특정 데이터 노드를 선정하여 해당 정보를 클라이언트에게 전송합니다. 이 정보를 받은 클라이언트는 직접 데이터 노드와 통신하여 업로드 과정을 마무리합니다.

    • Heartbeat과 Re-replication : 보통 이런 분산 클러스터들은 일정한 주기로 하트비트를 전송(기본값 3초)하여 자신이 동작 중임을 알려주게 됩니다. 하둡의 경우에는 데이터 노드에서 네임 노드로 하트비트를 전송하게 되고, 네임 노드가 이를 받아 각 데이터 노드의 자원과 동작여부, 동작하지 않는 서버의 차단 등을 실행합니다.

    • 특정 데이터 노드에서 문제가 발생한 경우, 네임 노드에서 데이터 전송을 처리 및 해당 데이터 노드에 저장된 블록들은 사용 불가능하다고 판정하게 되고, 다른 데이터 노드에 복제되어 있던 블록을 가지고 설정된 기본 복제 수(기본값 3)에 맞게 다른 데이터 노드에 저장하게 됩니다. 

    • Data re-balancing : 하둡에 추가로 데이터 노드를 붙이는 경우, 기존에 존재하는 데이터 노드에는 데이터가 존재하고, 추가된 노드에는 데이터가 없게 됩니다. 이 상태로는 읽기/쓰기에 불균형이 생기므로, 효율적인 병렬 처리를 위하여 기존 블록들을 신규 데이터 노드에 옮기는 작업을 합니다. 데이터 재 배치를 하게 되면 읽기/쓰기가 균형이 맞게 되므로 이용률을 고르게 할 수 있지만 재 배치를 수행하는 동안은 데이터 노드와 네트워크에 부하가 발생할 수 밖에 없습니다. 따라서 이 작업은 자동으로는 이루어지지 않고 수동으로만 동작 가능합니다.


2) 세컨더리 네임 노드(Secondary Name Node)

  • 앞서 네임 노드에 모든 메타데이터들이 저장된다고 말씀드렸습니다. 그렇다면 이 네임 노드에 문제가 생겨서 다운된다면 어떻게 될까요?
  • 이와 같이 네임 노드가 다운된다면 디렉토리 구조 및 블록의 정보를 잃게 되는데 이를 SPoF(Single Point of Failure)문제가 있다 라고 합니다.
  • 네임 노드에서는 모든 메타데이터 관련 명령 수행 목록을 Edits라는 파일에 기록하도록 되어 있는데요. 이 기법은 ext4에서 적용된 journaling이라는 기법과 동일합니다. 평소에 문제가 생기면 이 파일을 이용해서 메타데이터를 복구할 수 있습니다.
  • 하지만 이 Edit파일도 너무 많이 쌓이게 되면 그만큼 처리하는데 많은 시간이 필요하게 됩니다. 이 문제를 해결하기 위해서 FsImage파일이 있는데, 이 FsImage파일은 Edits파일을 병합하여 불필요한 내용을 지우고 빠르게 복구할 수 있도록 합니다.
  • 세컨더리 네임 노드에서는 네임 노드가 다운되었을 때, 그 자리를 대신하는게 아니라 Edits파일을 이용해서 주기적으로 FsImage파일을 병합하는 역할을 합니다. 이 작업을 checkpoint라고 하는데 이 이유로 '세컨더리 네임 노드'를 '체크포인트 노드' 라고 하기도 합니다.
  • 다른 노드들과는 전혀 통신하지 않고, 일정 시간이 되었을때, 또는 네임 노드의 Edits파일의 크기가 지정한 크기보다 커지면 Edits파일을 가져와서 병합하여 FsImage파일을 만들고, 이를 다시 네임 노드로 넘겨줍니다. 물론 이 조건들은 변경 가능합니다.


3) 데이터 노드(Data Node)

  • 데이터 노드에서는 사용자의 데이터를 실제로 저장합니다. 커다란 파일을 처리하기 위하여 블록이라는 단위로 파일을 잘라 분산 저장한다고 말씀드렸습니다. HDFS에서는 블록이 할당되어도 블록 크기만큼 쓰지 않으면 블록 크기만큼 유지되는 것이 아니라 해당 파일의 크기만큼만 할당됩니다. 이제 데이터 노드에서의 읽기/쓰기와 복제되는 과정을 알아보겠습니다.
  • Data read :
    1. 어플리케이션이 클라이언트에게 특정 경로에 있는 파일을 요청
    2. 클라이언트에서 네임 노드에게 해당 파일의 블록이 있는 위치를 요청
    3. 네임 노드에서 블록 리스트가 담긴 메타데이터를 클라이언트에 전송
    4. 클라이언트는 블록 리스트를 통해서 데이터 노드에 접근하여 해당 블록 요청
    5. 데이터 노드가 해당 블록 전송
    6. 클라이언트가 어플리케이션에 해당 파일 전달
  • Data write / replication : HDFS에서는 사용자가 파일을 업로드하는 동시에 여러 데이터 노드에 존재할 수 있도록 복제를 수행하게 됩니다. 복제를 수행하는 과정에서도 데이터를 유지하기 위해서 복제 파이프라이닝을 사용하는데 그 순서는 아래와 같습니다.
    1. 클라이언트가 데이터를 전송하기 위해서 네임 노드에 파일 업로드 요청
    2. 네임 노드가 특정 블록을 업로드 할 데이터 노드의 정보를 알려줌
    3. 첫번째 데이터 노드에 블록 업로드
    4. 첫번째 데이터 노드에서 복제를 수행할 다른 데이터 노드로 블록 복제 (복제 수에 따라 해당 단계 반복)
    5. 복제가 완료되었을 경우, 자신에게 복제를 요청한 데이터 노드로 완료 응답
    6. 파일이 모두 데이터 노드에 올라갈 때까지 2~4번 반복


Hadoop이 정상적이지 않은 방법으로 종료 되었을 때 발생하는 에러

정상적이지 않은 방법으로 hadoop이 꺼지게 되면, name node 가 safe모드로 이동한다.


$ hadoop dfsadmin -safemode leave

Safe mode is OFF 라는 메세지가 나온 후, 다시 구동

저번엔 쉽게쉽게 됐었는데 이번엔 apt-get으로 설치하는데 많이 애를 먹었다 = =)
설치 해봅시당!

OS : Ubuntu 13.04 / 3.8.0-33-generic
       CentOS 6.4 / 2.6.32

1. Introduction

  Ganglia는 모니터링 툴로 해당 노드의 CPU, Memory, Network등의 사용량을 그래프로 나타내 준다.
  총 3개로 나눠볼 수 있다.

- gmond : 상태를 직접 모니터링하는 데몬, 각 노드에 설치해서 gmetad가 설치된 곳으로 현재 상태를 전송한다.

- gmetad : gmond에서 보내온 데이터를 모아 볼 수 있게 수집한다.

- gnaglia-webfrontend : gmetad를 설치한 곳에서 gmond를 통해 수집한 데이터를 웹을 통해 볼 수 있게 한다.


2. Base

1) Ubuntu
- apache + php
(아래는 apt-get과 yum으로 ganglia설치 할 때 의존성에 의해 같이 설치되므로 생략 가능)
- rrdtool
- libganglia1

3. Ganglia

1) Install

Ganglia meta daemon을 둘 노드 한곳과 나머지 노드를 구분하여 설치한다.
모니터링만 할 노드에는 ganglia-monitor(ganglia, gmond)만 설치하면 된다

- Ubuntu
$ apt-get install ganglia-monitor, gmetad, ganglia-webfrontend

- CentOS
 rpmforge repository 추가
$ rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
$ yum install ganglia ganglia-gmetad ganglia-gmond ganglia-web

설치 중 아파치 재시작을 물어온다. 재시작 두번~
자동으로 실행된 서비스들을 내리자. 나는 스크립트가 뭔가 이상한지 start/stop이 안된다. 일단 내리자.

$ service ganglia-monitor(gmond) stop
$ service gmetad stop

2) Configuration

(1) Ganglia Meta Daemon

$ vi /etc/ganglia/gmetad.conf

data_source "Cluster" node1:8649 node2:8649 ....
....

gridname "Hadoop"
...

Ganglia는 rrdtool을 사용해서 각종 metrics를 표현해준다. 따라서 gmetad가 설치된 노드에 rrdtool을 저장할 곳의 권한이 있어야 한다.
기본값은 /var/lib/ganglia/rrdtool 인듯

(2) Ganglia Monitoring Daemon

$ vi /etc/ganglia/gmond.conf

globals {
...

user = input_user_who_use_ganglia"
...

}

cluster {
    name = "Hadoop"
    ownder = "input_user_who_use_ganglia"

}

udp_send_channel {
    host = node1
    port = 8649
    ttl = 1
}

udp_recv_channel {
    port = 8649
}

...

/* 이 아래에는 각 metric에 대해 time threshold를 수정하는 변수값들이 있다. */

- CentOS를 위한 자동 실행 설정
$ chkconfig gmond on
chkconfig gmetad on

(3) Firewall

$ vi /etc/sysconfig/iptables
    -A INPUT -m udp -p udp --dport 8649 -j ACCEPT
    -A INPUT -m udp -p tcp --dport 8649 -j ACCEPT
$ service iptables restart

(4) Hadoop-Ganglia 

hadoop관련 metrics설정 (for hadoop-2.2.0)
$ vi  /where_hadoop_located/etc/hadoop-metrics2.properties

*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10

namenode.sink.ganglia.servers=name.mdms:8649
datanode.sink.ganglia.servers=name.mdms:8649
jobtracker.sink.ganglia.servers=name.mdms:8649
tasktracker.sink.ganglia.servers=name.mdms:8649
maptask.sink.ganglia.servers=name.mdms:8649
reducetask.sink.ganglia.servers=name.mdms:8649  


Mahout은 간단히 설명하고 빠른 설치 ㄱㄱ


1. Introduction

Hadoop환경에서 쓸 수 있는 기계학습 library모음을 제공한다. 
  또한, 관련된 Classification, Clustering, Collaborative Filtering에 관련된 기본적이고 대표적인 알고리즘들이 미리 구현되어 있다. 
  Hadoop환경이니까 당연히 Map/Reduce로 구동된다.
  2014년 1월 17일 현재 0.8버전이 최신 버전이다.


2. Installation

1) Download

$ wget http://ftp.daum.net/apache/mahout/0.8/mahout-distribution-0.8.tar.gz
역시 컴파일 따위 없다. 걍 컴파일 되어 있는거 받아서 쓰는거다.

2) Env var

$ vi ~/.bash_profile

export MAHOUT_HOME=알아서
export PATH=$PATH:$MAHOUT_HOME/bin

$ source ~/.bash_profile
$ mahout --help

3) Let's do something

(1) Data download for test

$ wget http://archive.ics.uci.edu/ml/databases/synthetic_control.data

(2) Data store to HDFS

$ hadoop fs -put synthetic_control.data /알아서HDFS/synthetic_control.data

(3) RUN!!

$ mahtout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job --input /알아서HDFS/synthetic_control.data --output /알아서HDFS/output_dir -t1 20 -t2 50 -k 5 -x 20 -ow

3. Reference

대용량 데이터 분석 및 처리를 위한 Hadoop & NoSQL / 길벗출판사
http://blog.daum.net/caisa/109

자세히 쓰자면 잡소리도 많이 들어가고 분량도 길어지니 대충 적어보자

OS : Ubuntu 12.10


1. Base

1) User setting

$ sudo groupadd hadoop
$ sudo useradd -g hadoop hadoop -s /bin/bash -m
$ passwd hadoop

2) SSH

$ ssh-keygen -t dsa -P"" -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
$ ssh localhost

3) JDK

$ sudo apt-get install openjdk-7-jdk


2. Hadoop

Pseudo-Distribute 모드로 일단 셋팅해보자

1) Install

$wget http://ftp.daum.net/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
$ tar xvzf ~

컴파일 그딴거 없다 압축 풀어서 쓰자

2) Env var

$ vi ~/.bash_profile

export JAVA_HOME= 알아서
export HADOOP_HOME=알아서
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

$ source ~/.bash_profile


3) version test

$ hadoop version


4) Hadoop settings

  2.0부터 디렉토리 구조가 조금 변경되었다. conf디렉토리가 없어지고 etc/hadoop 안에 대부분의 설정 파일들이 들어있다. 하둡 서버를 실행시키는 스크립트들은 sbin/으로 들어갔다.
  설정 시작!

(1) HDFS settings

#etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9001</value>
    </property>
</configuration>


#etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/알아서 하둡 파일 시스템 내부 namenode 경로</value>
    </property>
    <property>
        <name>dfs.datanode.name.dir</name>
        <value>file:/알아서 하둡 파일 시스템 내부 datanode 경로</value>
    </property>
    <property>
        <name>dfs.namenode.http-address</name>
        <value>0.0.0.0:50071</value>
    </property>
</configuration>


$ mkdir 하둡_파일_시스템_내부_namenode와_datanode_경로
$ hdfs namenode -format
$ sbin/start-dfs.sh
(hadoop-daemon.sh start namenode 같이 하나씩 start도 가능)

$ jps
NameNode
SecondaryNameNode
DataNode
Jps

(2) YARN settings

#etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>


#etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

#빨간 부분을 꼭 언더바(_)로 작성해야 하다.


#etc/hadoop/yarn-env.sh
#파일에 맨 처음에 다음 내용 추가

export HADOOP_PREFIX=알아서 하둡 위치
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}

...

$ sbin/start-yarn.sh
(yarn-daemon.sh start {resourcemanager, nodemanager}, mr-jobhistory-daemon.sh start historyserver로 하나씩 start도 가능)


3. Let's do something

$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi -Dmapreduce.clientfactory.class.name=org.apache.hadoop.mapred.YarnClientFactory -libjars share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar 16 10000


4. Reference

대용량 데이터 분석 및 처리를 위한 Hadoop & NoSQL / 길벗출판사
http://raseshmori.wordpress.com/2012/09/23/install-hadoop-2-0-1-yarn-nextgen/
http://blog.daum.net/caisa/109

1. Install required software

1) Java
2) Ant
3) GNU tar
4) GNU sed
5) GNU make
6) zlib
7) Build-essential
8) Openssl 
9) libssl-dev
10) gpt-autotools

2. Environment variables setting & add user

* using 'which' command check where softwares installed.

1) JAVA_HOME
2) ANT_HOME
3) GLOBUS_LOCATION 

* useradd --ingroup globus --home /home/globus --shell /bin/bash globus
* mkdir /usr/local/globus                            (make globus install dir)
* chown globus:globus -R /usr/local/globus (and change  permission)

Windows7을 기반으로 Cygwin을 사용하여 설치합니다.

1. 다운로드
설치에 필요한 파일들을 다운로드 합니다.
  
1) Cygwin
2) Java
2) Hadoop
3) Eclipse
 
※ Caution : 설치에 사용한 버전은 Cygwin 1.7.9, jdk 1.6.0_25, Hadoop 0.20.2, Eclipse Europa 3.3.2 입니다.
               hadoop 0.20.203과 0.21.0 버전은 아직 많이 불안정한듯 합니다. 설치가 불가능했습니다. ㅠㅠ               

2. 설치
1) Cygwin 
1. Install from Internet
2. Cygwin이 설치될 장소
2. Download 받은 설치 파일이 저장될 장소
4. Direct Connection
5. Download 받을 사이트 선택
6. Download가 완료된 후, select package에서 Net 부분의 Openssh와 Openssl부분에 체크하여 추가 설치
7. 환경변수 Path에 Cygwin이 인스톨 된 폴더와 그 아래의 bin폴더 두군데를 추가
    (default값으로 설치했다면 path 뒤에 ";C:\cygwin\bin;C:\cygwin\usr\bin" 를 추가하면 된다.)
2) Java 
1. Installation
2. 환경변수에 새로운 환경변수를 추가한다.
    변수 이름 : JAVA_HOME
    변수 값 : [자바가 설치된 폴더 지정(default값으로 설치했다면 C:\Program Files\Java\jdk1.6.0_25)]
3. 환경변수 Path에 자바가 설치된 폴더 아래의 bin폴더를 추가
    (마찬가지로 설치시에 변경없이 설치했다면 C:\Program Files\Java\jdk1.6.0_25\bin을 추가하면 된다.)

3) Hadoop
1. Cygwin창을 열어서 "explorer ."
2. 다운받은 하둡 파일을 이 사용자 폴더에 넣는다. 
3.  Cygwin에서 작업한다.
Cardia@Cardia ~
$ tar -xvzf hadoop-0.21.0.tar.gz
$ cd conf
$ explorer .
4. 하둡 환경설정을 한다. 열린 폴더에서 *-site.xml 파일을 텍스트 에디터로 편집한다.
core-site.xml:
<configuration>
    <property> 
        <name>fs.default.name</name> 
        <value>hdfs://localhost:9000</value> 
    </property> 
</configuration>
hdfs-site.xml:
<configuration> 
    <property> 
        <name>dfs.replication</name> 
        <value>1</value> 
    </property> 
</configuration> 
mapred-site.xml:
<configuration> 
    <property> 
        <name>mapred.job.tracker</name> 
        <value>localhost:9001</value> 
    </property> 
</configuration> 
5. conf 폴더에서 나와서 bin폴더로 들어간다. hadoop 파일을 텍스트 에디터로 열어서 $JAVA_PLATFORM 을 찾은 다음 그 줄에 ${JAVA} 부분 앞뒤로 ""를 붙여준다 -> "${JAVA}"
   (버그가 신고되었지만 아직 고쳐지지 않았음)

6. Cygwin에서 작업한다.
Cardia@Cardia-PC ~
# SSH관련 setting
$ ssh-host-config
# 첫번째 권한 분리 질문에 no라고 대답
# 두번째 sshd를 서비스로 등록 하는 질문에 yes라고 대답
# 값을 물어오는 질문에 ntsec 입력
# 다음 질문에선 엔터를 치고 비밀번호를 물어오면 입력한다. 
# 제어판->관리도구->서비스에서 CYGWIN sshd 서비스를 시작한다.

# 이클립스 플러그인을 사용하기 위해 하둡 스크립트와 ssh 인증을 사용한다.
$ ssh-keygen
# 나오는 질문에 전부 엔터
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
# ssh 연결 확인
$ ssh localhost
# 연결확인 질문이 나오면 yes입력 그 후 프롬프트가 뜨면 인증 성공
$ logout

7. Namenode format
Cardia@Cardia-PC ~
$ cd hadoop-0.20.2 (하둡 설치 디렉토리로 이동)
$ mkdir logs
$ bin/hadoop namenode -format

# format완료 후 cygwin을 다섯개 구동시킨 후 각각 하둡 디렉토리로 이동 후 동작시킨다

$ bin/hadoop namenode
$ bin/hadoop secondarynamenode
$ bin/hadoop datanode
# Starting Periodic block scanner. 메세지를 기다린 후
$ bin/hadoop jobtracker
$ bin/hadoop tasktracker

8. 에러 없이 구동되는 화면을 볼 수 있다.

4) Eclipse
1. 적당한 곳에 압축을 푼다.
2. hadoop이 설치된 폴더 안에 contrib 폴더로 가보면 eclipse-plugin 폴더가 있다.
    이 안에 있는 hadoop-0.20.2-eclipse-plugin.jar 파일을 이클립스의 압축을 푼 폴더 안 plugins 폴더에 넣어준다.

3. 이클립스를 실행시킨다.
4. 오른쪽 맨 위에 perspective 선택 메뉴에서 Others를 선택한 다음  Map/Reduce를 선택한다.


5. 아래의 Map/Reduce Locations 탭에서 New hadoop Location을 선택하고 입력
    (Map/Reduce Locations탭이 없으면 Windows->view->others에서 찾으면 된다.)

Location name : localhost
Map/Reduce Master
Host : location
port : 9001
DFS Master
Use M/R Master host 체크
port : 9000

왼쪽 Project Explorer에서 DFS Locations 하위 폴더로 tmp 파일이 보이면 연결 성공

6. new -> Other -> Map/Reduce Project 선택해서 새 프로젝트 만듬
    project wizard 창에서 Configure Hadoop install directory 선택 후
    Hadoop installation directory에 하둡이 설치된 디렉토리
    (Default : "c:\cygwin\home\[user name]\hadoop-0.20.2") 입력


3. http://localhost:50070http://localhost:50030을 통해서 cluster상태와 map/reduce상태를 체크할 수 있다.


JDK 1.6.0_25
Hadoop 0.20.2
Eclipse 3.3.2

Map/Reduce 를 이용한 WordCount 예제...
삽질끝에 드디어 성공 -_- !

대략 클라우드 셀프 정리 2탄 -_-
아오 어제 마신 술이 아직도 안 깨네...ㄷㄷㄷ

클라우드 컴퓨팅을 제공하는 회사는 크게 세가지 모델로 서비스를 고객에게 제공하게 된다.

각각
Paas는 Platform as a Service의 준 말이고,
Iaas는 Infrastructure as a Service, 
Saas는 Software as a Service 다.

각각이 의미하는 바는 이렇다.
아...순서를 조금 바꾸겠다. hierarchical한것이 아무래도 보기 좋으니...

Iaas는 물리적인 컴퓨팅 파워를 제공한다.
네트워크의 bandwidth, 저장장소의 용량, CPU속도, 코어의 갯수 등등....

Paas는 어플리케이션을 개발할 수 있는 환경을 제공하는 것이다.
즉, 클라우드 상에서 SDK환경을 제공한다.
구글 앱 엔진이나 마소의 애져 같은 서비스를 살펴보면 각자의 인프라 위에서 소프트웨어를 설계하고 구현할 수 있는 환경을 제공한다.


한마디로 짱이다 -_-.... 메모리가 딸리면 메모리를 늘리면 되고, 속도가 필요하면 코어를 늘리거나 CPU클럭을 늘려달라고 요청하기만 하면 된다 -_-
물론 비용은 따로 청구되겠지만...anyway~_~

Saas는 말 대로 소프트웨어를 제공하는거다.
필요한 여러가지 OS, 시스템 프로그램, 일반 사용자 프로그램등을 이미지의 형태로 가지고 있다가 요청을 하면 바로바로 제공하게 된다.
요즘은 특히 이런 서비스가 많아졌는데, 네이버의 Ndrive나 구글의 Google Docs를 보면 한글파일(*.hwp)이나 Word파일(*.doc)등을 편집할 때 사용자의 컴퓨터에 따로 프로그램이 깔려있지 않아도 웹 상에서의 편집을 제공한다.

뭐 더 말 안한거 없나 -_-....아오 졸려 ㄷ

+ Recent posts