hadoop install guide by n4tech

32
1 <N4tech> 하둡생태계 지도 - 하둡 연관 툴들과 구성요소 및 기능들 1. 어떻게 시작되었지 : 웹상의 엄청난 데이터 2. 너치(Nutch)는 이런 웹상의 데이터 수집한다 3. 빅데이터가 저장되기 위해 : 하둡분산파일시스템(HDFS)의 탄생 4. 이런 데이터를 어떻게 활용하냐고? 5. 맵리듀스 프레임워크(Map reduce framework)는 분석 코딩과 실행을 위해 존재 (스트리밍 또는 파이프를 통한 자바 또는 여러 언어들) 6. 비정형 데이터를 어떻게 가져올까 : 웹로그, 클릭정보 - 퓨즈(fuse), 웹다브(webdav), 척와(chukwa), 플룸(flume), 스크라이브(Scribe) 7. 하둡분산파일시스템(HDFS)에 정형 데이터를 넣기 위한 - 하이호(Hiho), 스쿱(sqoop) - RDBMS는 하둡에 편승할 수 있다 8. 저수준 맵리듀스 프로그래밍 위에 있는 고수준의 인터페이스 툴 - 피그(Pig), 하이브(Hive), 자클(Jaql) 9. 향상된 UI 리포팅과 함께 하는 BI 툴 - 드릴다운 등 - 인텔리커스(Intellicus) 10. 맵리듀스 프로세스와 고수준 언어들 위의 워크플로우 툴 - 오지(Oozie), 캐스캐이딩 (Cascading) 11. 하둡 모니터링 및 관리, 잡스와 하이브 운영, HDFS 모니터링 - 고수준의 모니터링 - 휴(Hue), 캄스피어(Karmasphere), 이클립스 플러그인(Eclipse plugin), 캑티(Cacti), 강리아(Ganglia) 12. 프레임워크 및 클러스터 지원 - 에이브로(Avro, 직렬화), 주키퍼(Zookeeper, 코디네이터) 13. 더욱 향상된 고수준의 인터페이스와 활용 - 마훗(Mahout, 기계학습), 일레스틱 맵리듀스(Elastic map Reduce) 14. OLTP, NoSQL 데이터베이스 역시 가능 - 에이치베이스(HBase) << Hadoop Install Guide >>

Upload: o-joun-lee

Post on 23-Jun-2015

960 views

Category:

Engineering


9 download

DESCRIPTION

Hadoop install guide by n4tech -Installation Hadoop 101, Min-Sung Hong and O-Joun Lee

TRANSCRIPT

Page 1: Hadoop install guide by n4tech

1 <N4tech>

하둡생태계 지도 - 하둡 연관 툴들과 구성요소 및 기능들

1. 어떻게 시작되었지 : 웹상의 엄청난 데이터2. 너치(Nutch)는 이런 웹상의 데이터 수집한다3. 빅데이터가 저장되기 위해 : 하둡분산파일시스템(HDFS)의 탄생4. 이런 데이터를 어떻게 활용하냐고?5. 맵리듀스 프레임워크(Map reduce framework)는 분석 코딩과 실행을 위해 존재 (스트리밍 또는 파이프를 통한 자바 또는 여러 언어들)6. 비정형 데이터를 어떻게 가져올까 : 웹로그, 클릭정보 - 퓨즈(fuse), 웹다브(webdav), 척와(chukwa), 플룸(flume), 스크라이브(Scribe)7. 하둡분산파일시스템(HDFS)에 정형 데이터를 넣기 위한 - 하이호(Hiho), 스쿱(sqoop) - RDBMS는 하둡에 편승할 수 있다8. 저수준 맵리듀스 프로그래밍 위에 있는 고수준의 인터페이스 툴 - 피그(Pig), 하이브(Hive), 자클(Jaql)9. 향상된 UI 리포팅과 함께 하는 BI 툴 - 드릴다운 등 - 인텔리커스(Intellicus)10. 맵리듀스 프로세스와 고수준 언어들 위의 워크플로우 툴 - 오지(Oozie), 캐스캐이딩(Cascading)11. 하둡 모니터링 및 관리, 잡스와 하이브 운영, HDFS 모니터링 - 고수준의 모니터링 - 휴(Hue), 캄스피어(Karmasphere), 이클립스 플러그인(Eclipse plugin), 캑티(Cacti), 강리아(Ganglia)12. 프레임워크 및 클러스터 지원 - 에이브로(Avro, 직렬화), 주키퍼(Zookeeper, 코디네이터)13. 더욱 향상된 고수준의 인터페이스와 활용 - 마훗(Mahout, 기계학습), 일레스틱 맵리듀스(Elastic map Reduce)14. OLTP, NoSQL 데이터베이스 역시 가능 - 에이치베이스(HBase)

