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

core-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-1.0.4/hadoop-${user.name}</value>
</property>
</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>

<property>
<name>mapred.local.dir</name>
<value>${hadoop.tmp.dir}/mapred/local</value>
</property>

<property>
<name>mapred.system.dir</name>
<value>${hadoop.tmp.dir}/mapred/system</value>
</property>
</configuration>
</configuration>

hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop-1.0.4/dfs/name</value>
</property>

<property>
<name>dfs.name.edits.dir</name>
<value>${dfs.name.dir}</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop-1.0.4/dfs/data</value>
</property>
</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.6.0_38
export HADOOP_HOME=/usr/local/hadoop-1.0.4

'Hadoop' 카테고리의 다른 글

hadoop 데몬  (0) 2013.02.19
하둡 Master / Slave 접근방식과 ssh의 설정  (0) 2013.02.19
HDFS의 특징  (0) 2013.02.19
hadoop HDFS 명령어  (0) 2013.02.19
hadoop 개요  (0) 2013.02.14
by pacino.kang 2013. 2. 19. 14:11

HDFS의 정의
분산 서버 구조로 Master Name node가 파일의 메타(meta) 정보를 관리하고 실제 데이터는 여러 대의 Data node에 분산해서 저장하는 하둡 분산 파일 시스템

HDFS의 장점
기존의 대용량의 파일 시스템이나 DB서버를 구성하려면 고성능의 서버를 구매해야 했으면 상당히 많은
비용때문에 부담이 가는 실정이었습니다.
하지만 HDFS를 사용하면 일반 PC급 사양의 서버를 묶어서 하나의 스토리지 처럼 사용 할 수 있게되어
비용적인 부담이 줄게 되었고 향후 업그레이드 시에도 클러스터에 서버를 묶어 주기만하면 성능을
효과적으로 향상시킬수 있는 장점이 있습니다.
기존의 RDBMS 시스템은 투자한 금액에 비례해서 성능이 나오지 않았으나
HDFS는 투자한만큼 성능이 나타납니다.

HDFS의 특징
1. 분산서버는 다양한 장애 상황에 놓일수 있습니다.
   네트웍장애 하드웨어장애 등
   또한 디스크 장애로 인해 복구가 불가능한 상황에 놓일 수도 있습니다.
   HDFS는 이러한 장애를 감지하기위해 분산서버간에 서로 상태를 체크하여
   장애를 인지하고 대처할 수 있게 도와줍니다.
   이렇게 하기위해 데이터 노드간에는 데이터를 서로 복제하여 저장하게됩니다.

2. HDFS는 배치작업에 적합하도록 설계되어 있습니다.
   스트리밍 방식으로 데이터에 접근하기 때문에 특정위치의 정보에 정보를 읽는데는 적합하지 않고
   처음부터 끝까지 모든데이터를 읽는 높은데이터 처리량에 중점을 두고 있습니다.

3. HDFS는 하나의 파일이 수 기가바이트에서 테라바이트이상 으로 저장될 수 있게 설계 됐습니다.

4.HDFS는 한번 저장한 데이터는  수정할 수 없고 읽기만 가능하게 해서 데이터 무결성을 유지 시킵니다.
   이점에서 RDBMS와는 사용처가 다르다고 할 수 있습니다.
   데이터의 수정은 불가능 하지만 파일의 이동 삭제 복사는 할 수 있습니다.

'Hadoop' 카테고리의 다른 글

hadoop 데몬  (0) 2013.02.19
하둡 Master / Slave 접근방식과 ssh의 설정  (0) 2013.02.19
하둡 설정 파일  (0) 2013.02.19
hadoop HDFS 명령어  (0) 2013.02.19
hadoop 개요  (0) 2013.02.14
by pacino.kang 2013. 2. 19. 14:06

하둡에서 생성한 HDFS 디렉토리 정보는 일반 리눅스 명령어로는 보이지 않습니다.
아래의 HDFS명령어를 사용해야 합니다.

ls - 현재 디렉토리 정보를 나열합니다.
hadoop fs -ls output

lsr - 현재 디렉토리 목록과 하위디렉토리 정보를 나열합니다.
hadoop fs -lsr output

du - 디렉토리나 파일의 사용량을 확인하는 명령 바이트 단위로 결과 출력
hadoop fs -du output

dus - 디렉토리 전체의 합계용량을 출력
hadoop fs -dus output

cat - 테스트파일의 내용을 표시
hadoop fs -cat /user/root/output/part-r-00000

text - 테스트파일뿐 아니라 zip파일 형태의 내용도 표시.
hadoop fs -text /user/root/output/part-r-00000

mkdir - 디렉토리를 생성합니다..
hadoop fs -mkdir output1

put - 로컬의 파일 및 디렉토리를 목적지 경로(hdfs)로 복사.
        목적지 디렉토리가 없을 경우엔 디렉토리를 생성.

hadoop fs -put NOTICE.txt /user/root/input

get - hdfs의 파일 및 디렉토리를 로컬의 목적지로 복사.
목적지 디렉토리가 없을 경우엔 디렉토리를 생성.

hadoop fs -get input output

cp - hdfs간에 소스디렉토리 및 파을을 목저지로 복사.
hadoop fs -cp input/NOTICE.txt input/NOTICE.txt

rm - hdfs 디렉토리나 파일을 삭제한다.
       디렉토리는 반드시 비어있는 경우만 삭제 할 수 있습니다.
rmr - 비어있지 않은 디렉토리는 rmr로 삭제 할 수 있습니다.

hadoop fs -rm input1

