8个Hive数据仓工具面试题锦集!

进入DATE时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行业内高薪的代表。想从事大数据开发需要掌握多种核心技术:Hadoop、Hive、Storm、Spark、Scala等等。而且这些技术知识点已经成为大数据工程师进入职场时面试中必备的考点。这里主要和大家分享一下数据仓库工具hive相关的面试题!



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

答:有3 种 join 方式。

1. 在 reduce 端进行 join,最常用的 join 方式


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


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

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


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

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


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

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

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

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

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’)

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

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

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

hive 如何优化?

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

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

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

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

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

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

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

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

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

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

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


Hive 的 sort by 和 order by 的区别!

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

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

End.

零基础学 Python(送价值109的视频课),来这里
 只需7天时间,跨进Python编程大门,已有3800+加入

【基础】0基础入门python,24小时有人快速解答问题;
【提高】40多个项目实战,老手可以从真实场景中学习python;
【直播】不定期直播项目案例讲解,手把手教你如何分析项目;
【分享】优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。
【人脉】收获一群志同道合的朋友,并且都是python从业者
【价格】本着布道思想,只需 69元 加入一个能保证学习效果的良心圈子。
【赠予】价值109元 0基础入门在线课程,免费送给圈友们,供巩固和系统化复习

我就知道你“在看”

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive数据面试题通常会涉及到Hive的基本概念、数据分区、数据压缩和查询优化等方面的内容。 一个常见的面试题是关于Hive的基本概念,例如: - 请解释一下Hive是什么?它的主要功能是什么? Hive是一个基于Hadoop的数据工具,用于处理大规模结构化数据。它提供了类似于SQL的查询语言来分析和处理数据,并将其转化为MapReduce任务运行在Hadoop集群上。 另一个可能的问题涉及到Hive数据分区: - 请解释一下Hive中的数据分区是什么?它有什么作用? Hive数据分区是将数据按照某个列或列的组合进行划分,以便更高效地进行查询。通过将数据分为多个分区,可以减少查询时需要扫描的数据量,提高查询效率。 还有一个常见的问题是关于Hive中的数据压缩和查询优化: - 请解释一下Hive中的RCFILE和ORC文件格式是如何工作的?它们有什么优势? RCFILE是一种行列存储相结合的方式,将数据按行分块,同一个记录在同一个块上,同时块数据列式存储,有利于数据压缩和快速的列存取。RCFILE在数据加载时性能消耗大,但具有较好的压缩比和查询响应。 ORC文件格式是一种高效的列存储文件格式,通过使用索引和列式存储,可以提供更快的查询速度和更小的存储空间。 最后,你还可以补充提及建表语句的相关内容: - 在Hive中,你可以使用如下建表语句创建一个分区表: create table tablename (id) partitioned by (dt string) 这个语句将创建一个名为tablename的表,其中包含一个名为id的列,并按照dt列进行分区。 这些都是Hive数据库面试中可能涉及到的一些题目和解答,希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [干货|数据工具hive面试题集锦](https://blog.csdn.net/itcastedu/article/details/109505562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值