왜 빅데이터가 이슈가 되고 있을까? HW와 SW의 가격은 저렴해지고, 표준은 평준화 되고 접근이 수워지고 있다. 그러나 데이터는 복제나 공유가 되지 않고 자사의 데이터가 돈이 되는 시대가 왔다. 그런 의미에서 하둡은 빅데이터를 처리하는 분야의 SW이다.
하둡 개념
- Input: 분석할 데이터, Output: 결과값
- MasterNode: HDFS-분산파일위치 정보지님 (NameNode)
- SlaveNode: 분산된 실 데이터를 저장 (DataNode)
- MapReduce/HDFS Layer 영역으로 나뉨
- 역할에 대한 이해하기
- JobTracker : Map -> Reduce 할때 Shuffle+Sort의 로직처리가 성능을 좌우한다.
즉, Map출력결과 (Mapper) -> Suffle+Sort -> Sorting된 Reduce 입력 (Reducer)
Mapper/Reducer 프로그래밍도 분산된 것이다
- 개념이해하기
설치하기
- http://apache.tt.co.kr/hadoop/common/hadoop-1.2.1/ 에서 hadoop-1.2.1-bin.tar.gz 파일을 다운로드 받는다
- 기본 환경은 Mac OS를 사용한다
- .bash_profile 안에 JAVA_HOME을 설정한다 : Java버전은 반드시 1.6 이상이어야 한다
$ cat .bash_profile
alias ll='ls -alrt'
set -o vi
export JAVA_HOME=/Library/Java/Home
- 압축을 푼다. 설치 끝
Standalone 사용하기
- Document 메뉴에서 1.2.1로 이동하여 "Single Node Setup"을 클릭 : http://hadoop.apache.org/docs/r1.2.1/single_node_setup.html
- 간단한 수행
// 폴더를 하나 만들고 xml 환경파일을 복사한다
$ mkdir input
$ cp conf/*.xml input
// 하기 명령을 수행한다
// input 읽을 꺼리를 주고 결과값을 output에 담아라
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
// output 폴더가 자동 생성되고 cat 하였을 때 존재하는 파일의 내역이 하기와 같이 보이면 성공!
$ cat output/*
1 dfsadmin
- 수행은 어떤 의미일까?
+ NameNode : 하둡전체 관리 = JobTracker + DataNode
+ JobTracker : 처리역할
+ DataNode : HDFS 위치 (분산파일을 하나의 파일 인것처럼 사용하게 해줄 수 있는것)
- 하둡은 특정 input이 있고 처리하고 output 결과가 나온다. 현재 예는 로컬 input에 있는 것을 읽고 로컬 output에 생성하였다.
그러나 실제에서는 분산으로 처리하므로 local이 아닐 것이다.
Hadoop 종류
- 종류
Local (Standalone) Mode [로컬(독립)모드]
하둡의 기본모드(아무런 환경설정을 하지 않음): 로컬 머신에서만 실행
다른 노드와 통신할 필요가 없기 때문에 HDFS를 사용하지 않으며 다른 데몬들도 실행시키지 않음
독립적으로 MapReduce 프로그램의 로직을 개발하고 디버깅하는데 유용함
Pseudo-Distributed Mode [가상분산 모드]
한대의 컴퓨터로 클러스터를 구성하고, 모든 데몬을 실행함.
독립실행(standalone) 모드 기능 보완
– 메모리 사용 정도, HDFS 입출력 관련 문제, 다른 데몬 과의 상호작용에서 발생하는 일을 검사
Fully-Distributed Mode [완전분산 모드]
분산 저장과 분산 연산의 모든 기능이 갖추어진 클러스터를 구성함
master - 클러스터의 master 노드로, NameNode와 JobTracker 데몬을 제공
backup - SNN(Secondary NameNode 데몬)을 제공하는 서버
slaves - DataNode와 TaskTracker 데몬을 실행하는 slaves 들
가상의 Standalone Hadoop 실행하기
- 3가지 기본 환경을 추가한다
- conf/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>
</configuration>
- conf/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.replication</name>
<value>1</value>
</property>
</configuration>
- conf/mared-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>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
- NameNode 초기화
NameNode 가 있는 곳에서 수행한다
$ bin/hadoop namenode -format
13/09/09 20:51:59 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = KOSTA17ui-iMac.local/192.168.0.15
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.6.0_45
************************************************************/
13/09/09 20:52:00 INFO util.GSet: Computing capacity for map BlocksMap
... 중략 ...
13/09/09 20:52:00 INFO common.Storage: Image file /tmp/hadoop-dowon/dfs/name/current/fsimage of size 111 bytes saved in 0 seconds.
13/09/09 20:52:00 INFO common.Storage: Storage directory /tmp/hadoop-dowon/dfs/name has been successfully formatted.
- NameNode, JobTracker, DataNode를 한번에 띄우기
$ bin/start-all.sh
starting namenode, logging to /Users/dowon/Documents/hadoop-1.2.1/libexec/../logs/hadoop-dowon-namenode-KOSTA17ui-iMac.local.out
2013-09-09 20:53:36.430 java[7632:1603] Unable to load realm info from SCDynamicStore
// 수행후 브라우져에서 50030, 50070 포트 호출
http://localhost:50030/dfshealth.jsp : JobTracker
http://localhost:50070/dfshealth.jsp : NameNode
- 가상 HDFS 방식으로 수행해 보자
결국 결과값을 HDFS에 넣어주는 것이다
// NameNode의 HDFS에 conf/* 모든 파일을 input 디렉토리명으로 생성하여 복사한다
$ bin/hadoop fs -put conf input
2013-09-09 20:58:13.847 java[7966:1603] Unable to load realm info from SCDynamicStore
// 명령을 수행하면 JobTracker가 수행되고 HDFS에 output 디렉토리에 결과값이 생성된다
// 결과값은 JobTracker가 처리하여 생성된 것이다
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
2013-09-09 21:01:57.770 java[8017:1603] Unable to load realm info from SCDynamicStore
13/09/09 21:01:58 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/09/09 21:01:58 WARN snappy.LoadSnappy: Snappy native library not loaded
13/09/09 21:01:58 INFO mapred.FileInputFormat: Total input paths to process : 17
13/09/09 21:01:58 INFO mapred.JobClient: Running job: job_201309092053_0001
13/09/09 21:01:59 INFO mapred.JobClient: map 0% reduce 0%
13/09/09 21:02:03 INFO mapred.JobClient: map 11% reduce 0%
13/09/09 21:02:05 INFO mapred.JobClient: map 23% reduce 0%
.. 중략..
// NameNode 결과 확인
// http://localhost:50070/ 에서 "Browser the filesystem" 을 클릭한다
// http://localhost:50075/browseDirectory.jsp?dir=%2Fuser%2Fdowon&namenodeInfoPort=50070
해당 브라우져 내역에 신규생성된 "user"밑의 "dowon"밑의 "input" 과 "output"이 보인다 (dowon은 계정명)
Name | Type | Size | Replication | Block Size | Modification Time | Permission | Owner | Group |
input | dir | 2013-09-09 20:58 | rwxr-xr-x | dowon | supergroup | |||
output | dir | 2013-09-09 21:02 | rwxr-xr-x | dowon | supergroup |
// output에 결과값 : part-00000 에 결과내역이 write 되어 있다
Name | Type | Size | Replication | Block Size | Modification Time | Permission | Owner | Group |
_SUCCESS | file | 0 KB | 1 | 64 MB | 2013-09-09 21:02 | rw-r--r-- | dowon | supergroup |
_logs | dir | 2013-09-09 21:02 | rwxr-xr-x | dowon | supergroup | |||
part-00000 | file | 0.05 KB | 1 | 64 MB | 2013-09-09 21:02 | rw-r--r-- | dowon | supergrou |
// JobTracker 처리현황 확인
// http://localhost:50030/jobtracker.jsp
다음에는 eclipse에서 하둡 프로그래밍을 해보자
<참조>
'Big Data' 카테고리의 다른 글
[RethinkDB] 시작하기 (0) | 2017.04.11 |
---|---|
[Hadoop] Mongo-Hadoop 에 대한 생각 (0) | 2013.09.12 |
[Hadoop] MapReduce 직접 .jar 파일로 수행하기 (0) | 2013.09.11 |
[Hadoop] Eclipse에서 Maven으로 하둡 코딩하기 (2) | 2013.09.09 |