20141029 하둡2.5와 hive설치 및 예제

80
hadoop 2 & Hive 스터디 환경 구축 with VirtualBox 어디에도 이보다 친절한 자료는 없다! IT가맹점개발팀 이태영 2014.10.29

Transcript of 20141029 하둡2.5와 hive설치 및 예제

Page 1: 20141029 하둡2.5와 hive설치 및 예제

hadoop 2 & Hive

스터디 환경 구축 with VirtualBox

어디에도 이보다 친절한 자료는 없다!

IT가맹점개발팀 이태영

2014.10.29

Page 2: 20141029 하둡2.5와 hive설치 및 예제

출처 : http://hortonworks.com/hadoop/yarn/

YARN의 가장 큰 특징 Resource Manager의 분리

Page 3: 20141029 하둡2.5와 hive설치 및 예제

YARN

Yet Another Resource Negotiator

특징

• JobTracker의 두 가지 역할 분리

① Resource 관리

② Job 상태 관리

기존 JobTracker의 병목을 제거

• 범용 클러스터 API

MR 외에 다양한 어플리케이션을 실행할 수 있으며,

어플리케이션 마다 자원(CPU, 메모리)를 할당

Page 4: 20141029 하둡2.5와 hive설치 및 예제

출처 : http://hortonworks.com/hadoop/yarn/

Page 5: 20141029 하둡2.5와 hive설치 및 예제

Master Node 하둡 클러스터의 Resource와 Job 관리를 함께 수행. 병목이 발생하는 지점

Data Node 한 노드에서 실행할 수 있는 Map과 Reduce Task의 개수 제한. M/R만 처리

Hadoop 1.x

출처 : http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

Page 6: 20141029 하둡2.5와 hive설치 및 예제

출처 : http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

Resource Manager 클라이언트가 요청한 어플리케이션마다 자원을 관리 하둡 클러스터 내 1개

Node Manager 각 슬레이브 노드 마다 1개. 컨테이너와 자원의 상태를 RM에게 통지

Hadoop 2.x

Application Master 어플리케이션의 실행을 관리하고 상태를 RM에게 통지 어플리케이션마다 1개.

Container 어플리케이션을 수행하는 역할 제한된 자원을 소유하며, 상태를 AM에게 통지

Page 7: 20141029 하둡2.5와 hive설치 및 예제

출처 : http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

1. 클라이언트가 RM에게 어플리케이션 제출

2. NM을 통해 AM 실행

3. AM은 RM에게 자신을 등록

4. AM은 RM에게 컨테이너 할당할 공간/위치를 받음

5. AM은 NM에게 컨테이너를 실행 요청

(어플리케이션 정보를 NM에게 제공)

6. 컨테이너는 어플리케이션의 상태정보를 AM에 알림

7. 클라이언트는 어플리케이션의 실행정보를 얻기 위해

AM와 직접 통신

8. 어플리케이션 종료되면 AM은 RM에게서

자신의 자원을 해제하고 종료

Hadoop 2.x

Page 8: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.4 설치

1. 설치순서 (Windows 64bit에서만 가능)

① CentOS 6.5 설치

② Java 8 설치

③ 구글 크롬 설치

④ 리눅스 클러스터 구축

⑤ Hadoop 2.5 설치

⑥ Hive 설치

⑦ 예제

Page 9: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

Master

Slave Slave Slave

<설치구성 목표>

서버명 big01

IP 192.168.65.101

서버명 big02

IP 192.168.65.102

서버명 big03

IP 192.168.65.103

서버명 big04

IP 192.168.65.104

Page 10: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

1. VirtualBox를 설치한다.

2. 새로 만들기(N) 버튼을 누르고 리눅스용 VM을 하나 만든다.

(이름은 big01)

Page 11: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

1. Basic Server를 선택

2. 소프트웨어 추가를 위해 [지금 선택]을 하여 다음 버튼

Page 12: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

1. Basic Server를 선택

2. 소프트웨어 추가를 위해 [지금 선택]을 하여 다음 버튼

1. 데스크탑을 선택하여 KDE를 제외한 모든 옵션 선택

Page 13: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

사용자 추가

아이디 hadoop

암호 hadoop

Page 14: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

[NTP 서버] 아무거나 선택 후 다음

Page 15: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

