- Authors

- Name
- Youngju Kim
- @fjvbn20031
インストール前の準備事項
サーバー構成
| number | hostname | role |
|---|---|---|
| 1 | latte01 | master, namenode, resource-manager mysql |
| 2 | latte03 | worker, datande, nodemanager |
| 3 | latte03 | worker, 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
以下の内容を修正します。
<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のようなエラーが発生します。
<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スキーマの初期化
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ファイルの修正
[[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を再起動します。
<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開発バージョンインストールドキュメント: https://docs.gethue.com/developer/development/