当前位置: 首页 > 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.lryc.cn/news/601148.html

相关文章:

  • 数据权属雷区:原始数据与衍生数据的法律边界如何划清?
  • AI与区块链Web3技术融合:重塑数字经济的未来格局
  • ROS2入门到精通教程(三)快速体验
  • Linux vimgrep 详解
  • VGG 改进:融合CNN与Transformer的VGG模型
  • vmware虚拟机中显示“网络电缆被拔出“的解决方法
  • 【面板数据】中国A股上市公司制造业智能制造数据集(1992-2024年)
  • 从稀疏数据(CSV)创建非常大的 GeoTIFF(和 WMS)
  • 【温度传感器】热电偶、热敏电阻、热电阻、热成像仪原理及精度解析
  • 立式加工中心X-Y轴传动机械结构设“cad【6张】三维图+设计说明书
  • Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 基于springboot的在线数码商城/在线电子产品商品销售系统的设计与实现
  • 06-ES6
  • Effective C++ 条款04:确定对象被使用前已先被初始化
  • 【C++】定义常量
  • HTTPS的基本理解以及加密流程
  • 基于图神经网络的星间路由与计算卸载强化学习算法设计与实现
  • C++___快速入门(上)
  • 人形机器人_双足行走动力学:弹性势能存储和步态能量回收
  • LeetCode|Day26|191. 位 1 的个数|Python刷题笔记
  • hot100-每日温度
  • MyBatis-Plus 通用 Service
  • 睡眠函数 Sleep() C语言
  • 缓存一致性:从单核到异构多核的演进之路
  • [RPA] 日期时间练习案例
  • 免费 PDF 转 Word 工具:无水印 / 支持批量转换,本地运行更安全【附工具下载】
  • Python day25
  • 数字化转型 - 企业数字化建设的几点思考
  • Redis的下载和安装(Linux)
  • 学习随笔录