说明
1、hive以来与hadoop,所以要服务器上要有hadoop才能安装hive
2、hive需要依赖与mysql,所以需要现有MySQL服务才能安装hive
安装
下载地址
http://archive.apache.org/dist/hive/
解压
tar -zxvf /opt/software/apache-hive-3.1.2bin.tar.gz -C /opt/module/
修改环境变量
# 新增文件
vim /etc/profile.d/my_env.sh
# 新增内容
#HIVE_HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
刷新环境变量
source /etc/profile.d/my_env.sh
解决冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
配置hadoop
vim /etc/profile
# 新增
export HADOOP_HOME=/opt/hadoop/hadoop-3.3.1
初始化元数据库
bin/schematool -dbType derby -initSchema
启动及使用
启动hadoop
sbin/start-all.sh
http://192.168.31.229:9870/explorer.html#/
http://192.168.31.229:8088/cluster
关闭防火墙
#查看状态
firewall-cmd --state
#这个亲测可用
systemctl stop firewalld.service
#开机禁止启动
systemctl disable firewalld.service
启动
bin/hive
报错
Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /tmp/hive. Name node is in safe mode.
原因
hadoop 处在安全模式
解决
## 进入hadoop的bin目录 执行↓
hadoop dfsadmin -safemode leave
配置hadoop权限
hdfs dfs -chmod -R 777 /
hdfs dfs -chmod -R 777 /tmp
使用hive
-- 此过程比较慢
hive> show databases;
hive> show tables;
hive> create table test(id int);
hive> insert into test values(1);
hive> select * from test;
查看监控日志
cat /tmp/root/hive.log
hive+MySQL
修改配置文件
# 新增配置文件
vim $HIVE_HOME/conf/hive-site.xml
新增
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc连接的URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.110:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc连接的Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc连接的username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc连接的password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- Hive默认在HDFS的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
在mysql中新增数据源
create database metastore;
初始化
schematool -initSchema -dbType mysql verbose
报错
[root@localhost bin]# schematool -initSchema -dbType mysql verbose
Metastore connection URL: jdbc:mysql://192.168.1.110:3306/metastore?useSSL=false
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
Use --verbose for detailed stacktrace.
*** schemaTool failed ***
原因:没有驱动包
解决办法:
下载jar包
mysql-connector-java-5.1.32.jar
放入hive的lib目录下
重新初始化即可
初始化后数据库中增加74张表
启动及使用
启动
bin/hive
使用
hive> show databases;
hive> show tables;
hive> create table test (id int);
hive> insert into test values(1);
hive> select * from test;
hive> show databases;
hive> show tables;
hive> select * from aa;
使用元数据服务方式访问hive
修改hive-site.xml
cd /opt/module/hive/conf
vim hive-site.xml
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop102:9083</value>
</property>
启动metastore
hive --service metastore
启动后重新打开一个会话 启动hive
bin/hive
使用jdbc访问hive
修改hadoop的配置文件
vim core-site.xml
新增
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
如果不配置应该是无法用java访问
修改hive-site.xml
<!-- 指定hiveserver2连接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>192.168.1.102</value>
</property>
<!-- 指定hiveserver2连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<!--
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.server2.active.passive.ha.enable</name>
<value>true</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
-->
启动server2
hive --service metastore
bin/hive --service hiveserver2
# 后台启动
nohub hive --service metastore &
nohub bin/hive --service hiveserver2 &
启动beeline
bin/beeline -u jdbc:hive2://192.168.1.102:10000 -n root
进入客户端