大数据组件之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

其它命令

  1. 退出hive窗口:

hive(default)>exit;

hive(default)>quit;

在新版的oracle中没区别了,在以前的版本是有的:

exit:先隐性提交数据,再退出;

quit:不提交数据,退出;

  1. 在hive cli命令窗口中如何查看hdfs文件系统

hive(default)>dfs -ls /;

  1. 在hive cli命令窗口中如何查看hdfs本地系统

hive(default)>! ls /opt/module/datas;

  1. 查看在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,对比配置前后差异

img

(2)配置后

img

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站