• 走进Hive


    • 什么是Hive
      • Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,构建在分布式HDFS系统运行的数据库
    • 应用场景
      • 大数据集的批处理作用,做离线的数据分析
      • 日志分析
      • 多维度数据分析
      • 海量结构化数据离线分析
      • 统计网站一个时间段内的pv、uv
    • 优缺点
      • 优点
        • 可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统)
        • 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
        • 容错:良好的容错性,节点出现问题SQL仍可完成执行
        • 简单容易上手:提供了类SQL查询语言支持HQL
        • 提供统一的元数据管理
        • 执行延迟较高:处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高
      • 缺点
        • Hive的HQL表达能力有限[由于 Hive 采用了 SQL 的查询语言 HQL,因此很容易将 Hive 理解为数据库]
        • Hive的效率比较低[数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现]
        • Hive可控性差
          • Hive的HQL表达能力有限,比如不支持UPDATE、非等值连接、DELETE、INSERT单条等。
          • 由于Hive自动生成MapReduce作业,HQL调优困难
    • 架构
      • 用户接口
        • 包括命令行(CLI)、客户端(Client)和Web图形化界面(WebGUI)。最常用的是CLI。
      • 元数据存储
        • 通常是Hive的元数据存储在关系数据库如mysql、derby中。
      • 解释器
        • 对输入的HiveQL语句进行词法分析和语法分析,并生成词法分析树
      • 编译器
        • 编译器接收AST作为输入,并将其转换为中间代码表示(Intermediate Representation,IR)。编译器首先对AST进行语法分析和语义检查,以确保查询语句的语法正确且符合语义规则
      • 优化器
        • 根据查询的特性和数据分布情况,对查询计划进行优化,以减少计算成本和提高查询性能。优化器会生成多个可能的执行计划,并选择最优的计划。
      • 执行器
        • 根据查询计划生成MapReduce作业,提交到Hadoop进行计算
      • 存储位置
        • 建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统
    • 工作原理
      • Hive的工作原理简单的说就是一个查询引擎,接收到一个SQL,而后面做的事情包括: 词法分析/语法分析 使用antlr将SQL语句解析成抽象语法树(AST),再将AST转换成逻辑计划[也就是将sql语句转换为MapReduce任务],最后执行计划
    • 数据存储
      • HDFS模型[Hive的数据库对应HDFS的一个目录]
        • Table: 内部表与RDBMS的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据
        • External Table:在创建表的时候可以指定external关键字创建外部表,外部表对应的文件存储在location指定的目录下,向该目录添加新文件的同时,该表也会读取到该文件(当然文件格式必须跟表定义的一致),删除外部表的同时并不会删除location指定目录下的文件,删除的仅仅是一个链接
        • Partition: 分区
        • Bucket : 将表的列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件,将数据被分成块并存储在集群中的不同节点上。这些块被称为也可以成为桶
      • HDFS是Hadoop的分布式文件系统,用于存储和管理大规模数据集
    • 数据交换
      • 命令行模式
      • Web模式
      • 远程服务: 通过 JDBC 等访问来连接 Hive ,这是开发人员最需要的方式
      • 数据交换作用:指将Hive中的数据与其他系统或数据源进行交互和分析处理
    • 支持的计算引擎
      • MapReduce
      • Spark
      • Tez
    • 常踩的坑
      • 字符匹配问题:当字段是字符串型时,where语句=0(int)型来匹配会拉不到数据
      • Llap巨坑:关键是几个空间参数的配置,只要配错了,就会出现各种奇怪的问题,Llap:可以将数据预取、缓存到基于yarn运行的守护进程中,降低和减少系统IO和与HDFS DataNode的交互,提高查询效率
      • Spark应用创建表时,指定的schema版本为1.2.0,而hive的schema版本为2.3.0,版本不兼容导致。在hvie-site.xml中hive.metastore.schema.verification参数设置为false即可解决。
      • hive表中新增字段或者修改字段时,需要使用cascade方式,否则新增字段,回刷数据还是存在为null的情况 、或者删除分区,重新建表,才能解决回刷数据的问题
  • 相关阅读:
    Netty学习(一)——BIO/伪异步IO/NIO/AIO四种IO模型的演变
    【附源码】Python计算机毕业设计数据时代下的疫情管理系统
    MySQL第一弹
    整理自己平时用到的【快捷键】
    cola架构:一种扩展点的实现思路浅析
    解压主播狂揽4000w+播放,快手美食赛道又添新风向?
    死锁的发生与避免
    sql 10
    新的U-Net 网络结构
    docker搭建Jenkins及基本使用
  • 原文地址:https://blog.csdn.net/qq_36204764/article/details/133805895