博主近期在整理各大厂面试题,每天会更新一点,没有答案的题目,表示博主也不知道,有答案的题目也不一定正确,希望各位同学自主判断,如果博主有写错的地方,欢迎在评论区补充

1.spark数据倾斜怎么引起的?该怎么解决?
产生原因:
    RDD的逻辑其实是表示一个对象集合,在物理执行期间,RDD会被分为一系列的分区,每个分区都是整个数据集的子集。当spark调度并运行任务的时候,spark会为每一个分区中的数据车床件一个任务。大部分的任务处理的数据量差不多,但是又少部分的任务处理的数据量很大,从而产生数据倾斜。
    数据倾斜只会发生在shuffle过程中。可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等。使用了这些算子,就有可能会出现数据倾斜。

解决方法:
    1.数据混洗的时候,使用参数的方式为混洗后的RDD指定并行度
    实现原理:提高shuffle操作的并行度,增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据,举例来说,如果原本有5个key,每个key对应10条数据,这5个key都是分配给一个task的,那么这个task就要处理50条数据。而增加了shuffle read task以后,每个task就分配到一个key,即每个task就处理10条数据,那么自然每个task的执行时间都会变短了
    缺点:只是缓解了数据倾斜,没有彻底根除问题。在实际场景中运用较少,如果存在某个key对应的数据量有百万条,甚至更多,那么无论task增加到多少,这百万条的数据都会分配到一个task中处理,注定还是会发生数据倾斜

2.使用随机key实现双重聚合(groupByKey、reduceByKey 比较适合使用这种方式)
    实现原理:将原本相同的key通过附加随机前缀的方式,编程多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果。

3.过滤少数导致倾斜的key
    实现原理:如果我们判断那少数几个数据量特别多的key,对作业的执行和计算结果不是特别重要的话,可以直接过滤掉那少数几个key。将导致数据倾斜的key给过滤掉之后,这些key就不会参与计算了,自然不可能产生数据倾斜。

4.将reduce join 转为mapjoin (小表*大表)
    应用场景:在对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(比如几百M或者一两G),比较适用此方案。
    实现原理:普通的join是会走shuffle过程的,而一旦shuffle,就相当于会将相同key的数据拉取到一个shuffle read task中再进行join,此时就是reduce join。但是如果一个RDD是比较小的,则可以采用广播小RDD全量数据+map算子来实现与join同样的效果,也就是map join,此时就不会发生shuffle操作,也就不会发生数据倾斜。

2.spark集群低带宽怎样从大数据量中找中位数

3.Hadoop组成架构:
    Hadoop是一个由HDFS、MapReduce、Yarn组成的分布式系统基础架构
    HDFS:一个高可靠、高吞吐量的分布式文件系统
    MapReduce:分布式的离线并行计算框架
    YARN:作业调度与集群资源管理的框架

4.Hbase,为什么快,适合什么样的业务?能做聚合操作吗?
    快的原因:Hbase的计算过程中不会启动reduce过程,整个过程只有mapper
    适合业务:
        1. 写密集型应用,每天写入量巨大,而相对读数量较小的应用,比如IM的历史消息,游戏的日志等等
        2. 不需要复杂查询条件来查询数据的应用,HBase只支持基于rowkey的查询,对于HBase来说,单条记录或者小范围的查询是可以接受的,大范围的查询由于分布式的原因,可能在性能上有点影响,而对于像SQL的join等查询,HBase无法支持。
        3. 对性能和可靠性要求非常高的应用,由于HBase本身没有单点故障,可用性非常高。
    可以实现简单的聚合操作

5.hive实现原理
    hive的工作原理是将hql语句转换为MapReduce程序执行

6.hive的优化
    1.慎用api
        慎用可能会造成数据倾斜的api,像是count、join等
    2.自定义UDAF函数优化
    3.设置合理的mapreduce的task数量
    4.小文件合并优化
    5.sql优化
        列剪裁、分区剪裁、针对场景使用合适的语句
    6.使用向量化查询
    7.JVM重用

7.hive什么时候会产生数据倾斜 怎么处理
    进行聚合操作的时候,关键字:join groupBy

