AWS(Amazon Web Service)에 Hadoop 설치 하기 #5

이 글은 LS글로벌의 [빅데이터 처리 분석 실무 표준 과정] 교육 중 Hadoop을 Oracle VirtualBox에 설치하는 실습 과정을 AWS에 설치하는 내용으로 정리하였습니다.

[AS-IS]
VM : Oracle Virtualbox + CentOS 6

[TO-BE]
VM : AWS + Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type – ami-e21cc38c

 

그리고, 아래와 같이 총 5개의 내용으로 구성되어 있습니다.

1. EC2(Elastic Compute Cloud) 인스턴스 2개 생성

2. 생성된 EC2 인스턴스 접속 방법

3. Hadoop 설치를 위한 기본 환경 설정

4. Hadoop 설치

5. Hive 설치

 

주의사항

AWS는 Linux t2.micro 1개의 인스턴스 사용시 1개월 실행을 가정하여 12개월 동안 무료로 사용할 수 있습니다.
이번 설치 과정에서는 Linux t2.micro 2개의 인스턴스를 사용하여 Hadoop을 설치할 예정으로 보름(15일) 실행 시 무료입니다. Hadoop 설치 후 해당 인스턴스를 보름(15일) 이상 계속 사용할 경우 요금이 부과될 수 있으니 요금 부과를 원하지 않을 경우 꼭 인스턴스를 Stop 하거나 Terminate 해야 합니다.

 

1. EC2(Elastic Compute Cloud) 인스턴스 2개 생성

2. 생성된 EC2 인스턴스 접속 방법

3. Hadoop 설치를 위한 기본 환경 설정

4. Hadoop 설치

5. Hive 설치

 

교육 과정에서는 Hive 0.13.1 버전을 설치하였습니다. 이 과정에서는 Hive 2.3.0 버전을 설치하겠습니다. Hive의 파일은 아래 홈페이지를 방문하여 Downloads의 링크를 따라가다 보면 최종 링크를 확인할 수 있습니다.

http://hive.apache.org

왼쪽 메뉴에서 Downloads 를 클릭합니다.

메인 화면에 있는 Download a release now! 를 클릭합니다.

3개의 링크 중 저는 http://apache.tt.co.kr/hive/ 를 클릭하여 이동하였습니다.

버젼 별로 경로가 나눠져 있는데, hive-2.3.0 을 클릭하여 한번 더 이동합니다.

최종 Download를 받을 수 있는 파일이 나타납니다. 해당 위치에 있는 2개의 파일 중 binary 파일의 경로를 확인 후 wget 명령어로 최신 버전의 파일을 다운 받습니다.

$ wget http://apache.tt.co.kr/hive/hive-2.3.0/apache-hive-2.3.0-bin.tar.gz

Download 가 완료 되면 해당 파일의 압축을 풉니다.

$ tar xvfz apache-hive-2.3.0-bin.tar.gz

Hive 실행에 필요한 환경변수를 설정합니다.

$ sudo vi /etc/profile

제일 아래쪽에 아래와 같이 설정합니다.

export HIVE_HOME=/home/ec2-user/apache-hive-2.3.0-bin
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/Hadoop
export PATH=$HIVE_HOME/bin:$PATH

수정한 파일이 반영될 수 있도록 source 명령을 실행해줍니다.

$ source /etc/profile

설치가 완료되었으면 실행해봅니다. hive> 프롬프트가 나타나면 설치가 잘 된 것입니다.

$ ./hive

 

Hive 설치가 완료 되었습니다.

추가적으로 Hive의 다중접속 환경 구성 등 원할한 사용을 위하여 meta data를 DB에 저장하는 방식으로 변경하겠습니다. DB는 MySQL을 사용합니다.

기존에 생성한 인스턴스에 MySQL을 설치할 수도 있으나 MySQL을 구동할 인스턴스를 별도로 하나 더 만듭니다. 기존 인스턴스 생성과 동일하지만 Security Group을 선택하는 과정에서 이미 생성한 그룹을 선택하고, Key 파일 생성 할때도 기존 Key를 이용하게 설정하는 부분만 다릅니다.

