Skip to content
Published on

Ubuntu Hive 2.3.9(non secure)インストール方法

Authors

インストール前の準備事項

サーバー構成

numberhostnamerole
1latte01master, namenode, resource-manager mysql
2latte03worker, datande, nodemanager
3latte03worker, datande, nodemanager

Hadoopのインストール

今回の記事では、Hiveのストレージとしてhdfsを使用し、実行エンジンとして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ユーザーでログインして実行しました。

バイナリのダウンロードと解凍

1番のmasterサーバーにHiveのバイナリをダウンロードし、解凍して適切な場所にコピーします。筆者は/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ドライバのインストール

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/

設定ファイルの修正

Hiveをインストールした/usr/local/hive/confフォルダを確認すると、設定ファイルが.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 接続ユーザー名</value>
    <description>Username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>MySQL 接続パスワード</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スキーマの初期化

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シェルが起動します。

/usr/local/hive/bin/hive

hive> show schemas;
OK
default
Time taken: 0.461 seconds, Fetched: 1 row(s)

デーモンとして実行するには以下のようにします。

nohup hiveserver2 > hive.log &

Hue開発バージョンのインストール

Hiveシェルを使ってクエリを実行し結果を確認する方法も可能ですが、シェルという性質上、ユーザーフレンドリーなインタラクションには限界があります。Hueというツールを使えば、ウェブブラウザから簡単に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

Python 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ユーザーの作成

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

開発サーバーの起動

./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