前言
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计。
Hive:提供一个大数据的SQL的接口,不做计算。用来做数据分析。
使用Mysql保存元数据信息:字段、字段类型、分割方式、存储方式。
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理中的决策制定。
注意
安装Hive前提是要先安装Hadoop集群,并且Hive只需要在Hadoop的Namenode节点集群里安装即可。
虽然修改配置文件并不需要你已经把Hadoop跑起来,但是启动Hive的前提也是需要Hadoop在正常运行,所以建议先将其他基础环境安装好。
版本
| 名称 | 版本 | 
|---|---|
| Hadoop | 2.7.7 | 
| MySql | 5.7 | 
| Hive | 2.1.0 | 
Hive的使用场景
从上面的理解介绍可以简单掌握Hive的特点:
优点:
1、使用SQL语法查询,不用再去写复杂的MapReduce程序,减少开发成版本,上手快。
2、基于MapReduce算法,所以在处理大数据时,优势非常明显
3、可以支持自定义函数,计算能力强
缺点:
1、Hive的执行延迟比较高,这是因为启动并运行一个MapReduce程序本身需要消耗非常多的资源
2、Hive的HQL语句表达能力有限,并且他是基于模板实现的,所以通常不够智能化,很多复杂的大数据计算无法支持,比如迭代式计算
3、Hive处理大数据量非常擅长,但是处理小数据量就没有优势了。
针对与优点和缺点总结:
所以,Hive通常适用于大数据的OLAP场景,做一些面向分析,允许有延迟的数据挖掘工作,并且结合其他组件也可以做一些数据清洗之类的简单数据处理工作。
Hive是针对数据仓库来进行设计的,这种场景下,通常是读多写少。并且数据都是来自外部的HDFS,所以Hive中不建议做数据的修改操作,所有的数据最好是在加载的时候就已经确定好了。
安装Mysql
https://www.psvmc.cn/article/2018-06-25-mysql-tips.html
安装
1  | curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  | 
安装mysql 服务器 命令:
1  | yum install -y mysql-community-server --nogpgcheck  | 
启动mysql 命令:
1  | service mysqld start  | 
查看mysql是否自启动,并且设置开启自启动 命令:
1  | chkconfig --list | grep mysqld  | 
配置修改
表名/编码/连接数/数据包大小
设置表名不区分大小写/字符编码/连接数
修改 /etc/my.cnf
1  | vi /etc/my.cnf  | 
添加以下的5行
1  | [mysqld]  | 
重启
1  | service mysqld restart  | 
修改密码
默认密码
打开日志文件
1  | vi /var/log/mysqld.log  | 
找到密码
1  | [Note] A temporary password is generated for root@localhost: tr&:DeYtt8+k  | 
修改密码:
MySQL 5.7推荐使用ALTER USER修改密码
MySQL修改用户的密码主要有:ALTER USER 和UPDATE用户表
ALTER USER
推荐用此方式
1  | mysql -uroot -p  | 
连接上以后
1  | set global validate_password_policy=0;  | 
允许远程登录
1  | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;  | 
设置密码永不过期
1  | ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;  | 
Hive安装及配置
下载与安装
https://dlcdn.apache.org/hive/hive-2.1.0/
解压
1  | tar -zxvf apache-hive-2.1.0-bin.tar.gz -C /data/tools/bigdata/  | 
环境变量
添加环境变量
1  | cd /etc/profile.d/  | 
创建配置文件
1  | vi /etc/profile.d/hive.sh  | 
加入:
1  | export HIVE_HOME=/data/tools/bigdata/apache-hive-2.1.0-bin  | 
配置立即生效
1  | source /etc/profile  | 
查看ZK_HOME
1  | echo $HIVE_HOME  | 
复制Jar
复制Mysql连接的JAR
1  | cp mysql-connector-java-8.0.28.jar $HIVE_HOME/lib/  | 
复制jdbc的jar
1  | cp $HIVE_HOME/jdbc/hive-jdbc-2.1.0-standalone.jar $HIVE_HOME/lib/  | 
修改配置
进入目录
1  | cd $HIVE_HOME/conf  | 
配置重命名
1  | cp hive-default.xml.template hive-site.xml  | 
创建文件夹
1  | mkdir -p /data/tools/bigdata/zdata/hive/tmp  | 
hive-site.xml
hive-site.xml中修改下面的配置
1  | 
  | 
注意
value中不能换行。一个大坑,我在部署的时候一直不行,后来发现时
javax.jdo.option.ConnectionURL对应的value的值太长,VSCode自动给换行了。删除换行就可以了,真是奇葩。
hive-log4j.properties
修改hive-log4j.properties配置
1  | property.hive.log.dir = /data/tools/bigdata/zdata/hive/logs/  | 
配置分发
1  | ssh hadoop02 "rm -rf $HIVE_HOME"  | 
初始化库
Hive的数据库MySQL在安装的时候没有初始化
在MySQL中
1  | # 删除mysql中的元数据库  | 
命令行中执行
1  | # 在命令行中,重新初始化  | 
否则会报错
java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.Session
在Hive中无法执行任何命令
开启元数据服务
1  | nohup hive --service metastore >/dev/null 2>&1 &  | 
查看Schema信息
1  | schematool -dbType mysql -info  | 
可以看到
 
目录权限
修改HDFS系统中关于Hive的一些目录权限
1  | hadoop fs -mkdir -p /user/hive/warehouse  | 
启动Hive
1  | $HIVE_HOME/bin/hive  | 
查询表
1  | show tables;  | 
Java中JDBC操作
添加依赖
1  | <dependency>  | 
Java中创建数据库和表
代码
1  | package cn.psvmc;  | 
JDBC读取数据
读取数据
1  | import java.sql.Connection;  |