接上一篇《在Windows11上使用WSL安装Hadoop伪分布式》本篇记录下安装Hive的过程。

环境

  • Hadoop服务
  • JDK1.8
  • Hive3.1.2
  • MySQL8.0

下载Hive

1
wget https://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

部署Hive

解压

创建一个hive的文件夹

1
2
3
mkdir ~/hive

tar -xvzf apache-hive-3.1.2-bin.tar.gz -C ~/hive

配置环境变量

1
vim ~/.zshrc

修改为如下内容:

1
2
3
4
export HADOOP_HOME=~/hadoop/hadoop-3.3.2
export HIVE_HOME=/home/charles/hive/apache-hive-3.1.2-bin
export PATH=$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

使环境变量生效

1
source ~/.zshrc

在HDFS中创建文件夹

1
2
3
4
hdfs dfs -mkdir /tmp 
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod g+w /tmp
hdfs dfs -chmod g+w /user/hive/warehouse

或者,直接运行以下命令:

1
$HIVE_HOME/bin/init-hive-dfs.sh

在mysql中创建数据库

1
create database hive

然后下载mysql驱动到hive的lib目录

1
2
cd $HIVE_HOME/lib
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22.jar

配置Hive

拷贝一份模板文件,改名为hive-site.xml

1
cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml

修改如下几个属性信息:

1
2
3
4
5
6
7
javax.jdo.option.ConnectionDriverName: com.mysql.jdbc.Driver 或 com.mysql.cj.jdbc.Driver 取决于 MySQL JDBC 驱动程序的版本。
javax.jdo.option.ConnectionURL: jdbc:mysql://localhost:3306/hive
javax.jdo.option.ConnectionUserName: root
javax.jdo.option.ConnectionPassword: 123456
hive.metastore.uris: thrift://127.0.0.1:9083
Hive.metastore.db.type: mysql
hive.metastore.event.db.notification.api.auth: false

新增一个属性

1
2
3
4
<property>
    <name>system:java.io.tmpdir</name>
    <value>/usr/local/hive/tmp</value>
</property>

创建该目录

1
2
3
4
sudo mkdir -p /usr/local/hive/tmp

# charles 是我自己的用户名和组,这里改成你自己的
sudo chown charles:charles -R /usr/local/hive

不配置这个可能会出现如下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at org.apache.hadoop.fs.Path.initialize(Path.java:263)
at org.apache.hadoop.fs.Path.<init>(Path.java:221)
at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:710)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:627)
at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:591)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:747)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Caused by: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
at java.net.URI.checkPath(URI.java:1823)
at java.net.URI.<init>(URI.java:745)
at org.apache.hadoop.fs.Path.initialize(Path.java:260)
... 12 more

其余的配置项可以删除,也可以保留,无所谓。

初始化Hive的元数据结构

1
$HIVE_HOME/bin/schematool -dbType mysql -initSchema

配置身份认证

修改hadoop的core-site.xml文件,新增如下内容

1
2
3
4
5
6
7
8
<property>
<name>hadoop.proxyuser.charles.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.charles.groups</name>
<value>*</value>
</property>

注意:hadoop.proxyuser.用户名。

启动hive服务

如果只是使用终端,只需要启动metastore服务即可

1
$HIVE_HOME/bin/hive --service metastore &

如果需要外部程序通过JDBC访问,还需要启动hiveserver2

1
$HIVE_HOME/bin/hive --service metastore &

启动完成后,可以通过jps查看,有两个runjar,过一会儿打开页面也可以看到

http://localhost:10002/