一. Hive入门简介
1. Hive是什么
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能.
构建在Hadoop 之上的数据仓库;
使用HQL作为查询接口;
使用HDFS存储;
使用MapReduce计算;
本质是:将HQL转化成MapReduce程序.
基于其本质,也可以将Hive看成是一个SQL的解析引擎,但这样说并不全面,毕竟有时SQL也会不被解析的;
底层: HDFS负责存储数据;YARN负责进行资源管理;MapReduce负责处理数据;
2. Hive产生的目的
用于解决海量结构化日志的数据统计;
结构化日志: 有统一的规范
(1) 每一行数据就是一条数据;
(2) 很多列之间有统一的标识符进行分割;
3. 特点
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
避免了去写MapReduce,减少开发人员的学习成本;
统一的元数据管理,可与impala/spark等共享元数据;
灵活性和扩展性比较好:支持UDF,自定义存储格式等;数据存储在hdfs上,存储容量可以平滑扩展;
适合离线数据处理;hive本质是跑MapReduce程序,更适合离线数据处理;比如:日志分析,海量结构化数据离线分析…
Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求不高的场合;
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
HQL与SQL的区别:
HSQL:读时模式,也就是读数据做检查操作,比如检查表是否存在,字段是否存在,sql语法是否正确等;但在加载数据时,不对数据进行检查,仅仅是文件的复制或移动,所以加载数据会比较快.HSQL写快读慢.
SQL:写时模式,就是在加载数据时,会建立索引,字段检查等操作,这些操作都是为了提升查询的性能.所以SQL查询时比较快,而写入时比较慢.SQL读快,写慢.
UDF,UDAF与UDTF的区别:
UDF:用户自定义普通函数,一对一,用于select语句,对查询字段的结构化处理;比如format操作等;
UDAF:用户自定义聚合函数,多对一,group by
UDTF:用户自定义表生成函数,一对多.比如:split,分词
4. 基本概念
4.1 表的概念(类似关系型数据库)
4.2 HQL(类似SQL)
HQL的本质是通过Hive Engine转换为MapReduce任务.
二. Hive知识入门
Hive架构
2.1 架构组成
(1) 用户接口: Client
CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)
(2) 元数据: Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/
分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用采用MySQL存储Metastore;
(3) Driver
包含:解析器、编译器、优化器、执行器;
解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工
具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否
存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是
否有出现);
编译器:将抽象语法树AST编译生成逻辑执行计划;
优化器:对逻辑执行计划进行优化;
执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark.
(4) HDFS
使用HDFS存储数据.Hive本身不存在数据,Hive虽有表的定义但表是纯的逻辑表,数据是存在HDFS上的.
HIVE中的内容不支持改写和删除,适合读多写少的场景.
2.2 基础语法
(1) 查询数据库列表
(2) 使用指定的数据库
(3) 查询表列表
(4) 创建表
(5) 查询表
(6) 查询表的描述信息:
(7) 加载数据:
(8) 查询功能函数:
(9) 关闭CLI客户端命令:
(10) 在启动hive时设置配置属性信息
(11) 查看当前所有的配置信息
(12) 查看帮助文档
(13) 执行sql语句
(14) 执行指定的文件
(15) 在hive cli命令窗口中如何查看hdfs文件系统
(16) 在hive cli命令窗口中如何查看本地文件系统
领取专属 10元无门槛券
私享最新 技术干货