리눅스 OS 설치는 성공

Page 16: 20141029 하둡2.5와 hive설치 및 예제

CentOS 설치가 완료된 후 게스트 확장 설치를 해준다.

CentOS 6.5 설치

Page 17: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

Page 18: 20141029 하둡2.5와 hive설치 및 예제

아래처럼 Building the main Guest Additions module 에러(실패)가 발생하면

$ yum install gcc dkms make kernel-devel

$ yum install kernel sources

$ yum install kernel-headers

$ yum groupinstall "Development Tools"

root 권한으로 아래 명령어로 관련 pkg 설치 후, 리부팅&게스트 모드 재설치

CentOS 6.5 설치

Page 19: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

게스트모드 설치가 정상적으로 완료되면,

1. 창 크기 맞게 해상도가 자유자재 설정

2. 윈도우 OS에서 마우스로 파일 드래그&드롭 복사

3. 윈도우 OS와 가상 VM간 클립보드 공유 가능 (Ctrl+C, Ctrl+V)

Page 20: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

메뉴에서 클립보드 공유, Drag'n Drop을 모두 양방향으로 변경

이제 윈도우즈와 VM간 파일을 드래그앤드롭으로 복사할 수 있고

윈도우즈와 VM간 Ctrl+C, Ctrl+V도 자유롭게 사용 가능.

Page 21: 20141029 하둡2.5와 hive설치 및 예제

CentOS 6.5 설치

터미널에서 setup 명령어로 진입하여 방화벽 설정의 활성화 해제

Page 22: 20141029 하둡2.5와 hive설치 및 예제

Google Chrome 설치

1. YUM repository 설정

[google-chrome]

name=google-chrome

baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64

enabled=1

gpgcheck=1

# vi /etc/yum.repos.d/google-chrome.repo

root 권한 필요

# yum install google-chrome-stable

2. YUM 설치

# wget http://chrome.richardlloyd.org.uk/install_chrome.sh

# chmod u+x install_chrome.sh

# ./install_chrome.sh

3. 구글 크롬 스크립트 다운로드 및 실행

Page 23: 20141029 하둡2.5와 hive설치 및 예제

Google Chrome 설치 root 권한 필요

# google-chrome &

4. 구글 크롬 실행

실행이 안되면, 이전 스크립트 명령어 재실행

# ./install_chrome.sh

정상적으로 완료되면, 시스템 메뉴 오른쪽 - 브라우저 버튼을 클릭하면 크롬이 실행

Page 24: 20141029 하둡2.5와 hive설치 및 예제

자바8 설치

1. CentOS가 설치한 자바7 삭제

# yum remove java 후 [Y/N] y 입력

2. 자바 8 다운로드

http://java.sun.com 접속 후 다운로드

Page 25: 20141029 하둡2.5와 hive설치 및 예제

자바8 설치

3. 자바 8 설치

[hadoop@big01 ~]$ cd 다운로드/ [hadoop@big01 다운로드]$ mv jdk-8u25-linux-x64.tar.gz ~/ [hadoop@big01 다운로드]$ cd - /home/hadoop [hadoop@big01 ~]$ tar zxvf jdk-8u25-linux-x64.tar.gz [hadoop@big01 ~]$ ln -s jdk1.8.0_25 java

모든 오픈소스 Binary들은 링크를 걸어주는게 관리측면에서 편하다.

Page 26: 20141029 하둡2.5와 hive설치 및 예제

자바8 설치

4. 자바 8 환경설정

[hadoop@big01 ~]$ vi .bash_profile

1) JAVA_HOME 설정 및 PATH 추가

[hadoop@big01 ~]$ . .bash_profile

2) 프로파일 실행

[hadoop@big01 ~]$ java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

3) 자바 버전 확인

Page 27: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

설치 완료

big02 big03 big04

Master

Slave Slave Slave

<설치 목표>

big01

남은 것 남은 것 남은 것

big01 설치 완료 남은 3대는 어떡해?

Page 28: 20141029 하둡2.5와 hive설치 및 예제

big02, big03, big04 차례로

그.냥.복.사

리눅스 클러스터링

Page 29: 20141029 하둡2.5와 hive설치 및 예제

어댑터2 추가 - 호스트 전용 어댑터 선택

