码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • hive高频面试题


    一、Hive中排序的种类和适用场景

    1.1、order by 全局排序

    • 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),所以当输入的数据规模较大时,会导致计算的时间较长
    • 与数据库中 order by的区别在于在 hive 的严格模式下(hive.mapred.mode = strict)下,必须指定 limit ,否则执行会报错!

    1.2、sort by 每个MapReduce排序

    • 不是全局排序,其在数据进入reducer前完成排序,单个有序。
    • sort by 的数据只能保证在同一reduce中的数据可以按指定字段排序
    • 不受 hive.mapred.mode 是否为strict ,nostrict 的影响,使用sort by 你可以指定执行的reduce 个数 (set mapred.reduce.tasks=)

    1.3、distribute by 每个分区排序:

    • 按照指定的字段对数据进行划分输出到不同的reduce中。
    • distribute by类似 MR 中 partition(自定义分区),进行分区,某个特定行应该到哪个 reducer ,通常是为了进行后续的聚集操作
    • distribute by + sort by:
      • 分桶,保证同一字段值只存在一个结果文件当中,结合 sort by 保证 每个 reduceTask 结果有序
      • distribute by 和 sort by 的常见使用场景有:
        1. Map输出的文件大小不均
        2. Reduce输出文件不均
        3. 小文件过多
        4. 文件超大

    1.4 、cluster by

    • 对同一字段分桶并排序,不能和 sort by 连用,除了具有 distribute by 的功能外还兼具 sort by 的功能。
    • 但是排序只能是 升序 排序,不能像distribute by 一样去指定排序的规则为 ASC 或者 DESC 。

    二、Hive的几种存储方式

    • 行式存储:TextFile、SequenceFile
    • 列式存储:ORC、Parquet

    Text File format : 默认格式,数据不做压缩,磁盘开销大,数据解析开销大。压缩后的文件不支持split,Hive不会对数据进行切分

    Sequence File format

    • SequenceFile 是 Hadoop API 提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点
    • SequenceFile 支持三种压缩选择:NONE, RECORD, BLOCK。 Record 压缩率低,一般建议使用 BLOCK 压缩。

    Parquet :

    • 列式数据存储。 查询比较快
    • Parquet支持嵌套的数据模型,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名
    • 二进制方式存储的,是不可以直接读取和修改的。

    ORC : 

    • ORC 将行的集合存储在一个文件中,并且集合内的行数据将以列式存储。采用列式格式,压缩非常容易,从而降低了大量的存储成本。
    • 当查询时,会查询特定列而不是查询整行,因为记录是以列式存储的。
    • ORC 会基于列创建索引,当查询的时候会很快。
    • ORC文件也是以二进制方式存储的,所以是不可以直接读

    三、Hive调优问题(包括数据倾斜和小文件等问题)

    参考:

    Hive调优及优化(包含数据倾斜和小文件问题)_李大寶的博客-CSDN博客

    四、数仓常见问题

    参考:

    数据仓库中基本概念_李大寶的博客-CSDN博客

    五、Hive表的概念

    参考:hive中内部表、外部表、分区表、桶表、拉链表_李大寶的博客-CSDN博客_hive 查看表类型

  • 相关阅读:
    单片机核心/RTOS必备 (ARM汇编)
    一颗小芯片的验证模块划分
    Adobe Premiere基础-编辑素材文件常规操作(脱机文件,替换素材,素材标签和编组,素材启用,便捷调节不透明度,项目打包)(十七)
    LabVIEW避免在使用functional global时内存中有多个大数组的拷贝
    算法进阶-2sat-cf-1657F
    HTTP状态码大全及分类
    (一)JDK、转义字符、数据类型
    用HTML+CSS做一个简单的新闻门户 1页网页
    【VUE项目实战】63、指定打包入口及加载外部CDN资源
    SV--线程(mailbox)
  • 原文地址:https://blog.csdn.net/libaowen609/article/details/126672154
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号