0%

Hue 설치 in Docker

하둡 에코시스템 중 하나인 Hue 설치 방법을 정리합니다.

Hue

휴(Hue)는 보통 하둡 기반의 플랫폼에서 많이 사용하는 사용자 인터페이스이다. 오픈소스로 코드가 공개되어 있으며, 필요한 사람은 누구나 사용할 수 있다. 휴는 하이브나 임팔라, 스파크, 트리노 등 빅데이터 SQL 엔진과의 연동을 지원하며 그 외에 일반적인 RDB와도 연동할 수 있다. 그래서 사용자에게 다양한 SQL 환경을 제공하기에 적합한 플랫폼이라고 생각한다. 또 쿼리 뿐만 아니라 테이블 스키마나 작업(Job) 현황 확인도 가능하다. 자세한 내용은 공식 홈페이지에서 확인할 수 있다.

설치 가이드

이번 설치 가이드에서는 휴를 도커 컨테이너에 올리는 과정을 정리하고자 한다. 따라서 아래의 사전 조건이 준비되어야 한다.

  • OS 종류: Linux 기반
  • Docker 설치 완료
  • Git 설치 완료 (선택)

소스코드 가져오기

설치를 하기 위해서 먼저 휴 깃허브 레파지토리에서 소스코드를 클론해오자.

1
git clone https://github.com/cloudera/hue.git

만약 Git 사용이 아예 불가능할 경우에는 깃허브 페이지에서 zip으로 다운로드 받을 수 있다.

그다음 아래의 경로로 이동한다.

1
cd hue/tools/docker/hue

그러면 아래와 같은 파일들이 보인다.

1
2
3
4
5
6
7
8
9
10
drwxrwxr-x 2 ec2-user ec2-user   64 Jun 23 11:04 conf
drwxrwxr-x 2 ec2-user ec2-user 49 Jun 23 09:39 conf3
-rw-rw-r-- 1 ec2-user ec2-user 720 Jun 23 10:54 docker-compose.yml
-rw-rw-r-- 1 ec2-user ec2-user 2445 Jun 23 05:41 Dockerfile
-rw-rw-r-- 1 ec2-user ec2-user 1777 Jun 23 05:41 Dockerfile.py2
-rw-rw-r-- 1 ec2-user ec2-user 91 Jun 23 05:41 Dockerfile.py2.dockerignore
drwxr-xr-x 2 root root 6 Jun 23 10:08 hue.ini
-rw-rw-r-- 1 ec2-user ec2-user 109 Jun 23 09:21 init.sql
-rw-rw-r-- 1 ec2-user ec2-user 5909 Jun 23 05:41 README.md
-rwxrwxr-x 1 ec2-user ec2-user 66 Jun 23 05:41 startup.sh

휴는 메타데이터를 저장하고 관리하는 RDB가 필요하다. 그래서 도커 환경에서는 docker-compose를 통해 휴가 사용할 RDB와 웹 서버 2개의 컨테이너를 생성한다. RDB의 경우 sqlite3, mysql, postgesql 이렇게 3가지가 가능한데 개인적으로는 mysql을 추천한다. 왜냐하면 이미 누군가 mysql을 같이 설치하는 파일을 개발해두었기 때문이다. (변경도 어렵지는 않다. 그냥 docker-compose.yml 파일을 수정해주면 된다.)

소스코드 수정하기

이 글에서도 mysql을 그대로 사용할 예정이다. 현재 오픈소스에 올라가 있는 mysql 셋업 환경을 확인해보자. 그리고 컨테이너를 올리기 전에 조금 수정해야 할 사항들이 있다. 먼저 docker-compose.yml 파일에 mysql 계정 비밀번호를 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
version: '3'

services:
cloudera:
image: gethue/hue:latest
hostname: hue
container_name: hue
dns: 8.8.8.8
ports:
- "8888:8888"
volumes:
- ./hue.ini:/usr/share/hue/desktop/conf/z-hue.ini
depends_on:
- "database"
database:
image: mysql:5.7
ports:
- "33061:3306"
command: --init-file /data/application/init.sql
volumes:
- data:/var/lib/mysql
- ./init.sql:/data/application/init.sql
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: <사용할 비밀번호>
MYSQL_DATABASE: hue
MYSQL_USER: hue
MYSQL_PASSWORD: <사용할 비밀번호>
volumes:
data:

