分享

2021年最新鲜的面试题整理:亿信华辰

本帖最后由 pig2 于 2021-3-8 17:22 编辑

问题导读

1、spark的共享变量有哪几个?广播变量广播出去之后怎么使用
2、Hive的底层存储和计算方式是什么?
3、讲讲整个数仓的架构,有多少层,每层具体做什么的?
4、Hive的元数据存储在哪?


我们VIP成员很多在2021年春节年前、后,拿到了offer。而且不止一个,有的两个,有的四个,有的六个。这里给我们分享其中一位成员,整理的一家公司的面试题,后续将会陆续发布。

对于问题的答案做了一些完善,而且对于问题如何回答,依据是什么,也整理或者引用了相关文章,也就是说我们面试回答,切忌只背答案,背后没有东西,是经不起追问和质疑的。对于面试我们要正确认识,很多问题的答案都不是唯一的,如何get面试官的问题点,让面试官满意和觉得你厉害,或者说觉得你很有能力,那么你的回答就是一个好的回答。


2021亿信华辰最新面试题继续:

1、spark的共享变量有哪几个?广播变量广播出去之后怎么使用
共享变量两个:broadcast、Accumulator
如何使用:通过brocadcast.value
更详细可参考
Spark系列-共享变量
https://www.aboutyun.com/forum.php?mod=viewthread&tid=8565
点评:【考察编程功底基础知识,通过上面告诉尽量不要复制黏贴代码,如果经常手写代码,这个问题就非常容易】

2、Hive的底层存储和计算方式是什么?
Hive的数据是存储在Hadoop的文件系统中的,Hive为Hadoop提供SQL语句,是Hadoop可以通过SQL语句操作文件系统中的数据。hive是依赖Hadoop而存在的。Hive计算引擎有三种:(1)MaperReudce   Spark   Tez
(2)Hive默认计算引擎是MR,为了提高计算速度,我们可以改为Tez引擎
(3)Hive on spark是计算引擎的升级,很多不会写程序的想处理大数据还得用hive。那hive on spark会比原来的hive计算速度更快,对于开发spark的人来讲无所谓,对于不会开发spark的那就是厉器,让只会写SQL的人也能方便使用spark.
点评:【考察编程功底基础知识,上面其实只要能回答出三个引擎即可,第二点和第三点其实可以更换为自己的理解。】

3、讲讲整个数仓的架构,有多少层,每层具体做什么的?
分层每个公司不太一样,我们公司是分了四层:ODS层、DWD和DWS层、应用层:ODS层:数据仓库源头系统的数据表通常会原封不动地存储一份,这成为ODS(Operation Data Store)层。它们是后续数据仓库层加工数据的来源,同时也存储着历史的增量数据或全量数据。DWD和DWS层:数据仓库明细层(Data Warehouse Detail, DWD)和数据仓库汇总层(Data Warehouse Summery, DWS)是数据平台的主体内容,这两个层的数据是ODS层数据经过ETL清洗、转换、加载生成的。应用层(ADS):应用层主要是各个业务方或者部门基于DWD和DWS建立的数据集市(Data Market, DM),一般来说应用层的数据来源于DW层,而且相对于DW层,应用层只包含部门或者业务方面自己关心的明细层和汇总层的数据。
点评:【考察数据仓库基础知识,这也是必备知识,如果分层都说不上来,那面试基本就挂了,但是分层也没有标准答案,甚至他们的作用不同的场景诠释也可以不同,所以关键是我们有自己的理解。】

4、Hive的元数据存储在哪?你们如何配置的?
Hive将元数据存储在RDBMS中,比如MySQL、Derby中。Hive默认是用Derby数据库,生产我们使用的是MySQL
配置的话需要配置链接url和jdbc驱动
  1. <property>
  2.   <name>javax.jdo.option.ConnectionURL</name>
  3.   <value>jdbc:mysql://localhost:3306/hive_hdp?characterEncoding=UTF-8
  4.                     &createDatabaseIfNotExist=true</value>
  5.   <description>JDBC connect string for a JDBC metastore</description>
  6. </property>
  7. <property>
  8.   <name>javax.jdo.option.ConnectionDriverName</name>
  9.   <value>com.mysql.jdbc.Driver</value>
  10.   <description>Driver class name for a JDBC metastore</description>
  11. </property>
复制代码

还需要mysql驱动jar包mysql-connector-java-5.1.22-bin.jar 拷贝到 $HIVE_HOME/lib/ 目录下。然后编辑/etc/profile文件,将Hive的home目录添加进去。[wyp@wyp conf]$ sudo vim /etc/profile
在里面添加以下语句,当然你得修改Hive的home路径为你自己的
export HIVE_HOME=/home/wyp/Downloads/hive-0.10.0
export PATH=$PATH:$HIVE_HOME/bin
点评:【其实这个也是考察的细节,只要能回答上来有哪些配置项,其实这个回答就很不错,当然如果能回答出来具体的配置项以及配置参数,那会让面试官觉得做事非常认真和注重细节,拿到offer的概率会大大增加。】