첫번째 문서에서 설명된 내용과 중복되는 부분은 별도 설명없이 캡쳐 화면으로만 보여 드립니다.

 

 

추가로 하나의 인스턴스를 생성하므로 Number of instances 에는 1 입니다.

 

 

 

 

Security Group 선택 시 기존에 생성하여 사용 중인 launch-wizard-1 Security Group 을 선택합니다.

 

 

기존에 생성하였던 Key 파일을 사용하기 위하여, Choose an existing key pair 를 선택하여 기존 key pair를 선택합니다. 그리고, 아래 체크박스에 체크를 합니다.

 

 

 

신규 생성된 인스턴스에 Putty로 접속을 합니다.

MySql을 설치 합니다. MySQL을 설치하는 방법도 많이 있습니다만, yum 명령어를 사용하여 아래의 방법으로 설치합니다.  4개의 패키지를 설치하고 설치 시 의존관계에 있는 연관된 패키지도 같이 설치됩니다.

$ sudo yum install mysql mysql-server mysql-connector-odbc mysql-devel

 

 

 

MySQL 데몬을 실행시킵니다.

 

$ sudo /etc/rc.d/init.d/mysqld start

 

 

MySQL의 root 계정의 암호를 만듭니다. Hive 연동을 위하여 Hive 만의 접속을 위한 별도의 사용자 계정을 만들어 설정할 수도 있으나 이번 설치 과정에서는 root 계정을 이용하겠습니다. 아래와 같이 root 사용자의 비밀번호를 부여합니다. 실행을 하면 그냥 프롬프트만 떨어집니다.
패스워드를 P@ssw0rd 로 설정하였습니다.

$ mysqladmin -u root -p P@ssw0rd

 

MySQL에 접속하여 root 사용자가 모든 권한을 가질 수 있도록 설정합니다. mysqladmin 명령어의 파라미터는 ‘mysqladmin -u사용자 -p패스워드 사용DB명’ 순 입니다.

$ mysqladmin -u root -p P@ssw0rd

변경된 패스워드로 MySQL에 접속합니다.

$ mysql -uroot -pP@ssw0rd mysql

 

mysql> grant all privileges on *.* to root@'%' identified by ‘P@ssw0rd’ with grant option;
mysql> grant all privileges on *.* to root@'localhost' identified by ‘P@ssw0rd’ with grant option;
mysql> flush privileges;

 


 

이제 Meta 정보를 저장할 테이블을 생성 합니다. Table을 생성하는 스크립트는 이미 Download 받은 hive 폴더 아래에 있습니다. 우리는 Hive은 SERVER1에 설치하였고, MySQL은 신규 인스턴스에 설치를 하였습니다. sFTP 프로그램을 통해 우선 PC Client 파일로 내려 받은 후 신규 인스턴스 업로드 하는 방식으로 해당 파일을 이용할 수 있도록 하겠습니다.
SERVER1에 접속하여 아래 경로로 이동 합니다. 이동 후 두개의 파일을 Client 로 다운 받습니다.

경로 : /home/ec2-user/apache-hive-2.3.0-bin/scripts/metastore/upgrade/mysql

아래 두개의 파일을 다운로드 받은 후 MySQL을 설치한 신규 인스턴스의 유저 홈 디렉토리에 업로드 합니다. 꼭 두개 파일이 있어야 합니다. hive-schema-2.3.0.mysql.sql 에서 hive-txn-schema-2.3.0.mysql.sql 파일을 호출하여 같이 실행됩니다.

먼저 SERVER1에 접속하여 다운로드 받습니다.

hive-schema-2.3.0.mysql.sql
hive-txn-schema-2.3.0.mysql.sql

 

Mysql 설치 인스턴스의 홈 디렉토리(/home/ec2-user/)에 업로드 합니다.

 