MAC주소를 랜덤 재할당 big02, big03, big04 동일하게

리눅스 클러스터링

Page 30: 20141029 하둡2.5와 hive설치 및 예제

1

2

3

IP주소 영역 확인

리눅스 클러스터링

Page 31: 20141029 하둡2.5와 hive설치 및 예제

4대 서버들을 선택(SHIFT+마우스 클릭) 서버 시작(T)

리눅스 클러스터링

Page 32: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링 1) DNS 변경

(big01을 복제하였으니) big02, big03, big04 가상노드들을 선택하여 자신의 서버명으로 변경해준다.

setup 명령어 - 네트워크 설정 - DNS 설정

1

2 로그아웃 후 big02로 변경 확인

Page 33: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링 2) NIC 네트워크 설정

[hadoop@big01 바탕화면]$ ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:27:CC:F1:DB

inet6 addr: fe80::a00:27ff:fecc:f1db/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

eth1 Link encap:Ethernet HWaddr 08:00:27:47:36:C0

inet addr:192.168.56.101 Bcast:192.168.56.255

Mask:255.255.255.0

inet6 addr: fe80::a00:27ff:fe47:36c0/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback ....

NAT

Host-Only (노드들간 통신용)

맥 어드레스

맥 어드레스

/etc/sysconfig/network-scripts 디렉토리 내부에

ifcfg-* 파일명으로 NIC 설정파일들이 존재 한다.

예) eth0 장치의 경우 ifcfg-eth0

(없으면 다른 파일을 복사해서 만들어주고 수정)

Page 34: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링 2) NIC 네트워크 설정

eth1 없다 -rw-r--r--. 1 root root 136 2014-10-30 21:43 ifcfg-eth0

-rw-r--r--. 1 root root 254 2013-10-10 23:48 ifcfg-lo

[root@big01 network-scripts]# cp ifcfg-eth0 ifcfg-eth1

[root@big01 network-scripts]# vi ifcfg-eth1

DEVICE=eth0

HWADDR=08:00:27:CC:F1:DB

TYPE=Ethernet

UUID=c06f2b6b-efc3-4415-af28-7c51869efc8f

ONBOOT=no

NM_CONTROLLED=yes

BOOTPROTO=dhcp

DEVICE=eth1

HWADDR=08:00:27:47:36:C0

TYPE=Ethernet

IPADDR=192.168.56.111

NETWORK=192.168.56.0

GATEWAY=192.168.56.1

NETMASK=255.255.255.0

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=no

eth1 생성&편집

ifcfg-eth1 수정 전

[root@big01 network-scripts]# /etc/init.d/network restart 인터페이스 eth0 (을)를 종료 중: [ OK ] 인터페이스 eth1 (을)를 종료 중: 장치 상태: 3 (연결 끊겼음) [ OK ] loopback 인터페이스 종료 중: [ OK ] loopback 인터페이스 활성화중 입니다: [ OK ] eth1 인터페이스 활성화중 입니다: [ OK ]

ifcfg-eth1 수정 후

Page 35: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

아래처럼 ifconfig를 참고하여 NIC 설정파일들을 만든다.

big02, big03, big04 노드들의 IP는 다음장을 참고

Page 36: 20141029 하둡2.5와 hive설치 및 예제

Master

Slave Slave Slave

서버명 big01

IP 192.168.65.101

서버명 big02

IP 192.168.65.102

서버명 big03

IP 192.168.65.103

서버명 big04

IP 192.168.65.104

리눅스 클러스터링

Page 37: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

TIP) 아예 NIC 디바이스명과 맥어드레스를 변경하려면?

$ vi /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:1C:6B:E7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:94:D0:C1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

/etc/sysconfig/network-scripts 아래 해당 NIC 스크립트 생성&설정

• /etc/sysconfig/network-scripts/ifcfg-eth0

• /etc/sysconfig/network-scripts/ifcfg-eth1

$ reboot

Page 38: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

TIP) network restar시 RTNETLINK answers: File exists 에러

[root@big01 바탕화면]# service network restart

인터페이스 eth0 (을)를 종료 중: 장치 상태: 3 (연결 끊겼음) [ OK ]

인터페이스 eth1 (을)를 종료 중: [ OK ]

loopback 인터페이스 종료 중: [ OK ]

loopback 인터페이스 활성화중 입니다: [ OK ]

