当前位置: 首页 > news >正文

Java大数据面试实战:Hadoop生态与分布式计算

Java大数据面试实战:Hadoop生态与分布式计算

面试现场:大数据技术终面室

面试官:谢飞机同学,今天我们聚焦大数据处理技术,重点考察Hadoop生态、Spark和Flink框架。 谢飞机:(自信地)面试官好!我可是大数据专家!Hadoop、Spark我都用过,MapReduce程序也写过,还搭过Hive数据仓库呢!


第一轮:Hadoop生态基础

面试官:请详细描述HDFS的读写流程及副本机制,NameNode和DataNode的核心作用是什么? 谢飞机:(眼睛发亮)HDFS写流程是客户端先问NameNode,NameNode说可以写,然后客户端直接和DataNode通信!副本默认存3个,一个本地机架,一个同机架不同节点,一个不同机架!NameNode管元数据,DataNode存数据块! 面试官:(点头)不错。MapReduce的Shuffle过程是怎样的?如何优化Shuffle性能? 谢飞机:Shuffle就是Map输出到Reduce输入的过程!包括分区、排序、合并、分组!优化用Combiner预聚合!压缩中间结果!调大缓冲区!用MapFile代替SequenceFile! 面试官:Hive的内部表和外部表有什么区别?如何优化Hive SQL的执行效率? 谢飞机:(挠头)内部表删表数据也删,外部表删表数据还在!优化用分区表和分桶表!开启MapJoin!并行执行!本地模式!还有用Explain分析执行计划!


第二轮:Spark核心技术

面试官:Spark的RDD、DataFrame和Dataset有什么区别?宽依赖和窄依赖对Shuffle有什么影响? 谢飞机:(快速回答)RDD是弹性分布式数据集,DataFrame有Schema,Dataset是类型安全的DataFrame!宽依赖会导致Shuffle!窄依赖可以流水线执行!宽依赖要分区,用HashPartitioner或RangePartitioner! 面试官:Spark SQL的执行计划优化有哪些手段?Catalyst优化器的工作原理是什么? 谢飞机:谓词下推!列裁剪!常量折叠!Catalyst分四个阶段:解析、分析、优化、物理计划!用规则优化和成本优化!生成最优执行计划! 面试官:如何解决Spark作业中的数据倾斜问题?请列举至少三种方案并说明适用场景。 谢飞机:(语速加快)数据倾斜就是某个Task处理太多数据!方案有:1. 加盐打散!2. 过滤异常数据!3. 自定义分区!4. 广播小表!5. 扩容资源!看情况选方案!


第三轮:Flink流处理

面试官:Flink的状态管理机制是什么?Checkpoint和Savepoint的区别及应用场景是什么? 谢飞机:(眼神飘忽)状态管理就是存计算中间结果!有KeyedState和OperatorState!Checkpoint是自动的,Savepoint是手动的!Checkpoint用于故障恢复,Savepoint用于版本升级! 面试官:Flink的窗口机制有哪些类型?如何处理迟到数据?Watermark的工作原理是什么? 谢飞机:窗口有滚动、滑动、会话窗口!迟到数据用allowedLateness设置容忍时间!Watermark是告诉系统数据到齐了!有序流用AssignerWithPunctuatedWatermarks,乱序流用AssignerWithPeriodicWatermarks! 面试官:如何设计一个实时数据处理平台?Flink与Kafka集成的最佳实践是什么? 谢飞机:(紧张地)用Flink消费Kafka!Exactly-Once保证!设置checkpoint!Kafka分区和Flink并行度一致!用Flink SQL做实时计算!结果存到Redis或Elasticsearch! 面试官:(合上电脑)今天的面试就到这里,请回家等通知。 谢飞机:(松口气)好的!希望能加入大数据团队!


技术点深度解析

一、Hadoop核心原理

  1. HDFS读写流程

    graph TDA[客户端] -->|1.请求写文件| B[NameNode]B -->|2.返回可写DataNode列表| AA -->|3.写入数据块| C[DataNode1]C -->|4.副本复制| D[DataNode2]D -->|5.副本复制| E[DataNode3]C -->|6.确认写入完成| A
    
  2. MapReduce工作流程

    // Map阶段
    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {word.set(itr.nextToken());context.write(word, one);}}
    }// Reduce阶段
    public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}
    }
    

