Hue 설치
Hue(Hadoop User Experience)를 이용하면 다양한 Apache Hadoop 에코시스템을 Web Interface로 접근할 수 있다.
의존성
패키지
yum -y install python2-devel sqlite-devel libxml2-devel libxslt-devel libffi-devel openssl-devel openldap-devel gmp-devel execvp-devel gcc gcc-c++
MySQL
django의 Repository DB로 mysql을 사용한다. hue를 컴파일할 때 mysqld_config 명령도 필요하므로 먼저 설치해놔야 한다.
참고 : mysql 설치
미리 설치된 mysql 데이터베이스에 아래와 같은 데이터베이스와 사용자를 생성해서 이용한다.
create database hue;
create user hue@localhost identified by 'hue'
grant all privileges on hue.* to hue@localhost;
Hadoop
Hue 가 접속하는 Hadoop에 다음과 같이 설정하고 재기동한다.
vi core-site.xml
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
vi hdfs-site.xml
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
Hue 설치
hue 시스템 유저 profile
# Hue
export LD_LIBRARY_PATH=/app/mysql/lib:$LD_LIBRARY_PATH
export PATH=/app/mysql/bin:/app/hue/build/env/bin:$PATH
바이너리 다운로드 및 설치
바이너리 다운로드
http://gethue.com/hue-4-2-and-its-self-service-bi-improvements-are-out/ URL에서 다운로드하여 설치 대상 서버에 업로드
압축해제 및 컴파일
tar -xvzf hue-4.2.0.tgz
cd hue-4.2.0
export PREFIX=/app
make
make install
Hue 설정 파일 수정
vi /app/hue/desktop/conf/hue.ini
[beeswax]
hive_server_host=node4.dat
hive_server_port=10000
hive_conf_dir=/app/hive/conf
max_number_of_sessions=10
기동 및 종료 스크립트 작성
cd /app/hue/build/env/bin
실행 스크립트
vi start-hue.sh
/app/hue/build/env/bin/supervisor --daemon --pid-file=/app/hue/build/env/bin/hue_pid
종료 스크립트
vi stop-hue.sh
HUE_PID=cat /app/hue/build/env/bin/hue_pid
kill $HUE_PID
chmod +x start-hue.sh stop-hue.sh
Start
start-hue.sh
Stop
stop-hue.sh
Connect Hue to MySQL
hue 가 실행된 상태에서 기존에 sqlite에 저장된 메타데이터를 백업받는다.
hue dumpdata > hue_init_schema.json
dump 파일에서 다음 부분(useradmin.userprofile이 포함된 필드)을 제거한다.
vi hue_init_schema.json
...,
{"pk": 1, "model": "useradmin.userprofile", "fields": {"last_activity": "2019-02-10T16:30:34.059", "creation_method": "HUE", "first_login": false, "user": 1, "home_directory": "/user/admin"}},
..
hue.ini
의 다음 부분을 수정하고 재기동
AS-IS
[[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=sqlite3
## host=
## port=
## user=
## password=
# conn_max_age option to make database connection persistent value in seconds
# https://docs.djangoproject.com/en/1.9/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
TO-BE
[[database]]
engine=mysql
host=127.0.0.1
port=3306
user=hue
password=hue
name=hue
아래 명령으로 hue를 재실행한다.
stop-hue.sh; start-hue.sh
이어서 mysql 데이터베이스 sync 작업
hue syncdb --noinput
hue migrate
mysql -u hue -D hue -p
아래 쿼리를 수행한 뒤 나오는 DDL에서 Foreign key의 이름을 찾아내고 해당 키를 제거한다.
mysql> SHOW CREATE TABLE auth_permission;
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| auth_permission | CREATE TABLE auth_permission
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(50) NOT NULL,
content_type_id
int(11) NOT NULL,
codename
varchar(100) NOT NULL,
PRIMARY KEY (id
),
UNIQUE KEY content_type_id
(content_type_id
,codename
),
KEY auth_permission_37ef4eb4
(content_type_id
),
CONSTRAINT content_type_id_refs_id_d043b34a
FOREIGN KEY (content_type_id
) REFERENCES django_content_type
(id
)
) ENGINE=InnoDB AUTO_INCREMENT=229 DEFAULT CHARSET=latin1 |
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
찾아낸 foreign key를 제거하고 django_content_type 테이블의 데이터도 제거한다.
ALTER TABLE auth_permission DROP FOREIGN KEY content_type_id_refs_id_d043b34a;
DELETE FROM hue.django_content_type;
백업받아두었던 데이터를 로드한다.
hue loaddata hue_init_schema.json
foreign key 다시 생성하면 끝.
ALTER TABLE auth_permission ADD FOREIGN KEY (content_type_id
) REFERENCES django_content_type
(id
);