简介:本文汇总了100道Hadoop高频面试题及答案解析,涵盖HDFS、MapReduce、YARN等核心组件,结合理论要点与实战案例,为开发者提供系统化的备考指南。
Hadoop生态包含三大核心组件:HDFS(分布式存储)、YARN(资源管理)和MapReduce(计算框架)。
写入流程:
读取流程:
Shuffle是MapReduce的核心优化环节,分为四个阶段:
Map端:
<key, value>对到环形内存缓冲区(默认100MB)。 Reduce端:
io.sort.mb参数控制缓冲区大小,自定义Partitioner实现数据倾斜处理。YARN支持三种调度器:
生产环境推荐Capacity Scheduler,通过队列隔离保障关键任务资源。
<property><name>yarn.scheduler.capacity.root.queues</name><value>dev,prod</value></property><property><name>yarn.scheduler.capacity.root.dev.capacity</name><value>30</value></property>
写入优化:
dfs.blocksize(如256MB)减少元数据开销。 dfs.replication为2(非关键数据)或4(高可用场景)。 dfs.client.read.shortcircuit)。 读取优化:
hdfs dfs -getmerge合并小文件。 dfs.datanode.handler.count增加处理线程数。mapreduce.map.memory.mb和mapreduce.map.java.opts。 yarn.nodemanager.disk-health-checker.min-healthy-disks配置。HBase依赖HDFS存储数据文件(HFile),通过RegionServer处理读写请求:
hbase.regionserver.global.memstore.size控制内存使用。 hbase.hregion.majorcompaction定期合并小文件。 HDFS HA:
yarn.resourcemanager.ha.enabled=true。 yarn.resourcemanager.recovery.enabled=true)。Mapper阶段:提取URL并统计访问次数
public class URLMapper extends Mapper<LongWritable, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text url = new Text();public void map(LongWritable key, Text value, Context context) {String[] parts = value.toString().split("\t");url.set(parts[1]); // 假设URL在第二列context.write(url, one);}}
Reducer阶段:汇总相同URL的计数
public class URLReducer extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values, Context context) {int sum = 0;for (IntWritable val : values) {sum += val.get();}context.write(key, new IntWritable(sum));}}
优化点:使用Combiner减少网络传输,设置mapreduce.job.reduces=20并行处理。
排查步骤:
yarn logs -applicationId <app_id>)。 SPILLED_RECORDS过高可能需调整内存)。 hdfs dfs -df -h)。TaskId failed: java.lang.OutOfMemoryError:增加mapreduce.map.memory.mb。 Container killed by YARN for exceeding memory limits:调整yarn.scheduler.maximum-allocation-mb。 本文精选的100道面试题覆盖Hadoop从入门到进阶的核心知识点,建议开发者结合实际项目经验理解每个问题的应用场景。面试前可重点复习Shuffle机制、资源调度策略和故障排查流程,同时通过动手实验(如搭建伪分布式集群)加深理解。