二、Spark性能优化

  1. RDD持久化策略

    // 不同持久化级别对比
    val rdd = sc.textFile("hdfs://path/to/file")// 仅内存,默认策略
    rdd.cache() // 等价于rdd.persist(StorageLevel.MEMORY_ONLY)// 内存+磁盘,溢出时写入磁盘
    rdd.persist(StorageLevel.MEMORY_AND_DISK)// 序列化存储,减少内存占用
    rdd.persist(StorageLevel.MEMORY_ONLY_SER)
    
  2. 数据倾斜解决方案 | 方案 | 实现方式 | 适用场景 | |------|---------|---------| | 加盐打散 | 对key添加随机前缀,分散到不同分区 | key分布极端不均 | | 自定义分区 | 实现Partitioner接口,手动分配热点key | 已知热点key | | 广播小表 | 将小表广播到Executor,避免Shuffle | 大表join小表 | | 采样倾斜key | 对倾斜key单独处理,其余正常处理 | 部分key倾斜 |

三、Flink流处理实战

  1. Watermark生成策略

    // 周期性Watermark生成器
    public class BoundedOutOfOrdernessGenerator implements WatermarkGenerator<Event> {private final long maxOutOfOrderness = 3500; // 3.5秒private long currentMaxTimestamp;@Overridepublic void onEvent(Event event, long eventTimestamp, WatermarkOutput output) {currentMaxTimestamp = Math.max(currentMaxTimestamp, eventTimestamp);}@Overridepublic void onPeriodicEmit(WatermarkOutput output) {output.emitWatermark(new Watermark(currentMaxTimestamp - maxOutOfOrderness - 1));}
    }
    
  2. 状态后端配置

    # Flink配置
    state.backend: rocksdb
    state.checkpoints.dir: hdfs:///flink/checkpoints
    state.savepoints.dir: hdfs:///flink/savepoints
    execution.checkpointing.interval: 30000
    state.backend.rocksdb.localdir: /data/flink/rocksdb
    

面试锦囊:大数据技能已成为Java工程师的重要竞争力,建议重点掌握Hadoop分布式原理、Spark核心概念及Flink流处理模型。准备1-2个完整的大数据项目案例,能清晰阐述数据处理流程和性能优化点,将大幅提升面试通过率。

http://www.dtcms.com/a/300656.html

相关文章:

  • 数据赋能(340)——技术平台——共享平台
  • 不坑盒子:Word里1秒制作“花括号”题目,多音字组词、形近字组词……
  • 零基础学习性能测试第五章:求最佳线程数
  • MySQL 8.0.42创建MGR集群
  • 元宇宙中的“虫洞“:技术实现、应用场景与未来挑战
  • Dify v1.6.0:支持MCP了,为更顺畅的交互打开了大门
  • 【Linux系列】nproc
  • CPA-7-资产减值
  • 墨者:通过手动解决SQL手工注入漏洞测试(MySQL数据库)
  • 握手未来,PostgreSQL认证专家
  • GTP4.0官网版:智能对话与知识引擎,重塑客户服务效率
  • Sql server开挂的OPENJSON
  • USB设备调试
  • 【LeetCode刷题指南】--设计循环队列
  • Java 大视界 -- Java 大数据机器学习模型在电商客户细分与精准营销活动策划中的应用(367)
  • 3D碰撞检测系统 基于SAT算法+Burst优化(Unity)
  • Java面试宝典:MySQL执行原理二
  • MongoDB索引及其原理
  • 接口自动化-logging日志
  • Qt 窗口 工具栏QToolBar、状态栏StatusBar
  • 24点数学游戏(穷举法求解表达式)
  • 基于Matlab自适应阈值分割算法的图像处理研究
  • esp32s3创建rust工程 window成功mac
  • [硬件电路-97]:模拟器件 - 如何通过外部的闭环负反馈,让运算放大器从“暴脾气”、“愣头青”、情绪容易失控者变成“沉着”、“冷静”的精密调控者的?
  • MySQL表的增删改查(基础)
  • 基于鲸鱼算法的三相逆变器分数阶滑模控制参数优化
  • solidity从入门到精通 第六章:安全第一
  • 设备独立性软件-高速缓存与缓冲区
  • 广东省省考备考(第五十八天7.27)——资料分析、数量、判断推理(强化训练)
  • 通过不同坐标系下的两个向量,求解旋转矩阵