总结:Hive

一、Hive介绍

Hive 是一个构建在 Hadoop 上的数仓工具,用于处理和查询存储在 HDFS 上的大规模数据。它使用类似 SQL 的 HiveQL 来执行查询,但背后是将查询任务转译成 MapReduce、Tez 或 Spark 等分布式计算任务来执行。Hive 的主要优势包括:

  1. 分布式处理:依赖于 Hadoop 框架,能够并行处理 TB 级以上的数据。
  2. 高扩展性:通过增加节点扩展存储和计算能力,支持海量数据处理。
  3. SQL 兼容性:使用 SQL-Like 的查询语言 HiveQL,易于上手和使用。
  4. 灵活性:支持多种数据格式和存储方式,数据导入导出方便。
  5. 经济高效:使用廉价的硬件资源即可实现大规模数据计算。

总之,Hive 适用于需要对大规模数据进行批量处理和分析的场景,是处理大数据的强有力工具。

二、Hive架构

用户接口: Client

包括 CLI、JDBC/ODBC、WEBUI。其中:

  • CLI:CLI(command line interface)为 shell 命令行;
    • 启动 CLI 非常简单,只需要在命令行中输入 hive 命令即可进入 Hive 的交互式命令行界面。在启动 CLI 的同时,也会启动一个 Hive 服务。
    • 如:
  • Thrift 服务器:Hive 中的 Thrift 服务器允许外部客户端通过网络与 Hive 进行交互,类似于 JDBC 或 ODBC 协议。
    • 启动:
      • 前台启动:hive --service hiveserver2
      • 后台启动:nohup hive --service hiveserver2 > /var/log/hiveserver.log 2> /var/log/hiveserver.err &
  • WEB(Web Graphical User Interface):WebGUI 是通过浏览器访问 Hive。
    • Hive 2.2.0 及以后的版本中不再包含 HWI,因此较新的版本无需关注。
元数据: Metastore

元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;其实主要作用就是Hive的表和HDFS的路径做映射。

默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储Metastore。

驱动器: Driver
  1. 解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、 SQL语义是否有误。
  2. 编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
  3. 优化器(Query Optimizer):对逻辑执行计划进行优化。
  4. 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说, 就是 MR/Spark。

三、Hive原理

Hive会提前将SQL语言中常用的操作(select,where,group等)用MapReduce写成很多模板。将模板封装在Hive中。

简单说就是Hive把client输入的SQL转换为Mapreduce,运行在 Yarn 上。

建表,通过映射关系(表和HDFS路径)向表中导数据。

查询,通过表名从Metastore中(记录 MetaStore着表对应文件的path)得到HDFS文件的路径查询对应的数据。

Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver,结合元数据(MetaStore),将这些指令翻译(经过解析器、编译器、优化器)成 MapReduce,提交到 Hadoop 中执行,最后,将执行返回的结果输出到用户交互接口。

四、Hive为什么能够处理大量数据?

Hive 是一个建立在 Hadoop 之上的数据仓库系统,它能够处理大量数据主要是因为以下几个原因:

  1. 分布式存储:Hive 使用 Hadoop 的 HDFS(Hadoop Distributed File System)来存储数据。HDFS 是一个分布式文件系统,它将大文件分割成多个块(block),并将这些块分散存储在集群中的多个节点上。这种分布式存储方式使得 Hive 能够有效地存储和处理大规模数据集。

  2. 分布式计算:Hive 利用 Hadoop 的 MapReduce 计算框架来执行数据处理任务。MapReduce 将计算任务分解成多个小任务(map 和 reduce 阶段),并在集群中的多个节点上并行执行这些任务。这种分布式计算模型极大地提高了数据处理的效率和吞吐量。

  3. SQL 接口:Hive 提供了一个类 SQL 的查询语言——HiveQL,它允许用户通过编写 SQL 风格的查询来分析和处理数据。这使得数据分析师和工程师能够使用熟悉的 SQL 语法来处理大规模数据集,而不需要编写复杂的 MapReduce 程序。

  4. 可扩展性:Hive 的设计具有很好的可扩展性。随着数据量的增长,可以通过增加更多的计算和存储节点来扩展集群的容量和处理能力。

  5. 数据抽象:Hive 提供了表(table)和分区(partition)等数据抽象,使得用户可以像操作传统数据库一样操作大规模数据集。这种抽象层简化了数据管理和查询的过程。

  6. 生态系统支持:Hive 是 Hadoop 生态系统的一部分,它可以与其他 Hadoop 组件(如 Pig、HBase、Spark 等)无缝集成,为用户提供了一个强大的数据处理平台。

关于 Hive 的详细解释和文档,以下是一些比较好的资源:

  • 官方文档Apache Hive 官方文档 提供了 Hive 的全面介绍,包括安装、配置、使用和优化等方面的信息。

  • 书籍:《Hive 编程指南》(Programming Hive)是一本详细介绍 Hive 的书籍,适合想要深入了解 Hive 的读者。

  • 在线教程和课程:Coursera、Udemy、edX 等在线教育平台上提供了关于 Hadoop 和 Hive 的课程,这些课程通常包括视频讲座、实践练习和项目作业。

  • 技术博客和文章:许多技术博客和网站(如 Medium、Towards Data Science 等)上都有关于 Hive 的文章和教程,这些内容通常由经验丰富的数据工程师和分析师撰写,提供了实用的技巧和案例分析。

通过这些资源,你可以更深入地了解 Hive 的工作原理和最佳实践,以及如何有效地使用 Hive 处理大量数据。

五、Hive是如何查询TB级别的数据的?和Mysql对比下

为了更好理解Hive的优势,下面通过一个实际案例对比Hive和MySQL在处理TB级数据时的差异。

数据集简介

假设我们有一个TB级别的销售数据集,该数据集有以下几列:

  • transaction_id:交易ID
  • transaction_date:交易日期
  • customer_id:客户ID
  • product_id:产品ID
  • amount:交易金额

在MySQL中查询

在MySQL中,如果我们要查询每个月的总销售额,可以使用如下SQL语句:

SELECT 
    DATE_FORMAT(transaction_date, '%Y-%m') AS month,
    SUM(amount) AS total_sales
FROM 
    sales
GROUP BY 
    DATE_FORMAT(transaction_date, '%Y-%m');
MySQL的局限性
  • 单节点处理:MySQL处理这些查询是在单个节点上进行,此时内存、I/O和计算资源成为了主要瓶颈。处理TB级数据,单节点很难承受高负载。
  • 扩展性差:扩展能力有限,增加更多存储和计算资源相对复杂且成本高。

在Hive中查询

在Hive中,我们将数据存储在HDFS中,并创建相应的Hive表,然后进行相同的查询:

创建和加载表
CREATE EXTERNAL TABLE sales (
    transaction_id STRING,
    transaction_date STRING,
    custom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值