flume 이란 ?

분산 환경에 만들어진 대용량의 로그 데이터를 효율적으로 옮길 수 있는 로그 수집기.
수많은 분산된 서버의 로그 데이터를 HDFS 한곳으로 모으도록 해줍니다.

FLUME ARCHITECTURE

master : 저장소 + Flume master
Agent : 데이터를 생산하는 시스템에 설치.
Collector : 에이전트로 부터 데이터를 수집하여 HDFS에 보내는 역할
( 에이전트와 콜렉터 상태 모니터링 )
에이전트가 발생한 로그나 데이터들을 모니터링하여 데이터 스트림을 생성하여 콜렉터로 보낸다.
콜렉터는 작은 스트림들을 묶어서 보다 큰 스트림으로 뭉친 다음 HDFS에 저장한다

설치환경
OS : ubuntu 12.04.2 LTS
JDK : sun 1.6.0_38
flume: flume-0.9.4-cdh4.0.1

하둡을 설치한 머신에 flume을 같이 설치하는 경우에는 hadoop namenode 포트를 변경해 줘야 한다.
왜 그런지 모르겠으나 flume 설치후 namenode가 시작이 안된다.

그리고 flume설치후 리부트를 하면 flume master 데몬은 띄우면 안된다.
자동 실행되기때문에 재 실행하면 떠있는 데몬이 죽는다.

flume 다운로드
 
http://archive.cloudera.com/cdh4-deprecated/cdh/4/flume-0.9.4-cdh4.0.1.tar.gz
압축해제
tar xvfz flume-0.9.4-cdh4.0.1.tar.gz
환경변수 설정
gedit /etc/profile
export FLUME_HOME=/usr/lib/flume
export FLUME_CONF_DIR=/usr/lib/flume/conf

flume-site.xml 수정
cd /home/hadoop/flume/conf
vi flume-site.xml
<configuration>
  <property>
    <name>flume.master.servers</name>
    <value>flumemaster</value>
    <description>This is the address for the config servers status
 server (http)
    </description>
  </property>
</configuration>

flume master 실행
$ ./bin/flume master
flume을 최초에 실행하고 나서 리부트 하면
자동으로 Flume 데몬이 뜨므로 다시 띄우면 안됨
다시 띄우면 데몬이 죽고 다시 실행이 안됨
http://localhost:35871/

Flume Agent 실행
새로운 터미널을 열어서 아래 행을 실행한다.
$ ./bin/flume node_nowatch -n agent01
http://localhost:35862/

Flume Collector
새로운 터미널을 열어서 아래 행을 실행한다.
$ ./bin/flume node_nowatch -n collector01


tail과 tailDir 소스 설정법

규칙 : tail("filename"[,startFromEnd=false]{.delim="regex", delimMode="exclude|prev|next"})
사용예 : tail("파일명")