5、RDD的依赖关系有哪两个?
做简单的比较。Spark中RDD的高效与DAG(有向无环图)有很大的关系,在DAG调度中需要对计算的过程划分Stage,划分的依据就是RDD之间的依赖关系。RDD之间的依赖关系分为两种,宽依赖(wide dependency/shuffle dependency)和窄依赖(narrow dependency)

宽依赖往往对应着shuffle操作,需要在运行的过程中将同一个RDD分区传入到不同的RDD分区中,中间可能涉及到多个节点之间数据的传输,而窄依赖的每个父RDD分区通常只会传入到另一个子RDD分区,通常在一个节点内完成。当RDD分区丢失时,对于窄依赖来说,由于父RDD的一个分区只对应一个子RDD分区,这样只需要重新计算与子RDD分区对应的父RDD分区就行。这个计算对数据的利用是100%的

当RDD分区丢失时,对于宽依赖来说,重算的父RDD分区只有一部分数据是对应丢失的子RDD分区的,另一部分就造成了多余的计算。宽依赖中的子RDD分区通常来自多个父RDD分区,极端情况下,所有父RDD都有可能重新计算。点评:【回答问题的方式很重要如果说试卷的方式,试卷什么题,我们就回答什么即可,如果面试的过程,可以像上面有所延申,让面试尽量了解我们。】

6、hive的文件存储格式有那几个?你们公司选择哪个存储格式?简单说说为什么?(问到2次)
Hive有四种存储格式:1、TextFile
2、RCFile
3、ORCFile
4、Parquet

我们只是在HIve中存储和查询,使用的是ORC格式。ORC文件代表了优化排柱状的文件格式。ORC文件格式提供了一种将数据存储在Hive表中的高效方法。这个文件系统实际上是为了克服其他Hive文件格式的限制而设计的。Hive从大型表读取,写入和处理数据时,使用ORC文件可以提高性能。点评:【其实回答那种格式不是最重要的,理由反而是关键。】

7、kafka的offset在哪里设置?如何做到不丢数据不重复消费数据
我们offset存储在zookeeper中。Kafka使用同步模式的时候,有3种状态保证消息被安全生产,在配置为1(只保证写入leader成功)的话,如果刚好leader partition挂了,数据就会丢失。还有一种情况可能会丢失消息,就是使用异步模式的时候,当缓冲区满了,如果配置为0(还没有收到确认的情况下,缓冲池一满,就清空缓冲池里的消息),数据就会被立即丢弃掉。在数据生产时避免数据丢失的方法:只要能避免上述两种情况,那么就可以保证消息不会被丢失。就是说在同步模式的时候,确认机制设置为-1,也就是让消息写入leader和所有的副本。还有,在异步模式下,如果消息发出去了,但还没有收到确认的时候,缓冲池满了,在配置文件中设置成不限制阻塞超时的时间,也就说让生产端一直阻塞,这样也能保证数据不会丢失。在数据消费时,避免数据丢失的方法:如果使用了storm,要开启storm的ackfail机制;如果没有使用storm,确认数据被完成处理之后,再更新offset值。低级API中需要手动控制offset值。点评:【kafka根据VIP成员反馈,这个是比较常问的问题,大家对这个问题需要重视,上面答案仅供参考,可以根据自己的理解,写出自己的答案。】

8、kafka如何做到分区数据平衡?
分区策略就是决定生产消息时,如何写入到不同的分区中;kafka提供了默认的分区策略,当然我们也能自定义分区策略(通过指定生产者partitioner.class参数)

kafka提供了三种分区策略:轮询策略、随机策略、按消息键保序策略

(1)、轮询策略
这是默认的分区策略,能够保证消息最大限度的被平均分配到所有分区(2)、随机策略(已经过时了)
也就是生产的消息被随机分配到不同的分区,实际的表现逊于轮询策略;实际上,老的kafka版本用的是随机策略,新的版本已经改成轮询策略了(3)、按消息键保序策略
生产消息时,为每条消息定义消息键key,消息键是一个有着明确含义的业务字符串,可以是业务ID之类的;通过消息键,相同的消息键的消息能被保证写入相同的分区

9、你们有用到CDH集群吗?会自己搭建吗?
我们使用的是CDH集群,搭建过程中网络是个比较耗时的问题,所以我们搭建了自己的私服,这样会更快。同时要注意版本的兼容性。最近还帮我们公司其它工作组搭建了集群。

社区不定期发布2021面试题,想获取最新面试题可加入星球。目前About云VIP金三银四活动,加入星球后,额外+优惠金额元,可以加入About云VIP群。详情可加微信了解。


1.jpg



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条