8.描述一下zookeeper的选举机制
    服务器启动时期的leader选举
        1.每个Server会发出一个投票。由于是初始阶段,每个Server都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和zxid,然后各自将这个投票发给集群中的其他机器
        2.接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如:检查是否是本轮投票、是否来自Looking状态的服务器
        3.处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK对比,优先检查ZXID,ZXID比较大的服务器优先作为Leader。如果ZXID相同,则比较myid。myid较大的服务器作为Leader服务器。由于此时处于服务器启动的初始阶段,各个服务器的ZXID都相同,所以会比较myid,因此myid小的Server会更新自己的投票为myid大的服务器,然后重新投票,而myid大的服务器无需更新投票,只是再次向集群中的所有机器发出上一次的投票信息即可。
        4.统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,如果有过半的接受到了相同的投票信息,则认为已经选出了Leader。
        5.改变服务器状态。一旦确定了Leader,每个服务器都会更新自己的状态,如果是Foller,则变更为Following,如果是Leader,就变更为leading

服务器运行期间的Leader选举
        1.变更状态。Leader挂后,其他非Observer服务器都会将自己的服务器状态变更为Looking,然后开始进入选举过程
        2.每个Server发出一个投票。在运行期间,每个服务器上的zxid可能不同,所以在第一轮投票中,每个服务器都会将票投给自己,把自己的myid和zxid发送到集群中的所有服务器上。
        3.处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK对比,优先检查ZXID,ZXID比较大的服务器优先作为Leader。如果ZXID相同,则比较myid。myid较大的服务器作为Leader服务器。各个服务器根据PK结果发起新一轮的投票
        4.统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,如果有过半的接受到了相同的投票信息,则认为已经选出了Leader。
        5.改变服务器状态。一旦确定了Leader,每个服务器都会更新自己的状态,如果是Foller,则变更为Following,如果是Leader,就变更为leading

9.描述一下MapReduce的Shuffle阶段
    Map 方法之后,数据首先进入到分区方法,把数据标记好分区,然后把数据发送到 环形缓冲区;环形缓冲区默认大小 100m,环形缓冲区达到 80%时,进行溢写;溢写前对数据进行排序,排序按照对key的索引进行字典顺序排序,排序的手段快排;溢写产生大量溢 写文件,需要对溢写文件进行归并排序;对溢写的文件也可以进行 Combiner 操作,前提是汇总操作,求平均值不行。最后将文件按照分区存储到磁盘,等待 Reduce 端拉取。

10.什么是乐观锁、悲观锁
    
    悲观锁:
        借助数据库锁机制,在修改数据之前先进行锁定,再修改的方式被称之为悲观并发控制,具有强烈的独占和排他特性。这是一种对数据的修改抱有悲观态度的并发控制方式。悲观锁主要分为共享锁或排他锁
        共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改
        排他锁就是不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据行读取和修改的
        悲观锁实际上是"先取锁再访问"的保守策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的机制会让数据库产生额外的开销,还有增加产生死锁的机会。另外还会降低并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数据。
    乐观锁:
        乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。由于乐观并发控制相信事务之间的数据竞争的概率是比较小的,因此知道提交数据的时候才去锁定,所以不会产生死锁的情况

11.Kafka有哪些组件,介绍一下作用
    Partition
        Kafka集群中,一个Topic的多个partitions被分布在多个server上。每个server负责partitions中消息的读写操作。每个partition可以被备份到多台server上,以提高可靠性。
        每一个patition中有一个leader和若干个follower。leader处理patition内所有的读写请求,而follower是leader的候补。如果leader挂了,其中一个follower会自动成为新的leader。每一台server作为担任一些partition的leader,同时也担任其他patition的follower,以此达到集群内的负载均衡。
    Producers
        Producer将消息发送的指定topic中,producer决定将消息发送到哪个partition中。比如基于”round-robin”方式实现简单的负载均衡或者通过其他的一些算法等.
    Consumers
        消息基本上有两种模式:queuing(队列模式) 和 publish-subscribe(发布-订阅模式) , 在队列模式中,consumer池从server中读取消息,每个消息都会到达一个consumer。在发布-订阅模式中,消息被广播到所有的consumer。Kafka提供了consumer group这个抽象概念来概括这两种模式。
        每个consumer属于一个consumer group, 如果consumer group订阅了topic,那么它会接收到该topic发布的每条消息,该消息只会被分配到一个consumer上。consumer实例可以部署在不同的进程或机器上。
        如果所有的consumer都具有相同的group,这种情况和queue模式很像,消息将会在consumers之间负载均衡。
        如果所有的consumer都具有不同的group,那这就是”发布-订阅”,消息将会广播给所有的消费者。
    Guarantees
        在更高的层面,Kafka给出以下保证:
        1) 发送到partitions中的消息将会按照它接收的顺序追加到日志中。
        2) 对于消费者而言,它们消费消息的顺序和log中消息顺序一致。
        3) 如果Topic的”replication factor“为N,那么允许N-1个kafka实例失效。

