- Published on
ubuntu Hive 2.3.9 (non secure)설치 방법
- Authors
- Name
- Youngju Kim
- @fjvbn20031
설치 전 준비 사항
Servers
number | hostname | role |
---|---|---|
1 | latte01 | master, namenode, resource-manager mysql |
2 | latte03 | worker, datande, nodemanager |
3 | latte03 | worker, datande, nodemanager |
Hadoop 설치
이번 포스팅에서는 Hive의 저장소로 HDFS를 사용하고, 실행 engine으로는 mapreduce를 하는 세팅을 알아보겠습니다. Hadoop은 미리 설치되어있어야 합니다.
설치 방법은 hadoop nonsecure 설치방법을 참고하여 설치하는데, 이번 포스팅에서는 가이드에 나와있는 3.3.4 버젼이 아닌 2.10.2 버젼을 사용할 것이므로 참고 바랍니다.
MySQL 설치
Hive는 metastore로 RDBMS를 필요로 합니다. 저희는 MySQL을 metastore의 저장소로 사용할 것이 때문에 MySQL SQL 기초 포스팅의 MySQL 설치방법을 참조하여 MySQL을 설치해줍니다. 저는 latte01 서버에 mysql을 설치하였습니다. mysql 설치가 완료 되었다면, 아래 명령어를 통해 MySQL이 정상적으로 실행중인지 확인합니다.
sudo service mysql status
Hive 설치
아래 설치과정은 root user로 로그인하여 진행하였습니다.
binary 다운로드 및 압축 해제
1번 master 서버에 hive binary를 다운로드 받고, 압축을 해제하여 적절한 위치에 복사합니다. 저는 /usr/local/hadoop
에 hive 관련 파일을 복사하였습니다.
wget https://dlcdn.apache.org/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz
tar -zxvf apache-hive-2.3.9-bin.tar.gz
cp -r apache-hive-2.3.9-bin/ /usr/local/hive
jdbc driver 설치
wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar
cp mysql-connector-j-8.0.33.jar /usr/local/hive/lib/
configuration 수정
우리가 hive를 설치한 /usr/local/hive/conf
폴더를 확인해 보면, config들이 .template
형태로 저장되어 있는 것을 확인할 수 있다.
root@latte01:/usr/local/hive/conf# ls
beeline-log4j2.properties.template hive-env.sh.template hive-log4j2.properties.template llap-cli-log4j2.properties.template parquet-logging.properties
hive-default.xml.template hive-exec-log4j2.properties.template ivysettings.xml llap-daemon-log4j2.properties.template
hive-site.xml 수정
초기 설치시에는 hive-site.xml 파일이 존재하지 않으므로 hive-default.xml.template 파일을 복사해서 hive-site.xml을 생성한다.
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
아래 내용을 수정한다.
<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.ConnectionURL</name>
<value>jdbc:mysql://latte01:3306/hive?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.ConnectionUserName</name>
<value>MySQL 접속 user name</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>MySQL 접속 password</value>
<description>password to use against metastore database</description>
</property>
hive-site.xml 하단에 아래 내용을 추가한다.
아래 내용을 추가하지 않으면 Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
와 같은 애러가 발생한다.
<property>
<name>system:java.io.tmpdir</name>
<value>/tmp/hive/java</value>
</property>
<property>
<name>system:user.name</name>
<value>${user.name}</value>
</property>
HIVE_HOME 등록
HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$SPARK_HOME/bin
export PATH
Metastore schema 초기화
schematool -initSchema -dbType mysql -verbose
root@latte01:/usr/local/hive/conf# schematool -initSchema -dbType mysql -verbose
Initialization script hive-schema-2.3.0.mysql.sql
Connecting to jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
Connected to: MySQL (version 8.0.34-0ubuntu0.22.04.1)
Driver: MySQL Connector/J (version mysql-connector-j-8.0.33 (Revision: 7d6b0800528b6b25c68b52dc10d6c1c8429c100c))
Transaction isolation: TRANSACTION_READ_COMMITTED
0: jdbc:mysql://localhost:3306/hive> !autocommit on
Autocommit status: true
0: jdbc:mysql://localhost:3306/hive> /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */
No rows affected (0.007 seconds)
0: jdbc:mysql://localhost:3306/hive> /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */
No rows affected (0.001 seconds)
0: jdbc:mysql://localhost:3306/hive> /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */
...
0: jdbc:mysql://localhost:3306/hive> !closeall
Closing: 0: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
beeline>
beeline> Initialization script completed
schemaTool completed
Hive 실행
아래 명령어를 실행하면 hive shell 이 실행된다.
/usr/local/hive/bin/hive
hive> show schemas;
OK
default
Time taken: 0.461 seconds, Fetched: 1 row(s)
데몬으로 실행하려면 아래와 같이 하면 된다.
nohup hiveserver2 > hive.log &
Hue development 버젼 설치
Hive shell을 사용해서 query를 실행하고, 결과를 확인하는 방법도 가능은 하지만, shell이라는 태생적인 제한 때문에 user friendly 한 interaction은 불가능 하다. Hue 라는 tool을 사용하면 웹브라우져에서 쉽게 Hive 쿼리를 날리고, 결과를 확인할 수 있다.
OS 종속 패키지 설치
sudo apt-get install git ant gcc g++ libffi-dev libkrb5-dev libmysqlclient-dev libsasl2-dev libsasl2-modules-gssapi-mit libsqlite3-dev libssl-dev libxml2-dev libxslt-dev make maven libldap2-dev python3-dev python-setuptools libgmp3-dev libbz2-dev
sudo apt-get install python3.8-dev python3-distutils
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt-get install -y nodejs
파이썬 3.8.18 설치
wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz
tar -zxvf Python-3.8.18.tgz
cd Python-3.8.18/
sudo ./configure --enable-optimizations
sudo make altinstall
cd /root/work
git clone https://github.com/cloudera/hue.git
cd hue
export PYTHON_VER=python3.8
export ROOT=/usr/local/hue
make apps
MySQL hue user 생성
mysql -u root -p
set global validate_password_policy=LOW;
set global validate_password_length=6;
create user 'hue'@'%' identified by 'xxxxxxxx';
grant all privileges on *.* to hue@'%';
hue ini 파일 수정
[[database]]
host=localhost
port=3306
engine=mysql
user=hue
password=xxxxxxxx
name=hue
[beeswax]
hive_server_host=localhost
# Port where HiveServer2 Thrift server runs on.
hive_server_port=10000
dev 서버 시작
./build/env/bin/hue migrate
./build/env/bin/hue runserver 0:8000
Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate admin
위와 같은 애러가 발생할 경우 core-site.xml에 아래와 같은 정보 추가 후 hadoop 재시작.
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
http://latte01:8000/
에 접속
Reference
- hue devlopment version 설치 문서: https://docs.gethue.com/developer/development/