Published on

ubuntu Hive 2.3.9 (non secure)설치 방법

Authors

설치 전 준비 사항

Servers

numberhostnamerole
1latte01master, namenode, resource-manager mysql
2latte03worker, datande, nodemanager
3latte03worker, 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

아래 내용을 수정한다.

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 와 같은 애러가 발생한다.

hive-site.xml
  <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 등록

hive-env.sh
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 파일 수정

hue/desktop/conf/pseudo-distributed.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 재시작.

core-site.xml
    <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