大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • Spark

    • Spark 基础
    • Spark Core
    • Spark 存储体系源码分析
    • Spark RPC 通信源码分析
    • Spark RDD 源码分析
    • Spark Task 源码分析
    • Spark Stage 源码分析
    • Spark DAGScheduler 源码分析
    • Spark TaskScheduler 源码分析
    • Spark Shuffle
    • Spark AppendOnlyMap
  • Flink

    • Flink 概述
    • Flink 架构
    • Flink 快速入门
    • Flink 安装
    • Flink API
    • Flink 状态管理
    • Flink 架构介绍
    • Flink Window
    • Flink Time WaterMark
    • Flink Table Api
    • Flink Sql
    • Flink CEP
    • Flink 面试题
  • Hive

    • Hive 概述
      • 什么是 Hive
      • Hive 的优缺点
        • 优点
        • 缺点
      • Hive 架构
      • Hive 和数据库的区别
    • Hive 安装及配置参数
    • Hive 客户端的使用
    • Hive 数据类型
    • Hive DDL
    • Hive 表类型
    • Hive DML
    • Hive DQL
    • Hive 内置函数
    • Hive UDF
    • Hive 视图
    • Hive 索引
    • Hive 事务
    • Hive 文件存储
    • Hive HQL 执行原理
    • Hive 数据倾斜
    • Hive 执行计划
    • Hive 调优
    • Hive 面试题
  • 数据处理
  • Hive
Will
2021-12-29
目录

Hive 概述

# 什么是 Hive

Apache Hive 是一个款建立在 Hadoop 之上的开源数据仓库系统,可以将存储在 Hadoop 中的的结构化和半结构化数据映射为一张数据库表,基于表提供了一种类 SQL 查询语言(HQL),虽然名字叫做 HQL,但是很多场景下和 SQL 的语法是相似的。

为什么说 Hive 是建立在 Hadoop 之上的呢?

  1. Hive 的数据是存储在 HDFS 上的
  2. 计算是由 MapReduce 完成的
  3. 任务调度是由 Yarn 完成的

Hive 的作用是将 HQL 转化为 MapReduce 程序并提交到 Hadoop 集群执行,最早是由 Facebook 开源,用以解决海量结构化日志统计的工具。

# Hive 的优缺点

# 优点

  1. 用 SQL 化的方式代替了繁琐的 MapReduce 程序
  2. 开发人员容易上手,减小了开发人员的学习成本
  3. 支持自定义函数(UDF),方便功能扩展
  4. 基于 Hadoop 可以实现海量数据分析
  5. 可以水平扩展

# 缺点

  1. Hive 执行延迟比较高,所以 Hive 适合对离线计算或者对实时性要求不高的场景
  2. Hive 在小数据集处理方面不占优势
  3. HQL 表达能力有限
  4. 迭代计算无法表达
  5. 调优比较困难,可控制粒度较大

# Hive 架构

Hive 架构

Hive 的架构可以分为以下几个组件:

  1. 用户接口:包括 CLI、JDBC/ODBC、WEBUI。其中,CLI(command line interface)为 shell 命令行;Hive 中的 Thrift 服务器允许外部客户端通过网络与 Hive 进行交互,类似于 JDBC 或 ODBC 协议。WebGUI 是通过浏览器访问 Hive。
  2. 元数据(Metastore):用以存储 Hive 中的库、表、列、注释、分区、表属性等信息。默认是存储在 Hive 自带的 Derby 数据库中的,企业中一般会通过配置将其存储到 MySQL 中。
  3. Driver 驱动程序:Driver 驱动程序包括解析器(SQL Parser)、编译器(Physical Plan)、优化器(Query Optimize)、执行器(Execution)。解析器将 SQL 字符串转换成抽象语法树 AST,并对抽象语法树进行分析,比如判断字段是否存在、类型是否合理等,编译器负责将 AST 编译成逻辑执行计划,并由优化器对逻辑执行计划进行优化,最后由执行器将逻辑执行计划转换为屋里运行计划。
  4. 执行引擎:Hive 本身是不会处理数据的,而是通过执行引擎来处理。默认的执行引擎就是 MapReduce,但是可以通过配置将执行引擎替换为 Spark、Tez 或者 Presto 等。

# Hive 和数据库的区别

由于 Hive 使用了类 SQL 的查询语言,容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

  1. 查询语言

HQL 和 SQL 只是大部分语法比较相似,并不完全一样。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。

  1. 数据规模

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

  1. 执行引擎

Hive 的执行引擎默认是 MapReduce,但是可以通过配置由 Spark、Flink、Tez、Presto 等代替,而数据库使用的是自己的执行引擎。

  1. 数据存储

Hive 的数据都是存储在 HDFS 中的,而数据库是将数据保存在本地文件系统或裸设备中。

  1. 执行速度

Hive 存储的数据量大,在查询数据的时候,通常没有索引,需要扫描整个表;加之 Hive 使用 MapReduce 作为执行引擎,这些因素都会导致较高的延迟。而 RDBMS 对数据的访问通常是基于索引的,执行延迟较低。当然这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出并行的优势。

  1. 可扩展

Hive 支持水平扩展,数据库通常支持垂直扩展,对水平扩展不友好。Hive 建立在 Hadoop 之上,其可扩展性与 Hadoop 的可扩展性是一致的(Hadoop 集群规模可以轻松超过 1000 个节点)。而 RDBMS 由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。

  1. 数据更新

Hive 对数据更新不友好,数据库支持频繁、快速的数据更新。Hive 是针对数据仓库应用设计的,数据仓库的内容是读多写少的。因此,Hive 中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而 RDBMS 中的数据需要频繁、快速的进行更新。

  1. 索引

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

上次更新: 2023/11/01, 03:11:44

← Flink 面试题 Hive 安装及配置参数→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式