eth0 인터페이스 활성화중 입니다: 활성화된 연결 상태: 활성화중

활성화된 연결 경로: /org/freedesktop/NetworkManager/ActiveConnection/5

상태: 활성화됨

연결이 활성화되었습니다 [ OK ]

eth1 인터페이스 활성화중 입니다: RTNETLINK answers: File exists [ OK ]

해당 ifcfg-* 파일에 NOZEROCONF=yes 추가 후 restart

Page 39: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

3) host 설정

# vi /etc/hosts

192.168.56.101 big01

192.168.56.102 big02

192.168.56.103 big03

192.168.56.104 big04

big01, big02, big03, big04 모두 적용

4) ssh 연결 확인

[hadoop@big01 바탕화면]$ ssh big02

The authenticity of host 'big02 (192.168.56.102)' can't be established.

RSA key fingerprint is 09:6f:be:0b:0c:ba:3c:a7:a4:19:3c:ac:84:05:5a:ff.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'big02,192.168.56.102' (RSA) to the list of

known hosts.

hadoop@big02's password:

첫 접속시 인증을 받으므로, big02, big03, big04 한 번씩 접속

Page 40: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

5) ssh 키 배포

[hadoop@big01 바탕화면]$ ssh big02

hadoop@big02's password:

연결할 때마다 비밀번호를 입력해야 하므로 hadoop 계정의 ssh 키를 배포한다.

[hadoop@big01 ~]$ ssh-keygen -t rsa 엔터, 엔터, 엔터 +--[ RSA 2048]----+ | | | | | . | | o . . . | | S E . o | | . o o . | | o O = .| | B B.+ | | ..*==. | +-----------------+ 나오면 성공

Page 41: 20141029 하둡2.5와 hive설치 및 예제

리눅스 클러스터링

5) ssh 키 배포

[hadoop@big01 ~]$ cd .ssh/

[hadoop@big01 .ssh]$ scp id_rsa.pub /home/hadoop/.ssh/authorized_keys

[hadoop@big01 .ssh]$ scp id_rsa.pub hadoop@big02:/home/hadoop/.ssh/authorized_keys

[hadoop@big01 .ssh]$ scp id_rsa.pub hadoop@big03:/home/hadoop/.ssh/authorized_keys

[hadoop@big01 .ssh]$ scp id_rsa.pub hadoop@big04:/home/hadoop/.ssh/authorized_keys

계정의 .ssh 디렉토리의 id_rsa.pub 파일을 각 노드로 authorized_keys 파일로 배포한다.

[hadoop@big01 .ssh]$ ssh big02

Last login: Fri Oct 31 00:25:10 2014 from big01

[hadoop@big01 .ssh]$ ssh big03

Last login: Fri Oct 31 00:25:11 2014 from big01

[hadoop@big01 .ssh]$ ssh big04

Last login: Fri Oct 31 00:25:18 2014 from big01

이후 마스터 노드인 big01에서 각 노드별로 ssh 접속을 할 때 묻지도 따지지도 않는다.

이것으로 클러스터링 구축 끝 -

Page 42: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

1) 하둡 2.5 다운로드

http://hadoop.apache.org 접속 후 다운로드

2) 계정 홈 디렉토리로 mv

$ mv hadoop-2.5.1.tar.gz ~

3) 압축을 풀고 hadoop 심볼릭 링크를 생성

$ ln -s hadoop-2.5.1 hadoop

4) .bash_profile에 HADOOP_HOME과 PATH 설정

1. 하둡 2.5 설치

PATH에 하둡의 bin 디렉토리와 sbin 디렉토리를 추가

뿌뿌

Page 43: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

$HADOOP_HOME/etc/hadoop 디렉토리

파일명 설명

hadoop-env.sh Hadoop을 실행하는 쉘스크립트 파일 JDK Path, Classpath, 데몬 옵션 등 설정

slaves Data node들의 서버 지정

core-site.xml HDFS와 MapReduce에서 공통적으로 사용할 정보들을 설정. hdfs-site와 mapred-site의 공통 설정 부분

hdfs-site.xml 하둡 파일시스템(HDFS)과 관련된 환경 정보를 설정

mapred-site.xml MapReduce의 어플리케이션 정보를 설정

