面试系列一:精选大数据面试真题10道(混合型)-附答案详细解析 (二)

简介: 精选大数据面试真题10道(混合型)-附答案详细解析

第六题:大数据面试题-分布式相关(阿里)


问:说说三种分布式锁?


答:


  1. 基于数据库实现分布式锁:(性能较差,锁表的风险,非阻塞,失败需要轮询耗CPU)


  • 悲观锁


利用select … where … for update 排他锁


注意: 其他附加功能与实现基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。


  • 乐观锁


所谓乐观锁与悲观锁最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有update version失败后才能觉察到。我们的抢购、秒杀就是用了这种实现以防止超卖。


乐观锁是通过增加递增的版本号字段实现的。


  1. 基于缓存(Redis等)实现分布式锁:(过期时间不好控制,非阻塞,失败需要轮询耗CPU)


  • 获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。


  • 获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。


  • 释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。


  1. 基于Zookeeper实现分布式锁:(高可用、可重入、阻塞锁)


大致思想:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,⽣生成⼀个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,⽽而产生的死锁问题。


  • 优点:锁安全性高,zk可持久化,且能实时监听获取锁的客户端状态。一旦客户端宕机,则瞬时节点随之消失,zk因⽽而能第一时间释放锁。这也省去了用分布式缓存实现锁的过程中需要加入超时时间判断的这一逻辑。


  • 缺点:性能开销⽐比较高。因为其需要动态产生、销毁瞬时节点来实现锁功能。所以不太适合直接提供给高并发的场景使用。


  • 实现:可以直接采用zookeeper第三方库curator即可方便地实现分布式锁。


  • 适用场景:对可靠性要求非常高,且并发程度不高的场景下使用。如核心数据的定时全量/增量同步等。


第七题:大数据面试题-Hadoop、Spark相关(京东金融)


问:Hadoop 和 Spark 的相同点和不同点?


答:


Hadoop底层使用MapReduce计算架构,只有map和reduce两种操作,表达能力比较欠缺,而且在MR过程中会重复的读写hdfs,造成大量的磁盘io读写操作,所以适合高时延环境下批处理计算的应用;


Spark是基于内存的分布式计算架构,提供更加丰富的数据集操作类型,主要分成转化操作和行动操作,包括map、reduce、filter、flatmap、groupbykey、reducebykey、union和join等,数据分析更加快速,所以适合低时延环境下计算的应用;


spark与hadoop最大的区别在于迭代式计算模型。基于mapreduce框架的Hadoop主要分为map和reduce两个阶段,两个阶段完了就结束了,所以在一个job里面能做的处理很有限;spark计算模型是基于内存的迭代式计算模型,可以分为n个阶段,根据用户编写的RDD算子和程序,在处理完一个阶段后可以继续往下处理很多个阶段,而不只是两个阶段。所以spark相较于mapreduce,计算模型更加灵活,可以提供更强大的功能。


但是spark也有劣势,由于spark基于内存进行计算,虽然开发容易,但是真正面对大数据的时候,在没有进行调优的情况下,可能会出现各种各样的问题,比如OOM内存溢出等情况,导致spark程序可能无法运行起来,而mapreduce虽然运行缓慢,但是至少可以慢慢运行完。


第八题:大数据面试题-Yarn相关(特斯拉)


问:一个应用程序是如何在 Yarn 集群上执行的?


答:


当 jobclient 向YARN提交一个应用程序后,YARN将分两个阶段运行这个应用程序:一是启动ApplicationMaster;第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,监控运行直到结束。


具体步骤如下:


  1. 用户向YARN提交一个应用程序,并指定ApplicationMaster程序、启动ApplicationMaster的命令、用户程序。


  1. RM为这个应用程序分配第一个Container,并与之对应的NM通讯,要求它在这个Container中启动应用程序ApplicationMaster。


  1. ApplicationMaster向RM注册,然后拆分为内部各个子任务,为各个内部任务申请资源,并监控这些任务的运行,直到结束。


  1. AM采用轮询的方式向RM申请和领取资源。


  1. RM为AM分配资源,以Container形式返回。


  1. AM申请到资源后,便与之对应的NM通讯,要求NM启动任务。


  1. NodeManager为任务设置好运行环境,将任务启动命令写到一个脚本中,并通过运行这个脚本启动任务。


  1. 各个任务向AM汇报自己的状态和进度,以便当任务失败时可以重启任务。


  1. 应用程序完成后,ApplicationMaster向ResourceManager注销并关闭自己。


