大数据组件之Hive安装
- 前言
- 一、准备
- 二、安装Hive
- 三、修改Hive元数据存储到mysql
- 1、hive添加mysql驱动
- 2、安装mysql
- 四、hive常用命令
- 其它命令
- 五、Hive常见属性配置
- 1、Hive数据仓库位置配置
- 2、查询后信息显示配置
- 3、Hive运行日志信息配置
- 4、参数配置方式
- 1)查看当前所有的配置信息
- 2)配置参数的三种方式
- 3)查看参数设置
- 六、Hive 数据类型
- 基本数据类型
- 集合数据类型
- 参考
前言
Hive是hadoop的一种客户端工具
官网:https://hive.apache.org/
文档地址:https://cwiki.apache.org/confluence/display/Hive/GettingStarted
下载地址:http://archive.apache.org/dist/hive/
GitHub地址:https://github.com/apache/hive
一、准备
hive版本:apache-hive-3.1.2-bin.tar.gz
mysql:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
可以使用maven下载:mysql-connector-java-5.1.37.jar
二、安装Hive
# 0、上传安装包
...
# 1、解包
tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/
mv /opt/module/apache-hive-3.1.2-bin/ /opt/module/hive
- 配置环境变量
sudo vim /etc/profile.d/my_env.sh
#HIVE HOME
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
- 【可选步骤】解决日志jar包冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak
- 【不推荐使用】初始化元数据库(默认是
derby数据库,只能单次使用,每次都需要重新处理元数据文件)
$HIVE_HOME/bin/schematool -dbType derby -initSchema
初始化报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
参考:https://blog.csdn.net/weixin_44625028/article/details/122313632
原因:hive与hadoop使用的guava依赖版本不一致导致的,以hadoop的为准。
解决:
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.back
cp -r $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
- 启动hadoop
hive的启动依赖于hadoop集群,先启动hadoop集群在启动hive
https://www.cnblogs.com/hhddd-1024/p/16398870.html#1hadoop集群一键启停脚本
- 启动hive
hive
- 【可配置】默认日志地址
tail -f /tmp/`whoami`/hive.log
启动hive客户端后执行show databases;后报错:
Error: FUNCTION 'NUCLEUS_ASCII' already exists. (state=X0Y68,code=30000)
根本原因:
在于Hive默认使用的元数据库为derby,开启Hive之后就会占用元数据库,且不与其他客户端共享数据,所以后面需要将Hive的元数据地址改为MySQL。
解决(下方二选一):
rm -r $HIVE_HOME/lib/metastore_db*
mv $HIVE_HOME/lib/metastore_db $HIVE_HOME/lib/metastore_db.tmp
- 测试hive客户端
show databases;
show tables;
create table test(id string);
show tables;
insert into test values('1001');
# web端查看hdfs文件系统,可以发现/user/hive/warehouse/test/000000_1 被创建了
select id from test;
三、修改Hive元数据存储到mysql
1、hive添加mysql驱动
cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib/
2、安装mysql
- 检查是否安装过mysql
rpm -qa | grep 'mariadb*\|mysql\*'
- 卸载已经存在的
sudo rpm -e --nodeps mariadb-libs
- 解压
cd /opt/software; mkdir mysql ; mv mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar mysql/ ; tar -xvf mysql/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
- 安装
cd /opt/software/mysql; sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm mysql-community-client-5.7.28-1.el7.x86_64.rpm mysql-community-common-5.7.28-1.el7.x86_64.rpm mysql-community-libs-5.7.28-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
- 初始化myslq
cat /etc/my.cnf
[mysqld]
# 将此数据目录下的内容全部删除
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
rm -rf /var/lib/mysql/*
sudo mysqld --initialize --user=mysql
- 查看初始化生成的临时密码
cat /var/log/mysqld.log | grep root@localhost | awk -F"root@localhost: " '{print $2}'
- 启动mysqld
sudo systemctl start mysqld
mysql -uroot -p`cat /var/log/mysqld.log | grep root@localhost | awk -F"root@localhost: " '{print $2}'`
- 修改当前登录root用户的密码
set password = password('root')
- 更新root用户可以远程登录
mysql > update mysql.user set host='%' where user = 'root';
- 创建hive所需要的元数据存储库
mysql > create database metastore;
- 重启
sudo systemctl restart mysqld
- 测试连接
【或者】
- 配置登录跳过密码
vim /etc/my.cnf
[mysqld] # 添加内容 skip-grant-tables
- 启动mysql
systemctl start mysqld
- 登录
mysql -uroot -p空密码
- 修改密码及创建hive元数据存储库
# 0、创建hive需要的元数据存储库 create database metastore; # 1、修改登录密码 use mysql; update user set authentication_string=password('root') where user='root'; # 2、修改账号允许登录的主机 select User, Host from user; update user set Host='%' where Host='localhost'; flush privileges;
- 重启mysql服务
systemctl restart mysqld
- 修改hive配置文件,配置Hive的元据存储到Mysql
vim $HIVE_HOME/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
javax.jdo.option.ConnectionURL
jdbc:mysql://mysql服务ip:mysql端口/metastore?useSSL=false
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
root
hive.metastore.schema.verification
false
hive.metastore.event.db.notification.api.auth
false
hive.metastore.warehouse.dir
/user/hive/warehouse
- 删除存储在
derby数据库的元数据
rm -rf $HIVE_HOME/lib/metastore_db*
- 初始化Hive元数据到mysql(启动hadoop的前提下)
# 启动hadoop
myhadoop.sh start
# 解决hadoop与hive两个组件guava依赖版本不一致
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.back
cp -r $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib
# 初始化
$HIVE_HOME/bin/schematool -initSchema -dbType mysql -verbose
- 测试
hive> show databases;
hive> show tables;
hive> create table test (id int);
hive> insert into test values(1);
hive> select * from test;
hive> drop table test;
可能遇到的问题:
1、hadoop web端文件系统无法上传文件,报错:Permission denied: user=hdp, access=WRITE, inode=“/bigdata“:hdfs:supergroup:drwxr-xr-x
原因:配置的用户名与hadoop服务启动的用户不一致
检查hadoop核心配置文件中hadoop.http.staticuser.user的配置是否为bigdata
vim $HADOOP_HOME/etc/hadoop/core-site.xml
检查目录权限
2、hive插入数据sql报错:FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
添加内容
yarn.scheduler.minimum-allocation-mb
2048
default value is 1024
参考:https://blog.csdn.net/kikitious_du/article/details/84848621、https://blog.csdn.net/qq_40889383/article/details/115131773
四、hive常用命令
hive -help
usage: hive
-d,--define Variable subsitution to apply to hive
commands. e.g. -d A=B or --define A=B
--database Specify the database to use
-e SQL from command line
-f SQL from files
-H,--help Print help information
--hiveconf Use value for given property
--hivevar Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
-i Initialization SQL file
-S,--silent Silent mode in interactive shell
-v,--verbose Verbose mode (echo executed SQL to the console)
- “-e”不进入hive的交互窗口执行sql语句,例如:hive -e "select id from test1;"
- “-f”执行脚本中sql语句,例如:hive -f /opt/module/datas/hivef.sql
其它命令
- 退出hive窗口:
hive(default)>exit;
hive(default)>quit;
在新版的oracle中没区别了,在以前的版本是有的:
exit:先隐性提交数据,再退出;
quit:不提交数据,退出;
- 在hive cli命令窗口中如何查看hdfs文件系统
hive(default)>dfs -ls /;
- 在hive cli命令窗口中如何查看hdfs本地系统
hive(default)>! ls /opt/module/datas;
- 查看在hive中输入的所有历史命令
进入到当前用户的根目录/root或/home/hdp
查看. hivehistory文件
cat ~/.hivehistory
五、Hive常见属性配置
1、Hive数据仓库位置配置
1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下
2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。
3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)
hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse
配置同组用户有执行权限
hdfs dfs -chmod g+w /user/hive/warehouse
2、查询后信息显示配置
1)在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。
hive.cli.print.header
true
hive.cli.print.current.db
true
2)重新启动hive,对比配置前后差异
(2)配置后
3、Hive运行日志信息配置
1)Hive的log默认存放在/tmp/hdp/hive.log目录下(当前用户名下)。
2)修改hive的log存放日志到$HIVE_HOME/logs
(1)修改$HIVE_HOME/conf/hive-log4j.properties.template文件名称为hive-log4j.properties
cp $HIVE_HOME/conf/hive-log4j.properties.template $HIVE_HOME/conf/hive-log4j.properties
(2)在hive-log4j.properties文件中修改log存放位置
vim $HIVE_HOME/conf/hive-log4j.properties
# 添加内容
hive.log.dir=/opt/module/hive/logs
4、参数配置方式
1)查看当前所有的配置信息
hive>set;
2)配置参数的三种方式
(1)配置文件方式
默认配置文件:hive-default.xml,用户自定义配置文件:hive-site.xml
注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。
(2)命令行参数方式
启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。
例如:
hive -hiveconf mapred.reduce.tasks=10;
注意:仅对本次hive启动有效
查看参数设置:
hive (default)> set mapred.reduce.tasks;
(3)参数声明方式
可以在HQL中使用SET关键字设定参数
例如:
hive (default)> set mapred.reduce.tasks=100;
注意:仅对本次hive启动有效。
3)查看参数设置
hive (default)> set mapred.reduce.tasks;
上述三种设定方式的优先级依次递增。即配置文件 < 命令行参数 < 参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。
六、Hive 数据类型
基本数据类型

集合数据类型

参考
文章:大数据技术之Hive第2章 Hive安装、hive数据类型
视频:B站