yarn-site.xml Resource Manager, Node Manager 정보를 설정

yarn-env.sh YARN을 실행하는 쉘스크립트 파일

출처 : http://hadoop.apache.org/docs/r2.5.0/hadoop-project-dist/hadoop-common/ClusterSetup.html

2. 하둡 2.5 환경설정

Page 44: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

hadoop-env.sh Hadoop을 실행하는 쉘스크립트 파일이다. JDK Path, Classpath, 데몬 옵션 등 설정

export JAVA_HOME=/home/hadoop/java

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

파일 최상단에 아래 정보 추가

내용 추가한 화면

복사/붙여넣기용

Page 45: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

yarn-env.sh YARN을 실행하는 쉘스크립트 파일

export JAVA_HOME=/home/hadoop/java

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

파일 최상단에 아래 정보 추가

Page 46: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

slaves Data node들의 서버 지정

파일에 slave 노드들 작성/저장

Master

Slave Slave Slave

big02 big03 big04

big01

big02

big03

big04

Page 47: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

core-site.xml HDFS와 MapReduce에서 공통적으로 사용할 정보들을 설정. hdfs-site와 mapred-site의 공통 설정 부분

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://big01:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/hadoop/tmp/</value>

</property>

</configuration>

저장 완료 후 /home/hadoop/hadoop/tmp 디렉토리 생성

1)아래 내용 작성 후 저장

참고 : http://hadoop.apache.org/docs/r2.5.0/hadoop-project-dist/hadoop-common/core-default.xml

Page 48: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

hdfs-site.xml 하둡 파일시스템(HDFS)과 관련된 환경 정보를 설정

<configuration>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>big02:50090</value>

</property>

<property>

<name>dfs.namenode.secondary.https-address</name>

<value>big02:50091</value>

</property>

</configuration>

1)아래 내용 작성 후 저장

참고 : http://hadoop.apache.org/docs/r2.5.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

Page 49: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

mapred-site.xml MapReduce의 어플리케이션 정보를 설정

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

1)아래 내용 작성 후 저장

참고 : http://hadoop.apache.org/docs/r2.5.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

mapred-site.xml이 없다면 mapred-site.xml.template 복사/생성

Page 50: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

2. 하둡 2.5 환경설정

파일명 설명

yarn-site.xml Resource Manager, Node Manager 정보를 설정

<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>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>big01:8025</value>

</property>

...(이어서)...

참고 : http://hadoop.apache.org/docs/r2.5.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

...(이어서)...

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>big01:8030</value>

</property>

<property>

<name>yarn.resourcemanager.address</name>

<value>big01:8040</value>

</property>

</configuration>

1 2

Page 51: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

3. 하둡 2.5 배포

[hadoop@big01 ~]$ cd

[hadoop@big01 ~]$ scp -r hadoop-2.5.1 hadoop@big02:~

[hadoop@big01 ~]$ scp -r hadoop-2.5.1 hadoop@big03:~

[hadoop@big01 ~]$ scp -r hadoop-2.5.1 hadoop@big04:~

[hadoop@big01 ~]$ ssh hadoop@big02 "ln -s hadoop-2.5.1 hadoop"

[hadoop@big01 ~]$ ssh hadoop@big03 "ln -s hadoop-2.5.1 hadoop"

[hadoop@big01 ~]$ ssh hadoop@big04 "ln -s hadoop-2.5.1 hadoop"

[hadoop@big01 ~]$ scp .bash_profile hadoop@big02:~

[hadoop@big01 ~]$ scp .bash_profile hadoop@big03:~

[hadoop@big01 ~]$ scp .bash_profile hadoop@big04:~

1) 하둡 디렉토리 배포

2) 하둡 디렉토리 심볼릭 링크 처리

3) 계정 profile 배포

Page 52: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

4. 하둡 2.5 실행

[hadoop@big01 ~]$ hadoop namenode -format

14/10/31 21:05:45 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0

14/10/31 21:05:45 INFO util.ExitUtil: Exiting with status 0

14/10/31 21:05:45 INFO namenode.NameNode: SHUTDOWN_MSG:

/************************************************************

SHUTDOWN_MSG: Shutting down NameNode at big01/192.168.56.101

************************************************************/

1) 하둡 네임노드 포멧

[hadoop@big01 ~]$ start-all.sh

