🗂

WSL2+Apache BigtopでHive

2022/07/30に公開

https://zenn.dev/notrogue/articles/2c2c4f094ce401
の続き。

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の再起動に失敗することがありました(毎回起きるかは不明)。

https://stackoverflow.com/questions/22316187/datanode-not-starts-correctly

の対応で解決しました。

Discussion