2020网易大数据开发面试题整理 (提前批) (持续更新)相关推荐

  1. 大数据开发面试题总结-超详细

    1.文件上传: 总结: 客户端上传请求--->namenode检查,返回响应--->客户端真正的文件上传请求,包括文件名,文件大小--->namenode返回上传节点--->客 ...

  2. 2021年超全超详细的最新大数据开发面试题,附答案解析

    版本 时间 描述 V1.0 2020-12-18 创建 V1.2 2021-01-17 新增 spark 面试题 V1.3 2021-01-18 新增 kafka 面试题 V1.4 2021-01-2 ...

  3. 字节跳动大数据开发面试题-附答案

    此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时. 网友情况:985 本硕. 参考答案由本公众号提供.如有错误,欢迎指正! 以下为面试过程中提问,岗位为大数据开发: 自我介绍+项目介绍 为什 ...

  4. 大数据开发面试题必备20题

    问答题: HDFS的组织架构? 由HDFS Client.NameNode.DataNode和Scondary NameNode四部分组成 一个HDFS集群是由一个NameNode和一定数目的Data ...

  5. 金九银十面试怒拿6个offer——测试开发面试题整理

    金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...

  6. 自学it18大数据笔记-第三阶段Spark-day04——会持续更新……

    笔记为自学时随手记录,如有错误,欢迎指正,不胜感激!现已广州转移至上海,欢迎小伙伴们加qq或微博沟通交流(QQ,微博和博客同名) 笔记分享:自学it18大数据笔记-第三阶段Spark-day04--会 ...

  7. 自学it18大数据笔记-第三阶段Scala-day06——会持续更新……

    笔记为自学时随手记录,如有错误,欢迎指正,不胜感激!现已广州转移至上海,欢迎小伙伴们加qq或微博沟通交流(QQ,微博和博客同名) 笔记分享:自学it18大数据笔记-第三阶段Scala-day06--会 ...

  8. 腾讯后台开发面试题--整理1

    可参照这篇博客一起看:http://blog.chinaunix.net/uid-29867011-id-4508083.html linux和os: netstat tcpdump ipcs ipc ...

  9. 【面经】中邮消费金融大数据开发面经

    欢迎点击此处关注公众号. 公司介绍: 中邮消费金融有限公司(以下简称"中邮消费金融")成立于2015年11月,总部设在广州,经中国银行保险监督管理委员会批准成立,由中国邮政储蓄银行 ...

最新文章

  1. darknet-mini:带注释的darknet简化版,助你深入理解YOLO
  2. 文件系统写入100G文件需要多久
  3. 【sprinb-boot】@ComponentScan 使用
  4. java 数组数据类型_java基本数据类型和数组
  5. Adobe Flex Application LifeCycle
  6. 查看被Linux干掉的进程,Linux 查看进程被杀死的详情
  7. 图像检索(一)--综述
  8. 算法竞赛输入输出!!!
  9. Android Dialog详解
  10. 数据仓库——元数据、主数据
  11. 无线通信基础知识14:数字通信之调制
  12. linux安装杀毒软件
  13. pass parameters to view(参数视图)
  14. 阿里云mysql1227_Navicat连接阿里云Mysql遇到的的坑
  15. 计算机国二复习攻略,全国计算机等级考试四级复习纲要二[1]
  16. java spel_Java spring SPEL表达式注入
  17. 热乎乎的宇宙头条校招前端面经
  18. workbench3.2学习笔记三
  19. 使用蛮力法解数字迷(枚举的范围尽可能地小)(C++)(蛮力法)
  20. 对话蔡报永:看Commvault 如何玩转数据管理

热门文章

  1. 图像工程的读书笔记 图像成像过程
  2. DBVisualizer 中文显示乱码
  3. IT66021FN 翻译
  4. 条形碎片图纸的自动拼接规则算法matlab仿真
  5. Win10操作系统语言中文转英文设置步骤
  6. 写给大忙人的建议:如何优雅地速成代码?(教你如何在忙碌中学习新知识)
  7. wine未找到用于支持嵌入html,即将发布的Wine 3.0支持AMD和Intel GPU的Direct3D 11
  8. [野狐行][辅助开发系列课程][2016/4/7][门外系列更新完毕]
  9. 大数据主要有什么用,入行大数据,需要学哪个专业?
  10. android system ui修改,安卓SystemUI.apk文件的修改教程