규칙 : 약("dirname"[, fileregex=".*"[, startFromEnd=(false[, recurseDepth=0]]]{,delim="regex", delimMode="exclude|prev|next"})
사용예 : tailDir("디렉터리명)

실습을 위한 flume master 설정
http://localhost:35871/
위 url로 들어가서 config에서 설정하는 방법과 쉘 커멘드에서 설정하는 방법이 있다.

아래는 쉘 커멘드로 설정하는 방법이다.

flume 쉘 커멘드 실행

새로운 터미널을 연다.
$./flume shell -c localhost

exec config agent 'tail("/usr/lib/flume/test.txt")' 'agentSink("localhost",35853)'

exec config collector 'collectorSource(35853)' 'collectorSink("file:///usr/local/flume/collected", "test")'

exec config agent 'tailDir("/usr/local/hadoop-1.0.4/logs/")' 'agentSink("localhost",35853)'

exec config collector 'collectorSource(35853)' 'collectorSink("file:///usr/local/flume/collected", hadoop_log")'

flume master에서 결과 확인
http://localhost:35871/

colleced 폴더에 로그파일이 수집된 모습

수집된 파일의 내용


 

'Hadoop' 카테고리의 다른 글

hadoop 데몬  (0) 2013.02.19
하둡 Master / Slave 접근방식과 ssh의 설정  (0) 2013.02.19
하둡 설정 파일  (0) 2013.02.19
HDFS의 특징  (0) 2013.02.19
hadoop HDFS 명령어  (0) 2013.02.19
by pacino.kang 2013. 3. 7. 12:40

NameNode
주로 메모리와 i/o에 관련된일을 한다.
Nanenode는 복수로 구성되지 않는다.
다른 데몬의 경우 복수로 구성되기 때문에 실패시 재실행을
시킬수 있으나 Namenode의 경우 그럴 수 없다.
Namenode는 각 블럭이 어떤 Datanode에 위치하는지 클라이언트에게 알려준다.
클라이언트는 HDFS블록들에 대응되는 로컬 파일을 처리하기위해 Datanode 데몬과 통신한다.

Datanode
다른 Datanode와 통신함으로써 자기가 가지고 있는 블럭을 다른 Datanode에 복사
할 수 있다. 이렇게 함으로써 네트웍이 깨져서 접근인 안되어도 사용자는 파을을 계속
읽을 수 있게 된다.
Datanode는 이러한 이동상황 블럭의 이동 복사 계속해서 Namenode에 보고한다.

Secondary NameNode(SNN)
클러스터로 구성되 HDFS 상태를 모니터하는 보조적인 성격을 가진 데몬이다. 각 클러스터는 SNN을 가진다. SNN은 Namenode와 달리 실시간으로 발생하는 HDFS의 변경에 관한 어떤 정보도 기록하지 않는다. 대신 클러스터 설정 시 정의된 값을 가지고 주기적으로 HDFS 메타데이터의 스냅샷을 찍는다.
Namenode는 하둡 클러스터에 대해 단일 실패 지점을 가지고 있기때문에
SNN의 스냅샷은 데이터의 손실과 시스템의 정지시간을 최소화 하는데 사용된다.
Namenode가 오류가 발생한 경우 SNN은 NameNode로 사용되는데 클러스터의 환경 설정 작업은
수작업으로 이루어진다.

Datanode slave 머신에는 DataNode 데몬이 존재한다.
로컬 파일시스템에 위치한 HDFS 블럭을 기록하거나
해당 파일을 읽는 등의 단순한 기능을 수행한다.
Datanode는 파일의 메타데이터 정보를 보관한다.
메타데이터는 다음정보를 포함한다.
(어떤 파일들이 있는지, 각각의 파일은 어떤게 블록으로 나누어지는지)
Datanode는 블럭의 백업 저장소 역할을 한다.
그리고 지속적으로 현재 시점의 메타데이터를 가질수 있도록 Namenode에게 계속 보고한다.

JobTracker

클러스터 노드에서 실행되는 사용자 어플리케이션들을 관리한다.
사용자가 코드를 하둡클러스터에 넘기면 JobTracker는 여러가지 실행 계획을 결정하게된다.
예를 들면 어느 데이터 파일을 처리할지 결정하고 노드에 여러 태스크를 할당한다.
또한 실행되는 모든 태스크를 모니터링하고 태스크라 실패한 경우 자동으로 실패한 태스크를
재실행한다. 재실행 시 실패한 태스크는 가능하면 다른 노드에 새로 할당되어 실행된다.
하둡 클러스터에는 하나의 JobTraker 만 존재한다. JobTracker는 보통 클러스터의 Master 노등에서 실행된다.

TaskTracker
데이터 저장에 관련된 NameNode 데몬과 마찬가지로 연산에 돤련되 데몬도
Master/Slave 구조를 가진다. JobTracker는 Master로서 MapReduce의 전체 실행을 감독한다.
TaskTracker는 JobTracker가 할당한 개별 작업을 실행한다.
slave 노드에는 TaskTracker가 하나만 존재한다. 하지만 여러 개의 jvm을 생성해서
다수의 map과 reduce 작업을 병렬 처리할 수 있다.
TaskTracker의 또 다른 일은 JobTracker와 계속해서 통신하는 것이다
jobTracker는 heartbeat 메시지가 TaskTracker로 부터 정해진 주기 내에 도착하지 않으면
해당 TaskTracker에 문제가 생긴것으로 간주하고 해당 작업을 클러스터 내에 위치한 다른
노드에 할당한다.
NameNode와 JobTracker 데몬을 실행하는 Master 노드가 있고 Master 노드에 문제가 생길 경우를 대비해, SNN이 Slave 노드 중 하나에 위치 할 수 있다. 클러스터 규모가 작은 경우에는
SNN이 Slave 노드 중 하나에 위치할 수 있다. 또한 클러스터 규모가 큰 경우에는
NameNode와 JobTracker를 서로 다른 컴퓨터에 분할해 배치할 수 있다.
Slave에 해당하는 컴퓨터들은 DataNode와 TaskTracker를 제공하는데 이들은 해당노드에서 작업을 실행한다. 이때 데이터 역시 같은 노드에 저장되어 있어야 한다.
하둡을 구성하려면 우선 Master 노드를 만들고 노드들 사이에 컨트롤 채널을 구헝한다. 이
통신 채널이 SSH가 된다.

'Hadoop' 카테고리의 다른 글

flume 설치 해보고 로그 수집하기  (0) 2013.03.07
하둡 Master / Slave 접근방식과 ssh의 설정  (0) 2013.02.19
하둡 설정 파일  (0) 2013.02.19
HDFS의 특징  (0) 2013.02.19
hadoop HDFS 명령어  (0) 2013.02.19
by pacino.kang 2013. 2. 19. 14:27

하둡 클러스터를 구축 할때는 하나의 특정 노드를 master 노드로 지정해야 한다.
master 노드의 역할을 하는 서버는 NameNode와 JobTracker 데몬을 제공하게된다.
또한 모든 Slave노드에 위치한 DataNode와 TaskTracker 데몬을 실행시킨다.
따라서 Master노드는 클러스터에 위치한 다른 모든 노드들에 접근할 수 있어야 한다.
하둡은 이러한 접근을 위해 SSH를 사용한다. SSH는 표준 공개 키 암호를 이용해 한쌍의
키를 생성한다. 이 키는 사용자를 확인하는데 사용하는데 하나는 공개(PUBLIC) 키이고
다른 하나는 개인(Private) 키로 설정된다. 공개 키는 클러스터에 있는 모든 노드에 저장되고
Master 노드는 원껴의 컴퓨터에 접근할때 개인키를 보낸다. 해당컴퓨터는 이두개의 키를 가지고
접근 시도를 허락한다.

하둡은 모든 노드가 동일한 사용자 계정을 가진다.
한 노드의 사용자 계정을 가지고 다른 컴퓨터에 접근하는 것이다.
보안을 위해 root가 아닌 사용자 계정을 사용할것을 권고한다.
이 계정은 하둡 클러스터를 관리할 목적으로만 사용된다.

ssh가 설치되어 있는지 확인

$ which ssh
/usr/bin/ssh

SSH가 클러스터의 모든 노드에 설치되어 있는것을 확인한 후 ssh-keygen을 사용하여
Master노드에 한 쌍의 RSA 키를 생성한다. 이때 passphrase는 입력하지 않는다.
그렇지 않으면 master 노드가 다른 노드에 접근할 때마다 매번 passparase를 입력해야 한다.

$ssh-keygen -t rsa

key파일을 저장할 위치를 물어보고나면
Enter passphrase 물어보면 그냥 enter를 친다.

본인의 서버구성이 분산 환경으로 구성된 경우에는
scp 명령어로 공개키를 분산서버의 같은위치에 옮기는 장업이 필요합니다.

'Hadoop' 카테고리의 다른 글

flume 설치 해보고 로그 수집하기  (0) 2013.03.07
hadoop 데몬  (0) 2013.02.19
하둡 설정 파일  (0) 2013.02.19
HDFS의 특징  (0) 2013.02.19
hadoop HDFS 명령어  (0) 2013.02.19
by pacino.kang 2013. 2. 19. 14:22
| 1 2 3 4 5 6 7 8 |