<< Hadoop Install Guide >>

Page 2: Hadoop install guide by n4tech

2 <N4tech>

1. 구축 환경 1.1. PC 환경

NameNodeCPU : Core2Duo 2.9GHzRAM : 4GBHDD : 80GBLAN, ODD, Graphic Card : 정상 작동Secondary NameNodeCPU : Core2Duo 2.9GHzRAM : 2GBHDD : 500GBLAN, ODD, Graphic Card : 정상 작동DataNodeCPU : 펜티엄 4 2.8GHzRAM : 1GBHDD : 60GBLAN, ODD, Graphic Card : 정상 작동

1.2. Network 환경 SwitchHub 1 EA - 내부 사설망 구축

2. 설치 준비 2.1. 우분투 12.04 LTS Version 설치 (최신 업데이트)

※ 설치 주의 사항 : 계정명은 동일해야함

2.2. JDK 7u13 Version 설치 터미널 창(단축키 :Ctrl + Alt + t)에서 순서대로 실행

$ sudo add-apt-repository ppa:webupd8team/java$ sudo apt-get update$ sudo apt-get install oracle-java7-installer$ java -version #자바가 잘 설치되어있는지 버전 확인 명령어

Page 3: Hadoop install guide by n4tech

3 <N4tech>

3. Hadoop 설치 - 하둡 설치 형태

1. StandAlone - 하둡 파일 시스템을 띄우지 않은 상태에서 동작하는 것만 테스트 할 수 있는 상태 2. Pseudo Distribution - 하둡 파일 시스템을 구동시키고 한 컴퓨터에서 가상으로 테스트 해볼 수 있는 상태

3. Cluster - 실제로 파일 시스템을 만들고 각 클러스터가 독립적인 기계로 동작하는 방식

3.1. Stand Alone 모드 1) SSH 서버와 Rsync, vim 설치

$ sudo apt-get install ssh $ sudo apt-get install rsync$ sudo apt-get install vim

2) Hadoop 다운로드 http://ftp.daum.net/apache//hadoop/common/stable/ 최신버젼이 아닌 안정화 버전을 쓰기 위하여 1.0.4 버전으로 받음 hadoop-1.0.4-bin.tart.gz

Page 4: Hadoop install guide by n4tech

4 <N4tech>

3) 하둡 설치를 위한 환경변수 설정 $HOME 에 있는 .profile 파일을 열어서 다음과 같은 내용을 추가해줌

profile 파일 여는 명령어$ vim ~/.profile [Tab - 자동완성 기능]추가 내용export JAVA_HOME="/usr/lib/jvm/java-7-oracle" - 위에서 설치한 java가 어디에 있는지 확인 후 바꿔줘야 함export HADOOP_HOME="/home/n4tech-hadoop/work/hadoop-1.0.4" - n4tech-hadoop 는 계정명

4) 터미널에서 위 변경을 적용해 줘야함

$ source ~/.profile

5) $HADOOP_HOME/conf/hadoop-env.sh 파일을 열어서 아래 내용 추가 - Hadoop 에서도 java를 쓰기 위한 접근 경로 지정

적용 위치# export JAVA_HOME=/usr/lib/j2sdk1.5-sun 아래 부분

추가할 내용export JAVA_HOME=/usr/lib/jvm/java-7-oracle

6) 설치 완료 7) 테스트 하기 - $HADOOP_HOME 으로 이동해서 명령어 실행