第九题:大数据面试题-数据质量相关(蚂蚁金服)


问:数据质量怎么监控?


答:


如一张表的记录数在一个已知的范围内,或者上下浮动不会超过某个阈值:


  1. SQL结果:var 数据量 = select count(*)from 表 where 时间等过滤条件


  1. 报警触发条件设置:如果数据量不在[数值下限, 数值上限], 则触发报警


  1. 同比增加:如果((本周的数据量 -上周的数据量)/上周的数据量*100)不在 [比例下线,比例上限],则触发报警


  1. 环比增加:如果((今天的数据量 - 昨天的数据量)/昨天的数据量*100)不在 [比例下线,比例上限],则触发报警


  1. 报警触发条件设置一定要有。如果没有配置的阈值,不能做监控


日活、周活、月活、留存(日周月)、转化率(日、周、月)GMV(日、周、月)
复购率(日周月)


单表空值检测


某个字段为空的记录数在一个范围内,或者占总量的百分比在某个阈值范围内


  1. 目标字段:选择要监控的字段,不能选“无”


  1. SQL结果:var 异常数据量 = select count(*) from 表 where 目标字段 is null


  1. 单次检测:如果(异常数据量)不在[数值下限, 数值上限],则触发报警


单表重复值检测


一个或多个字段是否满足某些规则


  1. 目标字段:第一步先正常统计条数;select count(*) form 表;


  1. 第二步,去重统计;select count(*) from 表 group by 某个字段


  1. 第一步的值和第二步的值做减法,看是否在上下线阀值之内


  1. 单次检测:如果(异常数据量)不在[数值下限, 数值上限], 则触发报警


跨表数据量对比


主要针对同步流程,监控两张表的数据量是否一致


  1. SQL结果:count(本表) - count(关联表)


  1. 阈值配置与“空值检测”相同


第十题:大数据面试题-海量数据相关(百度)


问:在海量日志数据中,提取出某日访问百度次数最多的那个IP


答:这类问题都归为求Top K的问题,解决方法都差不多。


将这一天访问百度的日志的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用 HashMap 进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中找出那个频率最大的IP,即为所求。


算法思想:分而治之+Hash


  1. IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;


  1. 可以考虑采用分而治之的思想,按照IP地址的Hash(IP) % 1024值,把海量IP日志分别存储到1024个


小文件中,这样每个小文件最多包含4MB个IP地址; 这里解释一下为什么用Hash(IP) % 1024值,如果不用,而直接分类的话,可能会出现这样一种情况,就是有个IP在每个小文件中都存在,而且这个IP并不一定在那个小文件中是数量最多的,那么最终可能选择的结果会有问题,所以这里用了Hash(IP)%1024值,这样的话,通过计算IP的Hash值,相同IP肯定会放到一个文件中,当然了不同的IP的Hash值也可能相同,就存在一个小文件中。


  1. 对于每一个小文件,可以构建一个IP为key,出现的次数为value的HashMap,同时记录当前出现次数最多的那个IP地址;


  1. 可以得到1024个小文件中的出现次数最多的那个IP,再依据常规的排序算法得出总体上出现次数最多的IP。
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7天前
|
分布式计算 监控 大数据
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
21 1
《吊打面试官》- 大数据工程师50道中大厂面试真题保姆级详解
|
13天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
27 3
|
13天前
|
分布式计算 Java 大数据
MaxCompute产品使用合集之大数据计算MaxCompute外部表映射了oss中的csv文件,看到"\N"被解析为"N",是什么原因
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
14天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在开发环境中配置MaxCompute参数进行调度,但参数解析不出来,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
19天前
|
存储 算法 Java
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
47 3
|
20天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103482 1
|
23天前
|
数据采集 机器学习/深度学习 数据挖掘
Python数据清洗与预处理面试题解析
【4月更文挑战第17天】本文介绍了Python数据清洗与预处理在面试中的常见问题,包括Pandas基础操作、异常值处理和特征工程。通过示例代码展示了数据读取、筛选、合并、分组统计、离群点检测、缺失值和重复值处理、特征缩放、编码、转换和降维。强调了易错点,如忽视数据质量检查、盲目处理数据、数据隐私保护、过度简化特征关系和忽视模型输入要求。掌握这些技能和策略将有助于在面试中脱颖而出。
33 8
|
25天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
35 0
|
25天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
22 0
|
1月前
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
49 4

热门文章

最新文章

推荐镜像

更多