This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

14/10/31 21:06:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes

where applicable

Starting namenodes on [big01]

Starting secondary namenodes [0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to /home/hadoop/hadoop-2.5.1/logs/hadoop-hadoop-secondarynamenode-big01.out

starting yarn daemons

starting resourcemanager, logging to /home/hadoop/hadoop-2.5.1/logs/yarn-hadoop-resourcemanager-big01.out

big03: starting nodemanager, logging to /home/hadoop/hadoop-2.5.1/logs/yarn-hadoop-nodemanager-big03.out

big02: starting nodemanager, logging to /home/hadoop/hadoop-2.5.1/logs/yarn-hadoop-nodemanager-big02.out

2) 하둡 디렉토리 실행

Page 53: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

Master

Slave Slave Slave

big02 big03 big04

big01

4. 하둡 2.5 실행

3) 하둡 실행 확인

[hadoop@big01 ~]$ jps 명령어 [hadoop@big01 ~]$ jps

4085 ResourceManager

3759 NameNode

31120 DataNode

30306 SecondaryNameNode

31229 NodeManager

31025 NodeManager

30920 DataNode

30979 DataNode

31083 NodeManager

Page 54: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

5. 하둡 2.5 실행 확인

a) HDFS 확인 - http://big01:50070

Page 55: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 2.5 설치

5. 하둡 2.5 실행 확인

b) Resource & Node Manager 확인 - http://big01:8088

Page 56: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발

1. 이클립스 설치

1) http://eclipse.org 에서 이클립스 다운로드

2) 압축 풀고, 바탕화면에 링크 만들기

Page 57: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 1. 자바 프로젝트 생성

1. 프로젝트명 생성

BCHadoop

2. package 추가

word

3. 클래스 추가

WordCount

Page 58: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발

<?xml version="1.0" encoding="UTF-8"?> <project name="bc-hadoop-study" default="build"> <property name="major-version" value="1" /> <property name="minor-version" value="0" /> <property name="build-number" value="0" /> <property name="version" value="${major-version}.${minor-version}.${build-number}" /> <property name="company-name" value="bc" /> <property name="project-name" value="hadoop" /> <property name="general-lib" value="${company-name}-${project-name}.jar" /> <property name="general-src" value="${company-name}-${project-name}-src.zip" /> <property name="build-Path" location="." /> <property name="src.dir.src" location="${build-Path}/src" /> <property name="src.dir.bin" location="${build-Path}/bin" /> <property name="src.dir.build" location="${build-Path}/build" /> <target name="build" depends="build-lib, build-src" /> <target name="Clean-all" depends="clean-lib, clean-src" /> <target name="clean-lib"> <delete file="${src.dir.bild}/${general-lib}" /> </target> <target name="clean-src"> <delete file="${src.dir.bild}/${general-src}" /> </target> <target name="build-lib" depends="clean-lib"> <jar destfile="${src.dir.build}/${general-lib}" basedir="${src.dir.bin}"> <manifest> <attribute name="${project-name}-Version" value="${version}" /> </manifest> </jar> </target> <target name="build-src" depends="clean-src"> <zip zipfile="${src.dir.build}/${general-src}" basedir="${src.dir.src}"> </zip> </target> </project>

2. ant 빌드파일 추가

build.xml 파일 추가

오른쪽 내용 붙여넣기

Page 59: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

프로젝트 마우스 오른쪽 버튼 - Build Path - Configure Build Path 선택

Page 60: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

Library에서 Add External Jars 선택

Page 61: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

하둡 디렉토리 내에 share/hadoop 이동하면 라이브러리 묶음 존재

Page 62: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

common 디렉토리 이동 후 아래 jar 파일을 선택/확인

Page 63: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

hdfs 디렉토리 이동 후 전체 jar 파일을 선택/확인

Page 64: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

mapreduce 디렉토리 이동 후 전체 jar 파일을 선택/확인

Page 65: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 3. Hadoop 2.5 라이브러리 Build Path 추가

tools/lib 디렉토리로 이동 후 전체 jar 파일 선택 /확인

Page 66: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 4. WordCount 클래스 코딩