다음으로 init.sql 파일을 열어서 아래의 내용을 추가하자.

1
2
3
CREATE DATABASE IF NOT EXISTS hue;
-- 아래의 코드를 추가
grant all on hue.* to 'hue'@'localhost' identified by '사용할 비밀번호';

추가하는 부분은 휴와 RDB를 연동할 때 사용할 유저에게 권한을 주는 코드이다. 여기까지 추가해준 뒤 본격적으로 컨테이너를 올려보자.

컨테이너 생성하기

아래의 명령어를 입력하여 컨테이너를 생성한다.

1
docker-compose up -d

그러면 사용할 도커 이미지들을 다운로드 받고 컨테이너가 올라간다. 아래의 명령어로 컨테이너가 올라왔는지 확인할 수 있다.

1
2
3
4
5
❯ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
hue ./startup.sh Up 0.0.0.0:8888->8888/tcp,:::8888->8888/tcp
hue_database_1 docker-entrypoint.sh --ini ... Up 0.0.0.0:33061->3306/tcp,:::33061->3306/tcp, 33060/tcp

정상적으로 컨테이너들이 올라왔다.

메타데이터 마이그레이션하기

휴는 기본적으로 sqlite3를 RDB로 사용하도록 설정되어 있다. 따라서 컨테이너 내부에 접속해서 같이 올려둔 mysql로 메타데이터 마이그레이션을 진행한다.
휴 컨테이너에 접속한다.

1
docker exec -itu 0 <container ID> /bin/bash

그다음 conf 파일을 수정하기 위해서 vim을 설치해준다.

1
2
apt-get update
apt-get install vim -y

설치가 완료되면 desktop/conf/hue.ini 파일에서 아래의 내용을 수정해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[[database]]
# Database engine is typically one of:
# postgresql_psycopg2, mysql, sqlite3 or oracle.
#
# Note that for sqlite3, 'name', below is a path to the filename. For other backends, it is the database name
# Note for Oracle, options={"threaded":true} must be set in order to avoid crashes.
# Note for Oracle, you can use the Oracle Service Name by setting "host=" and "port=" and then "name=<host>:<port>/<service_name>".
# Note for MariaDB use the 'mysql' engine.
# 주석을 풀고 아래의 내용을 수정한다.
engine=mysql
host=database # docker-compose.yml에 database로 설정되어 있기 때문에 그대로 사용한다.
port=3306
user=hue
name=hue
password=<사용한 패스워드>
# conn_max_age option to make database connection persistent value in seconds
# https://docs.djangoproject.com/en/1.11/ref/databases/#persistent-connections
## conn_max_age=0
# Execute this script to produce the database password. This will be used when 'password' is not set.
## password_script=/path/script
## name=desktop/desktop.db
## options={}
# Database schema, to be used only when public schema is revoked in postgres
## schema=public

# Configuration options for specifying the Desktop session.
# For more info, see https://docs.djangoproject.com/en/1.4/topics/http/sessions/
# ------------------------------------------------------------------------

수정이 완료되었다면 아래의 명령어를 사용하여 마이그레이션을 진행한다.

1
2
./build/env/bin/pip install mysqlclient
./build/env/bin/hue migrate

마이그레이션이 완료되었다면 확인을 위해 휴 서버에서 나온 뒤 mysql 컨테이너에 접속한다.

1
2
3
4
# 컨테이너 접속
docker exec -it <container ID> /bin/bash
# mysql 접속
mysql -u hue -p<사용한 패스워드>

그다음 휴 서버에서 사용할 테이블을 정상적으로 이관했는지 확인해보자.

1
2
mysql> use hue
mysql> show tables;

정상적으로 테이블 리스트가 나오는 걸 확인할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+--------------------------------+
| Tables_in_hue |
+--------------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
.
.
.
| pig_pigscript |
| useradmin_grouppermission |
| useradmin_huepermission |
| useradmin_ldapgroup |
| useradmin_userprofile |
+--------------------------------+

마지막으로 휴에 접속해보자.

hue

위 사진과 같은 페이지가 보인다면 성공적으로 설치된 것이다.