Hadoop-Hive基础知识整理

一. 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 表的概念(类似关系型数据库)

create table bf_log(
ip string,
user string,
date string,
......
)

4.2 HQL(类似SQL)

#HiveQL
select * from bf_log limit 10 ;
select substring(ip,0,4) ip_prex from bg_log ;

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中的内容不支持改写和删除,适合读多写少的场景.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容