Hive定义

Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并可以使用类似SQL的方式来对数据文件进行读写以及管理。这套Hive SQL 简称HQL。Hive的执行引擎可以是MR、Spark、Tez。

Hive的本质是将HQL转换成MapReduce任务,完成整个数据的分析查询,减少编写MapReduce的复杂度 。

Hive的优缺点

优点

  1. 学习成本低:提供了类SQL查询语言HQL,使得熟悉SQL语言的开发人员无需关心细节,可以快速上手.
  2. 海量数据分析:底层是基于海量计算到MapReduce实现.
  3. 可扩展性:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统),Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
  4. 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  5. 良好的容错性:某个数据节点出现问题HQL仍可完成执行。
  6. 统计管理:提供了统一的元数据管理

缺点

  1. Hive的HQL表达能力有限
  2. 迭代式算法无法表达.
  3. Hive的效率比较低.
  4. Hive自动生成的MapReduce作业,通常情况下不够智能化.
  5. Hive调优比较困难,粒度较粗.

Hive的架构

核心结构如下图:

用户连接接口

CLI:是指Shell命令行
JDBC/ODBC:是指Hive的JAVA实现,与传统数据库JDBC类似。
WebUI:是指可通过浏览器访问Hive。

hriftserver

​ hive的可选组件,此组件是一个软件框架服务,允许客户端使用包括Java、C++、Ruby和其他很多种语言,通过编程的方式远程访问Hive。
元数据

​ Hive将元数据存储在数据库中,如Mysql、Derby。Hive中的元数据包括(表名、表所属的数据库名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等)

驱动(Driver)

  • 解析器(SQLParser):

    将HQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法
    分析,比如表是否存在、字段是否存在、SQL语义是否有误。

  • 编译器(Compiler):

    对hql语句进行词法、语法、语义的编译(需要跟元数据关联),编译完成后会生成一个执行计划。Hive上就
    是编译成mapreduce的job。

  • 优化器(Optimizer):

    将执行计划进行优化,减少不必要的列、使用分区、使用索引等。优化job。

  • 执行器(Executer):

    将优化后的执行计划提交给hadoop的yarn上执行。提交job。

Hive与关系型数据库的异同

列表比较

比较项 关系数据库 Hive
ANSI SQL 支持 不完全支持
更新 UPDATE INSERT DELETE INSERT OVERWRITE\ INTO TABLE
事务 支持 支持(部分支持)
模式 写模式 读模式
存储位置 块设备、本地文件系统 HDFS
延时
多表插入 不支持 支持
子查询 完全支持 只能用在From子句中
视图 Updatable Read-only
可扩展性
数据规模
实时响应 毫秒级 秒级

关键比较项解释

  1. 查询语言:由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。

  2. 数据存储位置:Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或者本地文件系统中。

  3. 数据格式:Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、“\t”、“\x001”)、行分隔符(“\n”)以及读取文件数据的方法(Hive中默认有三个文件格式TextFile、SequenceFile以及RCFile)。由于在加载数据的过程中,不需要从用户数据格式到Hive定义的数据格式的转换,因此,Hive在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的HDFS目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。

  4. 数据更新:由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用INSERT INTO…VALUES添加数据,使用UPDATE…SET修改数据。

  5. 索引:Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive仍然可以体现出优势。数据库中,通常会针对一个或几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询。

  6. 执行:Hive中大多数查询的执行是通过Hadoop提供的MapReduce来实现的(类似select * from tbl的查询不需要MapReduce)。而数据库通常有自己的执行引擎。

  7. 执行延迟:之前提到,Hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架。由于MapReduce本身具有较高的延迟,因此在利用MapReduce执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

  8. 可扩展性:由于Hive是建立在Hadoop之上的,因此Hive的可扩展性是和Hadoop的可扩展性是一致的。而数据库由于ACID语义的严格限制,扩展性非常有限。目前最先进的并行数据库Oracle在理论上的扩展能力也只有100台左右。

  9. 数据规模:由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

Hive和Hadoop的关系

  1. Hive是基于Hadoop的。
  2. Hive本身其实没有多少功能,Hive就相当于在Hadoop上面加了一个外壳,就是对hadoop进行了一次封装。
  3. Hive的存储是基于HDFS的,Hive的计算是基于MapReduce。

