🗂
WSL2+Apache BigtopでHive
の続き。
WSL2と書きましたがWSL2というよりLinuxの話かもしれません…
試した環境
- Windows10
- WSL2
- Ubuntu 20.0.4
- Apache Bigtop 3.1.0
インストール
(HDFS関係はインストール済みの前提です。)
パッケージをインストールします。
sudo apt install hive openjdk-8-jdk
メタデータデータベースを初期化します。デフォルトではDerbyを使う設定されています。
/usr/lib/hive/bin/schematool -dbType derby -initSchema
ちなみに、デフォルトではメタデータデータベースはここにあります。
ls /var/lib/hive/metastore/metastore_db
README_DO_NOT_TOUCH_FILES.txt db.lck dbex.lck log seg0 service.properties tmp
設定
(自分の環境では)impersonateの設定を行わないとエラーになったので、設定しておきます。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
<!-- 追加部分 -->
<property>
<name>hadoop.proxyuser.hdfs.hosts</name>
<value>127.0.0.1</value>
</property>
<property>
<name>hadoop.proxyuser.hdfs.users</name>
<value>*</value>
</property>
</configuration>
NameNodeとDataNodeを再起動します。
sudo service hadoop-hdfs-namenode restart
sudo service hadoop-hdfs-datanode restart
横着して一番強いユーザhdfsを使うようにします。
export HADOOP_USER_NAME=hdfs
試す
hiveコマンドでテーブル作ってみます。
hive
hive> show databases;
OK
default
Time taken: 0.301 seconds, Fetched: 1 row(s)
hive> use default;
OK
Time taken: 0.019 seconds
hive> show tables;
OK
Time taken: 0.018 seconds
hive> CREATE TABLE tbl_a (col_a string);
OK
Time taken: 0.297 seconds
hive> show tables;
OK
tbl_a
テーブル作成は出来ていそうです。beelineでもクエリ実行できるか試してみます。
beeline -u jdbc:hive2://
0: jdbc:hive2://> INSERT INTO tbl_a VALUES ("hoge");
22/07/30 14:38:23 [a886ba13-6382-4d76-893c-f9fbfe48d1b8 main]: WARN metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored
22/07/30 14:38:24 [HiveServer2-Background-Pool: Thread-65]: WARN ql.Driver: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Query ID = notrogue_20220730143823_d6c84749-8801-423e-8f14-804b3c421ff6
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
22/07/30 14:38:24 [HiveServer2-Background-Pool: Thread-65]: WARN impl.MetricsSystemImpl: JobTracker metrics system already initialized!
22/07/30 14:38:24 [HiveServer2-Background-Pool: Thread-65]: WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
Job running in-process (local Hadoop)
22/07/30 14:38:25 [LocalJobRunner Map Task Executor #0]: WARN objectinspector.StandardStructObjectInspector: Trying to access 6 fields inside a list of 7 elements: [String, 4, 4, 1, 0, 48 4c 4c a0 01 01 c4 86 a3 f9 06, null]
22/07/30 14:38:25 [LocalJobRunner Map Task Executor #0]: WARN objectinspector.StandardStructObjectInspector: ignoring similar errors.
22/07/30 14:38:25 [pool-17-thread-1]: WARN impl.MetricsSystemImpl: JobTracker metrics system already initialized!
WARN : Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
2022-07-30 14:38:25,818 Stage-1 map = 100%, reduce = 100%
Ended Job = job_local622841557_0001
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to directory hdfs://127.0.0.1:9000/user/hive/warehouse/tbl_a/.hive-staging_hive_2022-07-30_14-38-23_292_1672468863429623896-1/-ext-10000
Loading data to table default.tbl_a
22/07/30 14:38:25 [HiveServer2-Background-Pool: Thread-65]: WARN metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored
22/07/30 14:38:25 [HiveServer2-Background-Pool: Thread-65]: WARN metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 0 HDFS Write: 148 SUCCESS
Total MapReduce CPU Time Spent: 0 msec
OK
No rows affected (2.72 seconds)
挿入できているか見てみます。
0: jdbc:hive2://> SELECT * FROM tbl_a;
22/07/30 14:38:32 [a886ba13-6382-4d76-893c-f9fbfe48d1b8 main]: WARN metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored
OK
+--------------+
| tbl_a.col_a |
+--------------+
| hoge |
+--------------+
1 row selected (0.112 seconds)
上ではhiverserver2とクライアントを一緒に起動していますが別々にしたい場合
# サーバー
hiveserver2
# クライアント
beeline -n hdfs -u jdbc:hive2://127.0.0.1:10000
詰まった点
JDKのバージョン
当初OpenJDK11しかインストールしていなかったのですが、以下のエラーがbeeline起動時に発生していました(hiveコマンドでも同様)。
$ beeline -u jdbc:hive2://
Error applying authorization policy on hive configuration: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')
DataNode/NameNodeの再起動
impersonateに関係してDataNode/NameNodeを再起動した際、DataNodeの再起動に失敗することがありました(毎回起きるかは不明)。
の対応で解決しました。
Discussion