업로드한 sql 파일을 경로 없이 사용할 수 있도록 유저 홈디렉토리에서 MySQL을 실행시킵니다.

$ mysql -uroot -pP@ssw0rd mysql

 

metastore DB를 생성합니다.

 

mysql> create database metastore;

 

 

생성된metastore DB를 사용하도록 전환합니다.

 

mysql> use metastore;

 

 

홈디렉토리에 업로드한 script 파일을 실행하여 table을 생성합니다.
실행 후에는 스크립트 실행 시 오류가 없는 지 확인합니다.

 

mysql> source /home/ec2-user/hive-schema-2.3.0.mysql.sql;

 

 

이제 이미 설치된 Hive와 MySQL DB와 연결을 하도록 하겠습니다.

1) 연결을 위한 환경 구성

MySQL DB로의 연결을 하기 위해서는 connector 파일이 필요합니다. 아래 경로로 이동하여 Mysql connector 최신 버전을 다운로드 받습니다.
https://dev.mysql.com/downloads/connector/j/

아래쪽에 링크에서 편한 파일을 다운 받습니다. 저는 확장자가 *.tar.gz 인 파일을 다운 받았습니다.

 

No thanks, just start my download. 를 클릭하여 다운 받습니다.

다운로드 받은 후 압축을 풉니다. 우리가 필요한 파일은 mysql-connector-java-5.1.43-bin.jar 인 class 파일입니다.

해당 파일을 sFTP 프로그램을 사용하여 SERVER1의 아래 경로에 업로드 합니다.

/home/ec2-user/apache-hive-2.3.0-bin/lib

 

Hive 구동에 필요한 temp 디렉토리를 생성합니다. 해당 디렉토리는 hive-site.xml 파일 설정시 경로로 추가됩니다.

 

$ mkdir /tmp/hive

 

 

2) 환경 설정 파일 변경
아래 경로로 이동합니다. 그리고, 템플릿 파일을 복사하여 환경설정 파일을 생성합니다.

 

$ cd $HIVE_HOME/conf
$ cp hive-default.xml.template hive-site.xml

 

생성된 환경 설정 파일을 편집합니다.

$ vi hive-site.xml

 

수정이 필요한 부분을 표시 하였습니다. 그리고, 그림 캡쳐는 변경 전, 후 를 보여 주기 위함입니다.

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://13.124.164.5/metastore?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>

 

 

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>

 

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>

 

 

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>P@ssw0rd</value>
<description>password to use against metastore database</description>
</property>

 

<property>
<name>hive.querylog.location</name>
<value>/tmp/hive</value>
<description>Location of Hive run time structured log file</description>
</property>

 

 

<property>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive</value>
<description>Local scratch space for Hive jobs</description>
</property>


 


<property>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>

 

 

 

 

동일하게 hive-env.sh 파일 생성도 template 파일을 통해 생성 합니다.

 

$ cp hive-env.sh.template hive-env.sh

 

생성된 파일 편집합니다. 해당 파일에서 하둡 홈 경로만 변경합니다.

 

$ vi hive-env.sh

 

HADOOP_HOME =/home/ec2-user/Hadoop-2.8.0

설정이 되었으면 hive 디렉토리를 scp 명령어로 SERVER2로 복사합니다.

 

$ scp -r apache-hive-2.3.0-bin SERVER2:/home/ec2-user/

 

 

이제 설정이 완료되었습니다. hive를 실행하여 정상 실행 여부를 확인합니다. 실행시키기 전에 Hadoop 프로세스가 실행되고 있는지 확인합니다. 실행되고 있지 않으면 Hadoop을 먼저 실행 해 주세요.

 

$ jps

Hive 홈 디릭테리 내의 bin 디렉토리에 있는 hive를 실행합니다.

$ ./hive

hive> 프롬프트가 나타나면 정상적으로 설치된 것 입니다.

이상입니다.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.