接上一篇《在Windows11上使用WSL安装Hadoop伪分布式》本篇记录下安装Hive的过程。
一、环境
- Hadoop服务
- JDK1.8
- Hive3.1.2
- MySQL8.0
二、 下载Hive
wget https://dlcdn.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
三、部署Hive
1. 解压
创建一个hive的文件夹
mkdir ~/hive
tar -xvzf apache-hive-3.1.2-bin.tar.gz -C ~/hive
2. 配置环境变量
vim ~/.zshrc
修改为如下内容:
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
使环境变量生效
source ~/.zshrc
3. 在HDFS中创建文件夹
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
或者,直接运行以下命令:
$HIVE_HOME/bin/init-hive-dfs.sh
4. 在mysql中创建数据库
create database hive
然后下载mysql驱动到hive的lib目录
cd $HIVE_HOME/lib
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22.jar
5. 配置Hive
拷贝一份模板文件,改名为hive-site.xml
cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
修改如下几个属性信息:
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
新增一个属性
<property>
<name>system:java.io.tmpdir</name>
<value>/usr/local/hive/tmp</value>
</property>
创建该目录
sudo mkdir -p /usr/local/hive/tmp
# charles 是我自己的用户名和组,这里改成你自己的
sudo chown charles:charles -R /usr/local/hive
不配置这个可能会出现如下错误:
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
其余的配置项可以删除,也可以保留,无所谓。
6. 初始化Hive的元数据结构
$HIVE_HOME/bin/schematool -dbType mysql -initSchema
7. 配置身份认证
修改hadoop的core-site.xml文件,新增如下内容
<property>
<name>hadoop.proxyuser.charles.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.charles.groups</name>
<value>*</value>
</property>
注意:hadoop.proxyuser.用户名。
7. 启动hive服务
如果只是使用终端,只需要启动metastore服务即可
$HIVE_HOME/bin/hive --service metastore &
如果需要外部程序通过JDBC访问,还需要启动hiveserver2
$HIVE_HOME/bin/hive --service metastore &
启动完成后,可以通过jps查看,有两个runjar,过一会儿打开页面也可以看到