前言
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; |