$ mkdir input $ cp conf/*.xml input $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' $ cat output/*

* 위 명령어는 hadoop에서 지원해주는 간단한 예제임.

Page 5: Hadoop install guide by n4tech

5 <N4tech>

3.2. Pseudo Distribution 방식

'가 분산' 방식은 한대의 컴퓨터에서 하둡 파일시스템 (hdfs) ,잡 트랙커 (Job Tracker),와 네임노드 (NameNode), 데이타노드 (DataNode) , 태스크트래커 (TaskTracker) 를 띄우는 방식입니다. 마치 분산을 풀로 하는 것처럼 보이지만 실은 한대에서만 돌리는 것이지요. 그래서 '가 분산' (Pseudo Distribuiton) 방식이라고 합니다.

※ 3.1 내용을 따라한 뒤에 적용 하는 것을 가정함

1) $HADOOP_HOME 위치에서 아래 파일들을 편집기로 실행 후 아래 내용 삽입 - 각각 네임노드 (NameNode) , 레플리케이션 횟수, 잡트래커를 설정

conf/core-site.xml:<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property></configuration>conf/hdfs-site.xml:<configuration> <property> <name>dfs.replication</name> <value>1</value> </property>

<property> <name>dfs.name.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/name</value> </property>

<property> <name>dfs.data.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/data</value> </property> </configuration>

EDIT: 붉은색으로 칠해진 부분은 이번에 추가 된 부분으로 자신의 하둡이 설치되어 있는 디렉토리를 표기해준다.

conf/mapred-site.xml:<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property></configuration>

Page 6: Hadoop install guide by n4tech

6 <N4tech>

2) SSH 설정

Secure Shell 의 약자로 텔넷에서 암호화해서 보안을 강화한 것이 SSH 라고 함. SSH를 이용해서 리눅스컴퓨터를 멀리 떨어진 곳에서 접속하면, 터미널 창에서처럼 명령 프롬프트만 보임. 리눅스의 경우 명령어로 대부분 콘트롤 할수 있으니, SSH를 이용하면 멀리 떨어진 서버도 제어가 가능함.

[출처] 리눅스에서의 SSH 란?|작성자 케넌 터미널에서 아래 명령어 실행

$ ssh localhost

만약 안되었으면 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

EDIT: 2012-02-29위 과정은 ssh 를 패스워드 없이 접속하기 위해서 해주는 작업으로 필수 과정.단, 위 버젼은 Virtual-Box 에서만 가능하고 독립머신에 설치된 리눅스 버젼에서 작업이 가능할려면 아래 내용을 추가해 줘야함$ chmod 644 ~/.ssh/authorized_keys

접속이 성공 시 다음 명령어를 사용하여 다시 원래대로 돌아옴$ exit

3) $HADOOP_HOME 으로 이동하여 distributed-filesystem을 포맷해줌

$ bin/hadoop namenode -format

4) Hadoop 실행

$ bin/start-all.sh

5) 실행 확인 방법

위와 같은 명령을 실행시켜주고 네임노드와 잡-트랙커가 잘 띄워져 있는지 확인.하둡에서는 웹페이지로 확인할 수 있게 제공함.

- 네임 노드 : 분산 파일 시스템에 위치한 파일들에 대한 위치정보를 포함하는 노드 - 잡-트랙커 : 분산 환경에서 작업을 분산시키는 스케쥴러

NameNode - http://localhost:50070/ JobTracker - http://localhost:50030/

Page 7: Hadoop install guide by n4tech

7 <N4tech>

6) 테스트

$ bin/hadoop fs -put conf input$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'$ bin/hadoop fs -get output output $ cat output/*하둡-파일 시스템 안에 있는 실행결과를 밖으로 꺼내 오는 것.하둡-파일시스템 안으로 넣을때는 -put , 꺼낼때는 -get 을 씀.

또 하둡 파일 시스템 안에 있는 결과를 직접 볼 수 있음.$ bin/hadoop fs -cat output/*

7) 하둡 종료

$ bin/stop-all.sh

Page 8: Hadoop install guide by n4tech

8 <N4tech>

3.3. Full Distributed 모드

구성Hadoop31 -> NameNodeHadoop11 -> Secondary-NameNodeHadoop1~8 -> DataNode※ 지금부터 위 빨간 부분은 해당 PC 의 IP 로 입력하면 됨

1) NameNode의 저장 위치 지정

conf/core-site.xml<configuration> <property> <name>fs.default.name</name> <value>hdfs://Hadoop31:9000</value> </property></configuration>

2) HDFS 설정 (복제셋 및 Name, Data Folder, 그 외)

conf/hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>3</value> #데이터의 복사본 갯 수 </property>

#name 폴더 지정 <property> <name>dfs.name.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/name</value> </property>

#data 폴더 지정 <property> <name>dfs.data.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/data</value> </property>

<property> <name>dfs.support.append</name> <value>true</value> </property>

<property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property></configuration>

Page 9: Hadoop install guide by n4tech

9 <N4tech>

3) Map/Reduce 설정

conf/mapred-site.xml<configuration> <property> <name>mapred.job.tracker</name> <value>hadoop31:9001</value> </property> <property> <name>mapred.system.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/ mapred/system</value> </property></configuration>

4) 각 PC의 역할 설정

Secondary NameNode 위치 설정conf/mastersHadoop11 (해당 pc 의 ip)DataNode 위치 설정conf/slavesHadoop1Hadoop2Hadoop3Hadoop4Hadoop5Hadoop6Hadoop7Hadoop8

5) key 복사 - SSH를 이용하는데 암호 입력이 없도록 하기 위함. 필수 사항

cat ~/.ssh/id_dsa.pub | ssh [email protected] [붙임] "cat >> .ssh/authorized_keys"

※ 빨간 부분은 복사하려는 pc 의 ip 주소

6) 각 pc에 설정한 Hadoop을 복사

rsync -avr . [붙임][email protected]:/home/n4tech-hadoop/work/hadoop-1.0.4

※ 단, work 위치에서 명령을 실행 시킬 것!

7) 테스트

$ bin/start-all.sh

Page 10: Hadoop install guide by n4tech

10 <N4tech>

8) 테스트 결과 화면

Page 11: Hadoop install guide by n4tech

11 <N4tech>

3.4. Hadoop 설치시 유의 사항

1) Shuffle Error

Shuffle Error : Exceeded MAX_FAILED_UNIQUE_FETCHES : bailing-outMap-Reduce를 실행하는데 Map 작업은 순조롭게 완료가 되었으나 Reduce 작업이25%정도까지 올라갔다가 더 이상 안 올라가고 재시도 하면서 결국 확인해 보니위와 같은 Error가 발생을 겪을 경우

- 해결 방법

1. conf/hdfs-site.xml 아래 내용 추가 <property> <name>tasktracker.http.threads</name> <value>400</value> </property> 2. 방화벽 사용 안함 설정 명령어

sudo ufw disable

3. etc/hosts 내용 matching - 수정 권한이 없기 때문에 sudo gedit 으로 편집해야함.127.0.0.1 localhost172.25.235.123 hadoop31172.25.235.130 hadoop1172.25.235.131 hadoop2172.25.235.136 hadoop3172.25.235.139 hadoop4172.25.235.151 hadoop5172.25.235.143 hadoop6172.25.235.142 hadoop7172.25.235.140 hadoop8172.25.235.23 hadoop11

# The following lines are desirable for IPv6 capable hosts::1 ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters

Page 12: Hadoop install guide by n4tech

12 <N4tech>

3.5 Map/Reduce 테스트하기 - 간단 예제 [단어세기] 수행

1) 로컬에서 입력 파일 생성

$ echo "I am a boy" > input_wordcount01.txt$ echo "You are a girl" > input_wordcount02.txt

2) HDFS 에 입/출력 파일들이 위치될 디렉토리 생성

$ bin/hadoop fs -mkdir /user/n4tech-hadoop/input$ bin/hadoop fs -mkdir /user/n4tech-hadoop/output

3) 로컬 -> HDFS 로 입력 파일 복사

$ bin/hadoop fs -copyFromLocal ./input_wordcount* /user/n4tech-hadoop/input 4) 실행

$ bin/hadoop jar hadoop-examples wordcount /user/n4tech-hadoop/input/input_wordcount* /user/n4tech-hadoop/output/wordcount

5) 실행 결과 화면 [터미널]

Page 13: Hadoop install guide by n4tech

13 <N4tech>

6) 실행 결과 화면 [HDFS] - Word Counting 실행 출력물

- 현재 진행 중인 Map-Reduce 모습을 확인 가능함

- Map-Reduce 결과 화면

Page 14: Hadoop install guide by n4tech

14 <N4tech>

3.6 Map/Reduce 테스트하기 - 간단 예제 [단어세기] 튜닝하기 & Map/Reduce 프로그램 생성 및 실행

3.6.1 Map/Reduce 프로그래밍을 위한 툴(Eclipse & Maven) 설치 1) Eclipse Indigo 설치 (다운로드 방식도 있음) - 참고 싸이트 : http://cccob.blogspot.kr/2012/10/1204.html (1) 명령어로 소프트웨어 설치 및 설정

$ sudo apt-get install eclipse #Indigo 버전 (/usr/lib/eclipse 폴더에 설치 됨)

이 상태로는 실행이 안됨Could not load SWT library 에러 발생

32비트는 -> $ ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86/64비트는 -> $ ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/

(2) 환경변수 설정 - 아래에서 한번에...

2) Maven-3.0.5 설치 (1) Maven-3.0.5 다운로드 - 다운로드 싸이트 : http://maven.apache.org/download.html

(2) 압축 풀고 원하는 디렉터리(/usr/lib)에 복사

$ cd 다운로드/$ tar -zxvf apache-maven-3.0.5-bin.tar.gz$ sudo cp -r apache-maven-3.0.5 /usr/lib/

(3) 환경변수 설정 - $HOME 에 있는 .profile 파일을 열어서 다음과 같은 내용을 추가해줌

$ vim ~/.profile [Tab - 자동완성 기능]추가 내용export ECLIPSE_HOME="/usr/lib/eclipse" - 위에서 설치한 java가 어디에 있는지 확인 후 바꿔줘야 함export MAVEN_HOME="/usr/lib/apache-maven-3.0.5"$ source ~/.profile # 변경을 적용해 줌

Page 15: Hadoop install guide by n4tech

15 <N4tech>

3) Eclipse & Maven 연동 (1) 이클립스를 실행하여 상단메뉴의 'Help - Install New Software..' 를 클릭한다. - Work with 란에 http://m2eclipse.sonatype.org/sites/m2e 를 입력

검색된 Maven Intergration for Eclipse 를 선택하여 설치한다. 설치가 완료되면 이클립스가 재부팅 된다.

만약 위에 내용이 설치가 안된다면.... - Work with 란에 Indigo - http://download.eclipse.org/releases/indigo 입력 후

검색된 Web, XML, Java EE and OSGi Enterprise Development 를 선택하여 설치 한 뒤에 다시 설치한다.

(2) 다시 한 번 'Help - Install New Software..' 를 클릭한다. - Work With 란에 http://m2eclipse.sonatype.org/sites/m2e-extras 를 입력

검색된 'Maven Integration for Eclipse Extras'와 'Maven Integration for Eclipse WTP' 를 체크하여 설치한다. 설치가 완료되면 이클립스가 재부팅된다.

Page 16: Hadoop install guide by n4tech

16 <N4tech>

3.6.2 Hadoop Wordcount 소스 작성 1) Project 생성 (1) 이클립스 상단메뉴에서 'File - New - Other' 를 클릭하여 프로젝트 생성 창을 띄운 뒤 'Maven - Maven Project'를 선택한다. Next 클릭

(2) 'Create a simple project' 에 체크를 하고 Next 버튼을 누른다.

(3) Group Id 와 Artifact Id 을 입력한다. - Group Id 는 패키지 네임, Artifact Id 는 프로젝트 네임 이라고 생각하면 된다. Finish 를 누르면 프로젝트가 생성된다.

Page 17: Hadoop install guide by n4tech

17 <N4tech>

2) Hadoop 에 맞게 Project 설정 (1) Java 설정 (우리는 java-7-oracle 으로 Default 하면 됨)

(2) Maven Dependencies 에 라이브러리를 추가 (우리는 1.0.4 - hadoop-core) - 생성한 프로젝트를 우 클릭하여 메뉴에서 'Maven - Add Dependency' 를 클릭 'org.apache.hadoop' 를 검색하여 hadoop-core 를 추가

Page 18: Hadoop install guide by n4tech

18 <N4tech>

3) wordcount 소스 작성 (1) 'src/test/java 우클릭 - New - Package' 를 차례로 클릭하여 패키지 생성

(2) '생성된 패키지를 우클릭하고 New - Class' 를 선택하여 자바 클래스를 생성

Page 19: Hadoop install guide by n4tech

19 <N4tech>

(3) WordCount Source 수정 (기본 예제에서 빨간 부분 수정)

import java.io.IOException;import java.util.*; import org.apache.hadoop.fs.Path;import org.apache.hadoop.conf.*;import org.apache.hadoop.io.*;import org.apache.hadoop.mapred.*;import org.apache.hadoop.util.*; @SuppressWarnings("unused")public class WordCount { public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); //구분자 추가 StringTokenizer tokenizer = new StringTokenizer(line, " \t\n\r\f,.:;?![]()'"); while (tokenizer.hasMoreTokens()) { //모든 문자 소문자로 변환 word.set(tokenizer.nextToken().toLowerCase()); output.collect(word, one); } } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } //4개 이상되는 단어만 if(sum > 4) output.collect(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); }}

Page 20: Hadoop install guide by n4tech

20 <N4tech>

4) 완성 파일 Export & 실행법 (1) jar 파일을 Export 하여 마무리 - 프로젝트 우클릭 - Export 를 누르고 Java - JAR file 를 선택 - 'Browse' 버튼을 눌러 jar 파일을 생성할 경로를 입력

(2) 이클립스에서 생성한 jar 파일 실행하기 - 생성한 jar 파일을 hadoop 폴더에 옮긴 뒤 아래 명령어 실행

$ bin/hadoop jar ExWordCount.jar kr.n4tech.wordcount.WordCount input/ output/

(3) 실행 결과 화면

Page 21: Hadoop install guide by n4tech

21 <N4tech>

3.7 HBASE + Zookeeper 설치

1) ZooKeeper 설치 1-1) ZooKeeper 란?

- ZooKeeper는 "A centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications." 로 정의됨.

1-2) 설치 이유Hadoop을 기반으로 사용되는 여러 툴들을 지원하기 위하여 반드시 설치해야함.별도의 장비로 설치해도 되지만 Hadoop의 DataNode/NameNode에 설치해도 무방.하둡 클러스터의 크기와 부하량을 고려하여 적절하게 설치.

1-3) 설치 방법 (1) ZooKeeper 3.3.5 다운로드 - 현재 안정화된 버전임 http://www.apache.org/dyn/closer.cgi/zookeeper/ 에서 다운로드

(2) 설치할 장비에 압축을 풀기 (3) conf/zoo-sample.cfg 파일을 복사해서 zoo.cfg로 저장

$ cp -p zoo-sample.cfg zoo.cfg #conf 폴더에서 해야함

Page 22: Hadoop install guide by n4tech

22 <N4tech>

(4) conf/zoo.cfg 파일 편집 - dataDir 변수에 ZooKeeper가 사용할 디렉토리를 지정

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/home/n4tech-hadoop/work/zookeeper-3.3.5/data# the port at which the clients will connectclientPort=2181※ 빨간 부분 수정

(5) ZooKeeper 사용 장비의 IP목록과 Port 목록을 추가

conf/zoo.cfg 파일에 아래와 같이 노드의 정보를 추가함.# ZooKeeper Serversserver.123=hadoop31:2888:3888server.23=hadoop11:2888:3888server.130=hadoop1:2888:3888server.131=hadoop2:2888:3888server.136=hadoop3:2888:3888server.139=hadoop4:2888:3888server.151=hadoop5:2888:3888server.143=hadoop6:2888:3888server.142=hadoop7:2888:3888server.140=hadoop8:2888:3888

ex) server.[ip 끝자리]=[PC 명]:2888:3888※ 2888:3888 은 포트 번호로써 건드리지 마시오!

(6) PC 별 ID 부여 [각 PC 마다 지정해야함]

위에서 지정한 dataDir(/home/n4tech-hadoop/work/zookeeper-3.3.5/data)에 myid.txt 파일을 생성 후 해당 PC의 ID를 입력

ex) hadoop8 pc 의 경우 - ip 끝자리만 입력 140

(7) ZooKeeper 구동을 위한 명령어

$ /bin/zkServer.sh start

Page 23: Hadoop install guide by n4tech

23 <N4tech>

2) HBASE 설치

HBASE 란?구글 Bigtable을 모델로 하여 초기 모델 개발(2007년)Hadoop의 서브 프로젝트로 편입 (2008년)분산 컬럼 기반(distributed column oriented) 데이터베이스Bigtable은 1000개 이상의 Cluster node를 지원대용량 Read/Write 기능 지원, Fast Scans 지원HDFS 기반 위에 구현됨Zookeeper를 이용한 고 가용성 보장Membership 정보저장, Dead Server 탐지, Master 선출 및 복구HBASE 주요 용어Table- Row들의 집합 (Row Key가 있으며 다수의 column family로 구성)- Schema 정의서 Column Family 만 정의Row Key- 임의의 Byte열로 사전순으로 내림차순 정렬- 빈 Byte문자열은 테이블의 시작과 끝을 의미Column Family- Column들의 그룹으로 모든 컬럼패밀리의 Member는 같은 접두사를 사용- DB기술팀:김병수와 DB기술팀:이용석 은 DB기술팀이라는 컬럼 패밀리의 멤버컬럼Cell- ROW KEY & Column & Version이 명시된 튜플- 값은 임의의 Byte열이며 Timestamp가 있음

[출처] HBase|작성자 이천사

2-1) Standalone 모드 설치 (1) HBASE 다운로드 - http://ftp.daum.net/apache/hbase/stable/ 에서 hbase-0.94.5.tar.gz 를 다운 - hbase-0.94.5 가 현재 안정화된 버전임.

(2) home/n4tech-hadoop/work/에 압축을 풀어준다.

$ tar xvf hbase-0.92.0.tar.gz $ cd hbase-0.92.0/

Page 24: Hadoop install guide by n4tech

24 <N4tech>

(3) conf/hbase-site.xml 파일을 열어서 다음과 같이 수정

<configuration> <property> <name>hbase.rootdir</name> <value>file:///home/n4tech-hadoop/work/hbase-0.94.5/hbase-${user.name}/hbase</value> </property></configuration>

(4) HBASE 설치를 위한 환경변수 지정 - $HOME 에 있는 .profile 파일을 열어서 다음과 같은 내용을 추가해줌

profile 파일 여는 명령어$ vim ~/.profile [Tab - 자동완성 기능]추가 내용export HBASE_HOME="/home/n4tech-hadoop/work/hbase-0.94.5" - 위에서 설치한 hbase가 어디에 있는지 확인 후 바꿔줘야 함 - n4tech-hadoop 는 계정명

(5) 터미널에서 위 변경을 적용해 줘야함

$ source ~/.profile

(6) HBASE 구동 시킴

$ ./bin/start-hbase.sh

(7) HBASE 쉘(Shell)로 제대로 동작하는지 확인

$ ./bin/hbase shell

(8) TEST 하기

test 라는 테이블에 cf 라는 컬럼을 생성하고 간단하게 값을 입력하는 예제

hbase(main):003:0> create 'test', 'cf'0 row(s) in 1.2200 secondshbase(main):003:0> list 'test'..1 row(s) in 0.0550 secondshbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'0 row(s) in 0.0560 secondshbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'0 row(s) in 0.0370 secondshbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'0 row(s) in 0.0450 seconds

Page 25: Hadoop install guide by n4tech

25 <N4tech>

테이블 삭제

hbase(main):012:0> disable 'test'0 row(s) in 1.0930 secondshbase(main):013:0> drop 'test'0 row(s) in 0.0770 seconds

(9) shell 종료하기 - exit

(10) HBASE 중단 시키기

$ ./bin/stop-hbase.sh

2-2) HBASE 가-분산(Pseudo Distributed) 모드 설치

(1) Hadoop 의 hdfs-site.xml 을 HBASE 의 hdfs-site.xml 에 링크해줌 - 작업하기 편하게 하기 위해

$ cd ~/work/hbase-0.94.5/conf$ ln -s ~/work/hadoop-1.0.4/conf/hdfs-site.xml hdfs-site.xml

(2) conf/hbase-site.xml, conf/hdfs-site.xml 파일을 열어서 아래 내용 추가

<property> <name>dfs.support.append</name> <value>true</value></property>

(3) conf/hdfs-site.xml 파일에 아래 내용 추가 - 동시에 제공될 수 있는 파일들 개수의 상한성을 지정

<property> <name>dfs.datanode.max.xcievers</name> <value>4096</value></property>

(4) conf/hbase-env.sh 파일을 열어서 아래 내용 추가

export HADOOP_HOME = /home/n4tech-hadoop/work/hadoop-1.0.4export HBASE_CLASSPATH=${HBASE_CLASSPATH}:$HADOOP_HOME/confexport JAVA_HOME = /usr/lib/jvm/java-7-oracle

Page 26: Hadoop install guide by n4tech

26 <N4tech>

(5) 최종 수정된 파일 내용들

hbase-site.xml<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property>

<property> <name>dfs.support.append</name> <value>true</value> </property>

<property> <name>dfs.replication</name> <value>1</value> </property></configuration>hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>1</value> </property>

<property> <name>dfs.name.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/name</value> </property>

<property> <name>dfs.data.dir</name> <value>/home/n4tech-hadoop/work/hadoop-1.0.4/data</value> </property>

<property> <name>dfs.support.append</name> <value>true</value> </property>

<property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property></configuration>

Page 27: Hadoop install guide by n4tech

27 <N4tech>

2-3) HBASE 완전-분산(Full Distributed) 모드 설치

(1) conf/hbase-env.sh 에 아래와 내용 추가 - ZooKeeper를 통해 관리 되는 것을 허용함

# Tell HBase whether it should manage it's own instance of Zookeeper or not.export HBASE_MANAGES_ZK=true

(2) conf/hbase-site.xml 파일을 아래와 같이 추가 수정함

<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://172.25.235.123:9000/hbase</value> </property>

<property> <name>hbase.cluster.distributed</name> <value>true</value> </property>

<property> <name>dfs.replication</name> <value>3</value> </property>

<!-- NameNode, Secondary-NameNode IP 지정 클라이언트가 접속해야할 주키퍼를 설정함. --> <property> <name>hbase.zookeeper.quorum</name> <value>172.25.235.123, 172.25.235.23</value> </property>

<property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/work/hbase-0.94.5/zookeeper</value> <description>Property from ZooKeeper's config zoo.cfg. The directory where the snapshot is stored. </description> </property> </configuration>

Page 28: Hadoop install guide by n4tech

28 <N4tech>

(3) conf/regionservers 파일에 내용을 추가

172.25.235.123172.25.235.23172.25.235.130172.25.235.131172.25.235.136172.25.235.139172.25.235.151172.25.235.143172.25.235.142172.25.235.140

(4) 모든 Node에 HBASE 폴더를 rsync 로 복사 - 위에 내용을 찾아보면 나옴.

Page 29: Hadoop install guide by n4tech

29 <N4tech>

3.7 HBASE 와 ZooKeeper 테스트

Page 30: Hadoop install guide by n4tech

30 <N4tech>

3.8 Nutch << 크롤링 기능 사용 >>

3.8.1 Nutch 란

Nutch is open source web-search software. It builds on Lucene Java, adding web-specifics, such as a crawler, a link-graph database, parsers for HTML and other document formats, etc. 넛츠는 오픈소스 web search 소프트웨어입니다.넛츠는 웹 crawler의 기능을 제공하는데 그것은 링크 그래프 데이터베이스, Html 과 다른 문서 파서 등으로 구성이 되어있고 이렇게 수집된 정보들은 루씬을 통하여 검색이 이루어 집니다.

3.8.2 Nutch 설치 1) Nutch-1.6 다운로드 - http://apache.mirror.cdnetworks.com//nutch/1.6/ 에서 다운로드

2) 적당한 위치에 Nutch를 풀어 놓음 - home/n4tech-hadoop/work 폴더에 apache-nutch-1.6로 압축을 해제

3) JDK, Apache-Ant, Maven, Eclipse, m2eclipse가 설치되어 있지 않은 경우에는 설치 - Java-7-oracle, Maven, Eclipse, m2eclipse 는 설치했음 / Apache-Ant 설치

Ant 란?Ant는 OS Independent 하게 프로그램을 Build 할 수 있는 환경을 제공해준다.Build.xml 이란 Build 파일을 작성해서 그 내용에 따라 build를 진행해 나갈 수 있음Ant는 Java에서 거의 표준으로 굳혀져가고 있고, 거의 모든 IDE들이 Ant를 지원함.

$ sudo apt-get install ant

4) 각 프로그램의 환경 변수 등록 (위에 내용 참조)

5) conf/nutch-site.xml 파일에 아래의 내용 추가

<configuration> <property> <name>http.agent.name</name> <value>My Nutch Spider</value> </property></configuration>

Page 31: Hadoop install guide by n4tech

31 <N4tech>

6) conf/regex-urlfilter.txt 에 수집될 URL 형태를 제한함.

# accept anything else <!-- 아래에 내용 추가 -->+^http://([a-z0-9]*\.)*nutch.apache.org/

※ 간단 설명 :  -로 시작하는 것은 skip할 패턴, +로 시작하는 것인 accept할 패턴  - 자세한 내용은 http://wiki.apache.org/nutch/NutchTutorial 참조

3.8.3 Nutch 간단한 문서(HTML document) 수집 예제 테스팅 1) Ant를 실행하여 빌드를 함.

$ ant #home/n4tech-hadoop/work/apache-nutch-1.6 폴더에서 실행

- 빌드가 완료되면, nutch 폴더에 runtime/이라는 디렉토리가 생성됨. Nutch 실행에 필요한 jar, 설정파일, plugin이 복사 됨- 나중에 수집만이 목적인 경우 바이너리를 받아서 실행해도 됨. 자세한 내용은 http://wiki.apache.org/nutch/NutchTutorial 참조

2) 수집의 시작점이 되는 seed url 지정

$ cd $NUTCH_HOME/runtime/local$ mkdir urls$ echo http://nutch.apache.org > urls/seed.txt

3) nutch 폴더안에 runtime/local에서 아래 명령어를 이용하여 수집

$ bin/nutch crawl urls -dir crawl -depth 3 -topN 5

4) $NUTCH_HOME/runtime/local/crawl 이라는 디렉토리 하위에 방문 링크, 다운로드 된 html 등이 들어가 있음, 하지만 text가 아니기 때문에 바로 내용을 확인 할 수 없음

5) Nutch에서 제공하는 덤프명령으로 볼 수 있음. 여기서는 색인 과정을 거쳐서 확인해 봄

Page 32: Hadoop install guide by n4tech

32 <N4tech>

3.8.4 색인을 위한 solr 설치 1) solr-3.6.2 다운로드 - http://mirror.apache-kr.org/lucene/solr/3.6.2/ 에서 압축 파일 다운로드

2) 환경 변수 등록 (위에 내용 참조)

3) 수집 문서를 색인하기 위해 Nutch는 solr 설정파일을 갖고 있음. - solr의 설정 디렉토리에 복사해주고 난 후 solr을 재시작.

$ cd $NUTCH_HOME$ cp $NUTCH_HOME/runtime/local/conf/schema.xml $SOLR_HOME/example/solr/conf/$ cd $SOLR_HOME/solr/example$ java -jar start.jar

4) Nutch 수집시 solr에 색인이 되도록 -solr 옵션을 주고 Nutch 재실행.

$ bin/nutch crawl urls -solr http://localhost:8983/solr/ -depth 3 -topN - $NUTCH_HOME/runtime/local 폴더에서 실행해야 함.

5) 아래 URL에 접속하여 Search 버튼을 클릭하여 수집된 문서 확인 - http://localhost:8983/solr/admin/