휴(Hue)는 보통 하둡 기반의 플랫폼에서 많이 사용하는 사용자 인터페이스이다. 오픈소스로 코드가 공개되어 있으며, 필요한 사람은 누구나 사용할 수 있다. 휴는 하이브나 임팔라, 스파크, 트리노 등 빅데이터 SQL 엔진과의 연동을 지원하며 그 외에 일반적인 RDB와도 연동할 수 있다. 그래서 사용자에게 다양한 SQL 환경을 제공하기에 적합한 플랫폼이라고 생각한다. 또 쿼리 뿐만 아니라 테이블 스키마나 작업(Job) 현황 확인도 가능하다. 자세한 내용은 공식 홈페이지에서 확인할 수 있다.
설치 가이드
이번 설치 가이드에서는 휴를 도커 컨테이너에 올리는 과정을 정리하고자 한다. 따라서 아래의 사전 조건이 준비되어야 한다.
만약 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 계정 비밀번호를 수정한다.
CREATE DATABASE IF NOTEXISTS hue; -- 아래의 코드를 추가 grantallon 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로 메타데이터 마이그레이션을 진행한다. 휴 컨테이너에 접속한다.
[[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/ # ------------------------------------------------------------------------