- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
(2025年)京东大数据开发高频面试题及答案
1.请详细描述HDFS的读写流程,并说明NameNode如何管理元数据?
HDFS写流程:客户端通过FileSystemAPI调用create()方法,向NameNode发送创建文件请求,NameNode检查文件是否存在、权限是否合法后返回确认。客户端将文件分块(默认128MB),通过DataStreamer与NameNode协商确定目标DataNode(遵循副本放置策略:第一个副本在本地节点,第二个在另一机架,第三个在第二个副本的机架但不同节点),建立Pipeline(数据传输通道)。客户端将数据以Packet(64KB)为单位写入Pipeline,每个DataNode接收后校验并传递给下一个节点,最终返回确认ACK。当一个Block写入完成,客户端通知NameNode更新元数据(记录Block与DataNode的映射)。全部Block写入完成后,客户端调用complete()通知NameNode文件写入成功。
HDFS读流程:客户端调用open()方法获取FSDataInputStream,NameNode返回文件的Block列表及对应DataNode位置(优先选择本地节点或同机架节点)。客户端直接与DataNode建立连接,按顺序读取Block数据(支持流式读取,无需一次性加载所有Block信息),若读取失败则尝试其他副本。
NameNode元数据管理:元数据以FsImage(内存镜像)和EditLog(操作日志)形式存储。启动时,NameNode将FsImage加载到内存,重放EditLog恢复最新元数据状态,同时提供新的EditLog。为避免EditLog过大,SecondaryNameNode定期执行Checkpoint:将FsImage与EditLog合并提供新的FsImage,上传至NameNode,替换旧版本。元数据仅存储文件目录结构、Block与文件的映射、Block的副本位置,不存储文件内容。
2.简述SparkRDD的五大特性及宽依赖与窄依赖的区别,如何利用依赖关系优化作业执行?
RDD五大特性:
(1)分区列表:RDD由多个分区组成,分区数决定并行度;
(2)依赖关系:每个分区依赖于父RDD的一组分区(窄依赖或宽依赖);
(3)计算函数:对每个分区应用compute函数提供数据;
(4)分区器(可选):用于键值对RDD,决定数据如何分区(如HashPartitioner);
(5)优先位置(可选):计算时优先选择数据所在的节点(如HDFS块的位置)。
宽依赖与窄依赖区别:
窄依赖:一个子分区仅依赖父RDD的少量分区(如map、filter、union),数据无需跨节点传输,可在一个Stage内流水线计算;
宽依赖:一个子分区依赖父RDD的多个分区(如groupByKey、reduceByKey),需Shuffle操作跨节点传输数据,会触发新的Stage。
优化应用:通过依赖关系划分Stage(宽依赖作为Stage的边界),窄依赖的Stage可合并为流水线计算,减少数据落盘;宽依赖的Shuffle阶段需优化分区数、缓存中间结果(如使用persist(StorageLevel.DISK_ONLY))、调整并行度(避免数据倾斜)。例如,在聚合操作前使用coalesce减少分区数,或在reduceByKey前使用mapPartitions进行本地预聚合,降低Shuffle数据量。
3.Flink中事件时间(EventTime)、处理时间(ProcessingTime)、摄入时间(IngestionTime)的区别是什么?如何处理乱序数据?
事件时间:数据提供的时间(如日志中的时间戳字段),反映业务实际发生时间,需从数据中提取时间戳;
处理时间:数据被Flink算子处理的系统时间,受集群性能影响,实时性高但准确性低;
摄入时间:数据进入Flink数据源(如Kafka)的时间,由Source节点记录,介于事件时间与处理时间之间,无需手动提取时间戳,但无法处理数据源到Flink之间的延迟。
乱序数据处理:基于事件时间需结合Watermark(水位线)机制。Watermark表示“当前时间之前的所有数据已到达”,计算公式为Watermark=当前最大事件时间-延迟时间(允许的最大乱序时间)。当算子接收到数据的事件时间小于Watermark时,视为迟到数据,处理方式包括:
(1)丢弃(默认);
(2)使用SideOutput收集迟到数据,后续单独处理;
(3)调整Watermark的延迟时间(如设置为30秒,允许数据最多迟到30秒)。
示例:电商实时监控中,用户点击事
您可能关注的文档
- (2025年)(完整版)社区网格员笔试考试题库(附答案).docx
- (2025年)《中华人民共和国节约能源法》全国知识竞赛参考答案.docx
- (2025年)access笔试题及答案.docx
- (2025年)艾滋病孕产妇分娩期管理理论知识试题及答案.docx
- (2025年)安全生产考试题库(有限空间作业安全)模拟试题及答案.docx
- (2025年)穿脱防护服试题及答题答案.docx
- (2025年)道路运输发展中心城镇公益性岗位人员招聘公笔试备考试题含答案.docx
- (2025年)儿科重点护理师考试题及答案.docx
- (2025年)二级国家计算机考试题及答案.docx
- (2025年)二级建造师建筑工程实务真题及答案.docx
原创力文档


文档评论(0)