全方位揭秘!大数据从0到1的完美落地之Hive介绍相关推荐

  1. 全方位揭秘!大数据从0到1的完美落地之Hive自定义函数

    自定义函数 自定义函数介绍 hive的内置函数满足不了所有的业务需求.hive提供很多的模块可以自定义功能,比如:自定义函数.serde.输入输出格式等.而自定义函数可以分为以下三类: 1)UDF:u ...

  2. 全方位揭秘!大数据从0到1的完美落地之Mysql介绍

    导读 在大数据中,我们需要处理的数据来自不同的渠道,其中有一个很重要的渠道就是关系型数据库中存储的数据.在企业中,会把业务数据存储在关系型数据库中,一般以 MySQL 居多.另外,我们在后续的学习中需 ...

  3. 全方位揭秘!大数据从0到1的完美落地之Hive分桶

    分桶的概述 为什么要分桶 数据分区可能导致有些分区数据过多,有些分区数据极少.分桶是将数据集分解为若干部分(数据文件)的另一种技术. 分区和分桶其实都是对数据更细粒度的管理.当单个分区或者表中的数据越 ...

  4. 全方位揭秘!大数据从0到1的完美落地之Hive企业级调优

    Hive企业级调优 调优原则已经在MR优化阶段已经有核心描述,优化Hive可以按照MR的优化思路来执行 优化的主要考虑方面: 环境方面:服务器的配置.容器的配置.环境搭建 具体软件配置参数: 代码级别 ...

  5. 全方位揭秘!大数据从0到1的完美落地之Hive窗口函数

    窗口函数 窗口函数over简介 先来看一下这个需求:求每个部门的员工信息以及部门的平均工资.在mysql中如何实现呢 求部门平均工资 select deptno ,avg(sal) from emp ...

  6. 全方位揭秘!大数据从0到1的完美落地之Hive分区

    分区简介 为什么分区 Hive的Select查询时,一般会扫描整个表内容.随着系统运行的时间越来越长,表的数据量越来越大,而hive查询做全表扫描,会消耗很多时间,降低效率.而有时候,我们需求的数据只 ...

  7. 全方位揭秘!大数据从0到1的完美落地之Hive存储格式

    hive的存储格式 hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储. 第一类: 纯文本文件存储 textfile: 纯文本文件存储格式,不压缩,也是hive的默认存储格式,磁盘开销 ...

  8. 全方位揭秘!大数据从0到1的完美落地之Hive查询操作

    Hive基本查询语法 基本使用规则 基本查询语句组成 select .. from ..join [tableName] on ..where ..group by ..having ..order ...

  9. 全方位揭秘!大数据从0到1的完美落地之Hive压缩

    Hive的压缩 HQL语句最终会被编译成Hadoop的Mapreduce job,因此hive的压缩设置,实际上就是对底层MR在处理数据时的压缩设置. hive在map阶段的压缩 map阶段的设置, ...

最新文章

  1. hadoop环境搭建之伪分布集群环境搭建(单节点)
  2. 教你解决ChartDirector Linux下中文乱码
  3. css中改变边距会影响原大小,CSS:更改父容器中子项的边距会改变子项的宽度吗?...
  4. php中的__FUNCTION__
  5. Nginx 状态监控、缓存的两种机制(学习笔记十四)
  6. MFC初步教程(三):菜单
  7. Vuex之store仓库计算属性Getter
  8. 【大话数据结构-数据结构绪论①】
  9. 将数据库导出成sql文件
  10. 掌财社昆仑:期货升水和期货贴水是什么意思?
  11. [网站推荐] 百度识图
  12. 仿微信视频下载进度自定义View
  13. GVIM技巧系列-如何在GVIM中跳来跳去
  14. Android应用开发详解【郭宏志】(奋斗之小鸟)_PDF 电子书
  15. HttpServletResponse response实现文件上传、下载
  16. 第六届蓝桥杯决赛真题:穿越雷区
  17. uptown funk 火星哥霸占BILLBOARD排行榜8周的嗨爆神曲
  18. 【从本人QQ空间迁移】重构“依恋情结”(以黑名单的新增编辑为例)
  19. 出版社、作者和图书 出版社类:属性:编号,出版社名称,地址 方法:显示出版社的信息 构造:无参构造方法、有参构造方法 作者类:属性:作者的编号,姓名 方法:显
  20. 讲清MVC、MVP、MVVM,看这一篇文章就够了

热门文章

  1. 共享盘里文件excel提示文件已损坏无法打开的解决办法
  2. 妮妮收到了Sarah Khider(芝华士广告歌 主唱)的留言
  3. 数字签名过程及数字证书
  4. Java Swing学习
  5. org.eclipse.ui.part.FileEditorInput cannot be cast to com.genuitec.eclipse.code.ui.welcome.editors.C
  6. [C语言] [试题详解] 求1000之内的所有 完数
  7. 人间小满 - 我的从业路
  8. HT5超越市场,市占率急速上升,热门的原因是什么呢? 让我门来好好分析
  9. Axure RP原型设计|全实战项目演练从入门到精通-姜浩-专题视频课程
  10. 东南大学计算机学院硕导姜浩,东南大学计算机科学与工程学院硕导介绍:曹玖新...