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

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.xdnf.cn/news/16568.html

相关文章:

  • esp32s3创建rust工程 window成功mac
  • 结构化文本文档的内容抽取与版本重构策略
  • net8.0一键创建支持(Orm-Sqlite-MySql-SqlServer)
  • 【最新最完整】SpringAI-1.0.0开发MCP Server,搭建MCP Client 实战笔记(进阶+详细+完整代码)
  • Map(HashMap、LinkedHashMap、TreeMap)双列集合
  • 【机器学习深度学习】LLaMAFactory评估数据与评估参数解析
  • 《频率之光:危机降临》
  • 下载 | Win11 官方精简版,系统占用空间极少!(7月更新、Win 11 IoT物联网 LTSC版、适合老电脑安装使用)
  • 进度条制作--Linux知识的小应用
  • RabbiteMQ安装-ubuntu
  • Flutter实现列表功能
  • 【lucene】向量搜索底层文件关系梳理
  • git删除远程分支和本地分支
  • WPFC#超市管理系统(2)顾客管理、供应商管理、用户管理
  • docker 自定义网桥作用
  • macOS 安装 Homebrew
  • Vue基础(25)_组件与Vue的内置关系(原型链)
  • 「iOS」————消息传递和消息转发
  • K8S 九 安全认证 TLS
  • 深入理解现代前端开发中的 <script type=“module“> 与构建工具实践
  • Orange的运维学习日记--13.Linux服务管理
  • OpenLayers 综合案例-点位聚合
  • 【通识】线性代数(Linear Algebra)
  • 深度学习在计算机视觉中的应用:对象检测
  • 从 .NET Framework 到 .NET 8:跨平台融合史诗与生态演进全景
  • 设计模式(十一)结构型:外观模式详解
  • ESP32步进电机控制实战:从原理到代码实现
  • JAVA秋招学习指南
  • 【Java实例】服务器IP一站式管理
  • linux 部署 flink 1.15.1 并提交作业