public class WordCount {

public static class WordCountMapper

extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();

public void map(Object key, Text value, Context context

) throws IOException, InterruptedException {

StringTokenizer itr = new StringTokenizer(value.toString());

while (itr.hasMoreTokens()) {

word.set(itr.nextToken());

context.write(word, one);

}

}

}

public static class WordCountReducer

extends Reducer<Text,IntWritable,Text,IntWritable> {

private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,

Context context ) throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += val.get();

}

result.set(sum);

context.write(key, result);

}

}

...(이어서)...

...(이어서)...

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

Job job = Job.getInstance(conf, "word count");

job.setJarByClass(WordCount.class);

job.setMapperClass(WordCountMapper.class);

job.setCombinerClass(WordCountReducer.class);

job.setReducerClass(WordCountReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

FileOutputFormat.setOutputPath(job, new Path(args[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

1 2

Page 67: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 4. WordCount 프로젝트 빌드

build.xml 파일을 선택, 마우스 오른쪽 버튼을 눌러 Ant Build 실행

Page 68: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 4. WordCount 프로젝트 빌드

BUILD SUCCESSFUL 나오면 당연히 빌드 성공

이 위치에 bc-hadoop.jar 파일이 생성되었다!

Page 69: 20141029 하둡2.5와 hive설치 및 예제

Hadoop 개발 4. WordCount 프로젝트 빌드

[실행명령어] hadoop jar <빌드 jar 파일> <실행 Driver 클래스> <입력파일> <출력파일>

[hadoop@big01 hadoop-2.5.0-src]# hadoop jar /home/hadoop/workspace/BCHadoop/build/bc-hadoop.jar word.WordCount /user/hadoop/alice.txt result.txt 14/11/01 00:03:55 INFO client.RMProxy: Connecting to ResourceManager at big01/192.168.56.101:8040 14/11/01 00:03:59 WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 14/11/01 00:04:00 INFO input.FileInputFormat: Total input paths to process : 1 14/11/01 00:04:00 INFO mapreduce.JobSubmitter: number of splits:1 14/11/01 00:04:00 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1414758336803_0001 14/11/01 00:04:02 INFO impl.YarnClientImpl: Submitted application application_1414758336803_0001 14/11/01 00:04:02 INFO mapreduce.Job: The url to track the job: http://big01:8088/proxy/application_1414758336803_0001/ 14/11/01 00:04:02 INFO mapreduce.Job: Running job: job_1414758336803_0001 14/11/01 00:04:16 INFO mapreduce.Job: Job job_1414758336803_0001 running in uber mode : false 14/11/01 00:04:16 INFO mapreduce.Job: map 0% reduce 0% 14/11/01 00:04:27 INFO mapreduce.Job: map 100% reduce 0%

[hadoop@big01 ~]$ hadoop fs -cat result.txt/part-r-00000 | head "'TIS 1 "--SAID 1 "Come 1 "Coming 1 "Defects," 1 "Edwin 1 "French, 1 "HOW 1 "He's 1

Page 70: 20141029 하둡2.5와 hive설치 및 예제

Hive 설치

1) Hive 0.13 다운로드

http://hive.apache.org 접속 후 다운로드

2) 계정 홈 디렉토리로 mv

$ mv apache-hive-0.13.1-bin.tar.gz ~

3) 압축을 풀고 hadoop 심볼릭 링크를 생성

$ ln -s apache-hive-0.13.1-bin hive

4) .bash_profile에 HIVE_HOME과 PATH 추가

Page 71: 20141029 하둡2.5와 hive설치 및 예제

Hive 아키텍처

Meta Store

Hadoop MapReduce

Hadoop DFS

CLI JDBC

Driver

SQL Parser

Query Optimizer

Physical Plan

Execution

Client

•Hive는 별도 환경 설정을 하지 않으면, Metastore는 derby db로 지정

•derby의 경우 파일 전체로 Lock이 되므로 다수 이용자가 동시 사용 불가

→ Metastore를 RDBMS로 지정

Page 72: 20141029 하둡2.5와 hive설치 및 예제

Hive 특징

1) Hive에서 사용되는 데이터는 읽기 전용

• UPDATE와 DELETE는 사용 불가

• INSERT는 빈 테이블에 입력, 혹은 기존 데이터를 덮어쓰는 경우만 가능

• INSERT OVEWRITE 사용

2) Hive 서브쿼리는 FROM 절에만 사용 가능

