Hive 安装 以及使用 DataGrip 连接 Hive
Hive 安装说明
① 环境说明
Hadoop 环境已通过腾讯云服务器完成搭建,我是将 hive 安装到 该 hadoop 集群的某个节点了
Mysql 中间件使用的是阿里云的产品
② 版本说明
Hadoop 2.7.5 +Hive 2.1.1 + Mysql 8.0.18 + Centos 7 + DataGrip 2021
Hive 安装前的准备
① 搭建 Hadoop 环境
Hadoop 介绍及集群搭建_半吊子Kyle的博客-CSDN博客
② 安装 Mysql
我使用的是 阿里云的 Mysql
,如果你需要自己搭建请参考以下文章:
Linux 安装 Mysql_半吊子Kyle的博客-CSDN博客
③ Hive 安装包下载,软件包为 apache-hive-2.1.0-bin.tar.gz
# 也可以通过该命令,直接下载到服务器,前提是你的服务器可以连接外网
wget http://archive.apache.org/dist/hive/hive-2.1.1/apache-hive-2.1.0-bin.tar.gz
④ 准备 mysql 驱动包
Maven Repository: mysql » mysql-connector-java » 8.0.18 (mvnrepository.com)
⑤ 此时假设你已经安装好了 DataGrip ,安装请参考该文章:
Macbook m1环境配置终极版_半吊子Kyle的博客-CSDN博客
Hive 安装
注意:我们当前已经有了一个 hadoop 集群,集群中有 3 个节点,我们只需要在其中的某个节点安装 Hive 即可
① 解压 Hive 安装包并重命名
# 进入自定义的安装目录,上传安装包
cd /opt/software
# 解压安装包
tar -zxvf apache-hive-2.1.0-bin.tar.gz
# 重命名安装目录
mv apache-hive-2.1.0-bin hive-2.1.0
② 修改 hive-env.sh
# 进入配置文件目录
cd /opt/server/hive-2.1.0/conf
# 修改 hive 的配置文件 : hive-env.sh
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
# 增加修改内容:指定 hadoop 安装目录 和 hive 的配置文件目录
HADOOP_HOME=/opt/software/hadoop-2.7.5
export HIVE_CONF_DIR=/opt/software/hive-2.1.0/conf
③ 修改 hive-site.xml
# 进入配置文件目录
cd /opt/software/hive-2.1.0/conf
# 编辑 hive-site.xml
vim hive-site.xml
# 增加以下内容,并修改
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 将此处的用户名修改为你自定义的 mysql 用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>用户名</value>
</property>
<!-- 将此处的密码修改为你自定义的 mysql 密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>密码</value>
</property>
<!-- 将此处的 mysql 修改为你自定义的 mysql 地址,我使用的是阿里云的 mysql -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://xxxx:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node3</value>
</property>
</configuration>
④ 上传 mysql
的驱动包到 hive 的 lib
目录下
# 就是这个目录
/opt/software/hive-2.1.0/lib
⑤ 将 hive-2.1.0/jdbc/
目录下的 hive-jdbc-2.1.0-standalone.jar
拷贝到 hive-2.1.0/lib/
目录
cp /opt/software/hive-2.1.0/jdbc/hive-jdbc-2.1.0-standalone.jar /opt/software/hive-2.1.0/lib/
⑥ 在当前节点上配置 hive 的环境变量
# 修改环境配置文件
vim /etc/profile
# 添加以下内容
export HIVE_HOME=/opt/software/hive-2.1.0
export PATH=:$HIVE_HOME/bin:$PATH
Hive 启动
① 启动服务
# 启动 metastore 服务
nohup /opt/software/hive-2.1.0/bin/hive --service metastore &
# 启动验证:如果出现 RunJar 的进程,则启动成功
jps
② 使用 BeenClient 验证
# 启动 hiveserver2 , beeline 客户端需要使用 hiveserver2
nohup /opt/software/hive-2.1.0/bin/hive --service hiveserver2 &
# 启动 beeline
/opt/software/hive-2.1.0/bin/beeline
# 在命令行连接
!connect jdbc:hive2://node3:10000
Hive 安装常见的问题
建议启动的时候,先不要通过后台启动的方式,第一次启动难免会遇到问题,这样可以方便排查
# 启动 metastore 服务
/opt/software/hive-2.1.0/bin/hive --service metastore
# 启动如果没问题,则启动 serveice2 服务
/opt/software/hive-2.1.0/bin/hive --service hiveserver2
# 如果没问题
① 第一个问题:datanucleus.schema.autoCreateTables
未启用
javax.jdo.JDODataStoreException: Required table missing : “VERSION” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable “datanucleus.schema.autoCreateTables”
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:553)
问题修复:
# 修改 hive-site.xml
cd /opt/software/hive-2.1.0/conf/
vim hive-site.xml
# 增加以下内容
<property>
<name>datanucleus.readOnlyDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.schema.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.schema.autoCreateColumns</name>
<value>true</value>
</property>
② 问题2:连接拒绝
Could not open client transport with JDBC Uri: jdbc:hive2://node3:10000: java.net.ConnectException: Connection refused (Connection refused) (state=08S01,code=0)
问题修复:
# 你在 hive-site.xml 中配置的用户名和密码没有在 mysql 中赋权
# 注意如果 mysql 中没有这个用户就创建这个用户
# 如果是 mysql 5.0 + 的版本,在 mysql 中执行以下 sql
create user 用户名 identified by '密码';
grant all privileges on *.* to '用户名'@'%' identified by '密码';
flush privileges;
# 如果是 mysql 8.0 + 的版本,在 mysql 中执行以下 sql
create user 用户名 identified by '密码';
grant all privileges ON hive.* TO '用户名'@'%';
flush privileges;
③ 问题3:用户权限不足
Error: 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 root (state=,code=0)
问题修复:
# 修改 hadoop 配置文件 etc/hadoop/core-site.xml,集群中的每个节点都需要修改,修改前记得先停止集群
# 进入 hadoop 配置文件目录
cd /opt/software/hadoop-2.7.5/etc/hadoop/
# 修改 core-site.xml
vim core-site.xml
# 增加以下内容,注意使用什么用户,此处就写什么用户
<!-- 如果是 test 用户,此处就应该为 hadoop.proxyuser.test.hosts,同下-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>