• 数据仓库工具hive面试题集锦


    大数据技术成为互联网发展的核心要素之一,想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。

    这些技术知识点已经成为大数据工程师,进入职场时面试中必备的考点。今天,和大家分享一些数据仓库工具hive相关的面试题!

     1. Hive 的join有几种方式,怎么实现join的?

    有3种join方式:

    ① 在 reduce 端进行 join,最常用的 join 方式。

    Map端的主要工作:为来自不同表(文件)的 key/value 对打标签以区别不同来源的记录。然后用连接字段作为 key,其余部分和新加的标志作为 value,最后进行输出。

    reduce 端的主要工作:在 reduce 端以连接字段作为 key 的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录 (在 map 阶段已经打标志)分开,最后进行笛卡尔。

    ② 在 map 端进行 join,使用场景:一张表十分小、一张表很大。

    在提交作业的时候先将小表文件放到该作业的 DistributedCache 中,然后从 DistributeCache 中取出该小表进行 join key / value 解释分割放到内存中(可以放大 Hash Map 等等容器中)。然后扫描大表,看大表中的每条记录的 join key /value 值是否能够在内存中找到相同 join key 的记录,如果有则直接输出结果。

    ③ SemiJoin,semijoin 就是左边连接是 reducejoin 的一种变种,在 map 端过滤掉一些数据,在网络传输过程中,只传输参与连接的数据,减少了 shuffle的网络传输量,其他和 reduce的思想是一样的。

    实现:将小表中参与 join 的 key 单独抽取出来通过 DistributeCache 分发到相关节点,在 map 阶段扫描连接表,将 join key 不在内存 hashset 的纪录过滤掉,让参与 join 的纪录通过 shuffle 传输到 reduce 端进行 join,其他和 reduce join 一样。

     2. hive 内部表和外部表的区别?

    内部表:

    建表时会在 hdfs 创建一个表的存储目录,增加分区的时候,会将数据复制到此location下,删除数据的时候,将表的数据和元数据一起删除。

    外部表:

    一般会建立分区,增加分区的时候不会将数据移到此表的 location下,删除数据的时候,只删除了表的元数据信息,表的数据不会删除。

     3. hive 是如何实现分区的?

    建表语句:

    create table tablename (id) partitioned by (dt string)

    增加分区:

    alter table tablenname add partition (dt = ‘2016-03-06’)

    删除分区:

    alter table tablename drop partition (dt = ‘2016-03-06’)

     4. Hive 有哪些方式保存元数据,各有哪些优缺点?

    ① 存储于 derby 数据库,此方法只能开启一个hive客户端,不推荐使用

    ② 存储于mysql数据库中,可以多客户端连接,推荐使用。

     5、 hive 如何优化?

    ① join 优化,尽量将小表放在 join 的左边,如果一个表很小可以采用 mapjoin。

    ② 排序优化,order by 一个 reduce 效率低,distirbute by +sort by 也可以实现全局排序。

    ③ 使用分区,查询时可减少数据的检索,从而节省时间。

     6. hive 中的压缩格式 RCFile、 TextFile、 SequenceFile 各有什么区别?

    TextFile:默认格式,数据不做压缩,磁盘开销大,数据解析开销大;

    SequenceFile:Hadoop API提供的一种二进制文件支持,使用方便,可分割,可压缩,支持三种压缩,NONE,RECORD,BLOCK;

    RCFILE:是一种行列存储相结合的方式。首先,将数据按行分块,保证同一个 record 在同一个块上,避免读一个记录读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。数据加载的时候性能消耗大,但具有较好的压缩比和查询响应。

     7. hive 相对于Oracle来说有那些优点?

    ① 存储,hive 存储在 hdfs 上,oracle 存储在本地文件系统。

    ② 扩展性,hive 可以扩展到数千节点,oracle 理论上只可扩展到 100 台左右。

    ③ 单表存储,数据量大 hive 可以分区分桶,oracle 数据量大只能分表。

     8. Hive 的 sort by 和 order by 的区别?

    order by:

    会对输入数据做全局排序,只有一个 reduce,数据量较大时,很慢。

    sort by:

    不是全局排序,只能保证每个 reduce 有序,不能保证全局有序,需设置mapred.reduce.tasks>1。

  • 相关阅读:
    NFT游戏开发 链游开发 区块链游戏开发
    性能测试工具Loadrunner以及性能测试的流程以及每一个步骤的流程和结果分析
    ROS 学习应用篇(九)ROS中launch文件的实现
    6.13 - 特殊含义的IP地址
    E2. Divisible Numbers (hard version)(数论)
    马老师力荐:腾讯 SpringBoot 高阶笔记,限时开源
    电脑为什么会卡、CPU和内存的重要性、选哪个好呢?
    Laravel定时任务
    为什么在经济低迷期更需要投资需求管理软件
    01--nginx基础
  • 原文地址:https://blog.csdn.net/Blue92120/article/details/126724537