3) 저장 프로시저 (stored procedure) 사용 불가

4) ANSI SQL만 지원하며 MySQL에 가장 유사

5) Hive의 테이블 종류

• Managed Table : Hive가 데이터의 생명 주기를 직접 제어

• External Table : Hive가 데이터의 생명 주기를 관리 안 함

Page 73: 20141029 하둡2.5와 hive설치 및 예제

Hive 고유한 SQL문

1. 데이터를 업로드 하는 방법

LOAD DATA INPATH '위치'

OVERWRITE INTO TABLE 테이블

PARTITION( 변수 = ' 값 ' );

2. External 테이블 생성

CREATE EXTERNAL TABLE 테이블( COLUMN STRING )

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

STORED AS TEXTFILE

LOCATION 'HDFS의 파일 경로' ;

Page 74: 20141029 하둡2.5와 hive설치 및 예제

MySQL 설치

1. MySQL 설치

# yum install mysql-server

2. MySQL 실행

# service mysqld start

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h big01 password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/bin/mysqlbug script! [ OK ] mysqld (을)를 시작 중: [ OK ]

Page 75: 20141029 하둡2.5와 hive설치 및 예제

MySQL 설치

3. root 비밀번호 변경

# mysqladmin -u root hadoop

[root@big01 hadoop]# mysqladmin -u root password hadoop [root@big01 hadoop]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit

4. MySQL 부팅시 실행 추가

#chkconfig mysqld on

[root@big01 hadoop]# chkconfig mysqld on [root@big01 hadoop]# chkconfig --list mysqld mysqld 0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

Page 76: 20141029 하둡2.5와 hive설치 및 예제

MySQL-Hive 연동

1. MySQL Connector 설치

# yum install mysql-connector-java

2. MySQL Connector .jar 파일 복사

# cp /usr/share/java/mysql-connector-java.jar ~hadoop/hive/lib/mysql-connector-java.jar

[root@big01 java]# mysql -u root -p Enter password: mysql> create database metastore; Query OK, 1 row affected (0.00 sec) mysql> use metastore; Database changed

4. Hive 유저 추가 및 권한 할당

mysql> create user 'hive'@'%' identified by 'hive'; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on metastore.* to 'hive'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

귀찮으니 hive 유저의 비번도 hive, 모든 권한 할당

3. MySQL 접속 후 metastore DB 생성

Page 77: 20141029 하둡2.5와 hive설치 및 예제

MySQL-Hive 연동

5. hive-site.xml 설정

# yum install mysql-connector-java

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://big01/metastore?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>hive</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive</value>

</property>

<property>

<name>hive.metastore.uris</name>

<value>thrift://big01:9083</value>

</property>

</configuration>

Page 78: 20141029 하둡2.5와 hive설치 및 예제

MySQL-Hive 연동

6. hive 서버 서비스 실행

[hadoop@big01 hive]$ hive --service hiveserver &

Starting Hive Thrift Server

[hadoop@big01 hive]$ hive --service metastore &

Starting Hive Metastore Server

7. hive 실행

[hadoop@big01 hive]$ hive Logging initialized using configuration in jar:file:/home/hadoop/apache-hive-0.13.1-bin/lib/hive-common-0.13.1.jar!/hive-log4j.properties hive>

mysql> use metastore; Database changed mysql> show tables; +---------------------------+ | Tables_in_metastore | +---------------------------+ 29 rows in set (0.00 sec) mysql>

8. MySQL에서 metastore 확인

hive가 정상적으로 실행되면 metastore에는 자동적으로 테이블들이 만들어진다.

Page 79: 20141029 하둡2.5와 hive설치 및 예제

Hive 예제

1. Hive WordCount 예제

hive> create external table alice( line string );

hive> load data inpath 'alice.txt' overwrite into table alice;

hive> create table word_hive as

select word, count(1) cnt

from (select explode(split(line, '\s')) as word from alice) w

group by word;

hive> select * from word_hive limit 10; OK 1437 173 1 THE END 1 and 1 Said 1 With 1 cau 1 whole 1 (WITH ALICE'S LOVE). 1

2. 결과 확인

CTAS 쿼리

HDFS 데이터를 테이블로 로드

Page 80: 20141029 하둡2.5와 hive설치 및 예제

끝.