mv - hdfs의 파일이나 디렉토리를 이동 합니다..

tail - 파일의 마지막 1kb의 내용을 화면에 출력합니다.
       로그파일의 마지막을 보고자 할때 유용합니다.
hadoop fs -tail -f input/notice.txt

count - 지정경로에 대한 파일갯수 디렉토리갯수 전체파일사이즈를 출력합니다.
           -q옵션을 사용할 경우 디렉토리의 파일 용량제한 정보를 조회할 수 있습니다.
hadoop fs -count -q input
첫번째 none은 파일갯수 쿼터값
첫번째 inf는 파일잔여쿼터값
두번째 none은 파일용량 쿼터값
두번째 inf는 파일용량 잔여 쿼터값
1은 디렉토리갯수
2는 파일갯수
1467은 전체파일사이즈
다음은 지정한경로이름

chmod - 지정한 파일이나 디렉토리에 대해 권한을 변경합니다.
          -R옵션을 주면 해당 디렉토리에 포함된 파일이나 디렉토리까지 변경됩니다.

chown - 지정한 파일이나 디렉토리의 소유권을 변경합니다.
           -R옵션을 주면 해당 디렉토리에 포함된 파일이나 디렉토리까지 변경됩니다.

touchz - 0바이트 파일을 생성합니다.

 

'Hadoop' 카테고리의 다른 글

hadoop 데몬  (0) 2013.02.19
하둡 Master / Slave 접근방식과 ssh의 설정  (0) 2013.02.19
하둡 설정 파일  (0) 2013.02.19
HDFS의 특징  (0) 2013.02.19
hadoop 개요  (0) 2013.02.14
by pacino.kang 2013. 2. 19. 12:41

 Hadoop

방대한 양의 데이터가 간결한 프로그래밍 모델을 이용하여 여러대의 컴퓨터로 이루어진 클러스터에서 분산 처리될 수 있도록 도와주는 프레임웍 이다. 

아파치 하둡은 처리 장치와 기억 장치를 가지는 하나의 컴퓨터에서 처리되던 방대한 작업들을 수천대의 컴퓨터로 작업을 분산해서 처리할 수 있는 확장성을 제공하기 위해서 설계되었다.

아파치 하둡에는 다음과 같은 3개 이상의 하위 프로젝트들이 있다

 

1.Hadoop Common(하둡 커먼): 다른 하둡 하위 프로젝트들에서 공통

     으로 사용되는 유틸리티들을 포함하고 있다.

 

2. Hadoop Distributed File System (HDFS™)(하둡 분산 파일 시스템): 

   애플리케이션 데이터에 접근할 때 높은 처리량을 지원하는 분산 파일

   시스템이다.

 

3. Hadoop MapReduce(하둡 맵리듀스): 컴퓨터 클러스터에서 대용량

   데이터의 분산 처리를 위한 프로그래밍 모델 이다.

   Map Reduce 극도로 간단한 작은 단위의 작업을 엄청나게 많이 해야할 때 사용할 수 있는  

   programming model이다.

   분산처리에 관한 내용이지만, 기본적인 개념은 매우 간단하다. 큰 묶음의 job을 작은 단

   위로 쪼개고, 계산하고, 합치는 것이다.

 

용어 정리

Hadoop
방대한 양의 데이터가 간결한 프로그래밍 모델을 이용하여 여러 대의 컴퓨터로 이루어진 클러스터에서 분산 처리될 수 있도록 도와주는 플랫폼

 

HDFS(Hadoop Distributed File System)

파일을 64M 단위로 나누어 장비에 나누어서 저장하는 방식

사용자는 하나의 파일로 보이나 실제로는 나누어져 있음

2003Google이 논문으로 Google File System발표.

데이터를 복제본을 저장하기 때문에 데이터의 유실이나 장애가 발생 했을 때도 데이터 복구가 가능하.

 

MapReduce (2004Google이 논문 발표)

MapReduce 일종 함수형 프로그래밍 모델입니다. map, reduce 합쳐진 용어로, 두 함수의 조합을 통해서 분산/병렬 시스템을 운용을 지원한다. Map Reduce 극도로 간단한 작은 단위의 작업을 엄청나게 많이 해야할 때 사용할 수 있는  programming model이다.

분산처리에 관한 내용이지만, 기본적인 개념은 매우 간단하다. 큰 묶음의 job을 작은 단

위로 쪼개고, 계산하고, 합치는 것이다.

 

Hcatalog

테이블 추상화를 통해서 사용자에게 HDFS에 있는 데이터의  관계형 제공한다.

사용자는 더이상 데이터가 어디에 저장되어 있는지, 또 어떤 포맷

(RCFile format, text file, sequence file)으로 저장되어 있는지 신경쓰지 않아도 된다.

 

대용량데이터에 Apache Hadoop적합한가?

 

 

Q. 애플리케이션/트랜잭션 로그 정보는 매우 크다.

    대용량 파일을 저장할 수 있는 분산 파일 시스템을 제공한다.(HDFS)

Q.I/O 집중적이면서 CPU도 많이 사용한다.

    멀티 노드로 부하를 분산시켜 처리한다.

Q. 데이터베이스는 하드웨어 추가 시 성능 향상이 linear하지 않다.

    장비를 증가시킬 수록 성능이 linear에 가깝게 향상된다.

Q. 데이터베이스는 소프트웨어와 하드웨어가 비싸다.

    Apache Hadoop은 무료이다.

    Intel Core 머신과 리눅스는 싸다.

 

 

 

'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. 2. 14. 13:11
| 1 |