一、大数据基础理论
1. 什么是大数据?其核心特征是什么?
大数据指无法通过传统软件工具在合理时间内捕获、管理和处理的数据集合,其核心特征(4V)为:
- Volume(体量大):数据量从TB级跃升至PB/EB级,需分布式存储(如HDFS)。
- Velocity(速度快):数据生成与处理需实时性,如流式计算框架(Storm/Flink)。
- Variety(类型多):结构化(数据库)、半结构化(JSON/XML)、非结构化(文本/视频)并存。
- Value(价值密度低):需通过算法(如聚类、分类)挖掘高价值信息。
示例:电商用户行为日志中,单条记录价值低,但通过用户画像分析可提升转化率。
2. 大数据处理流程的典型步骤
- 数据采集:Flume(日志)、Kafka(消息队列)、Sqoop(关系型数据库导入)。
- 数据存储:HDFS(分布式文件系统)、HBase(列式数据库)、Redis(内存缓存)。
- 数据处理:MapReduce(批处理)、Spark(内存计算)、Flink(流批一体)。
- 数据分析与挖掘:Hive(SQL查询)、Pig(脚本语言)、Mahout(机器学习)。
- 数据可视化:Tableau、ECharts、Superset。
建议:面试中可结合具体项目说明各环节技术选型依据。
二、核心技术工具
1. Hadoop生态体系的核心组件
- HDFS:主从架构(NameNode+DataNode),提供高容错性存储,适合大文件存储。
- YARN:资源调度框架,支持MapReduce、Spark等计算框架。
-
MapReduce:分而治之思想,通过Map(拆分)和Reduce(聚合)处理数据。
代码示例(WordCount):// Mapper阶段:统计单词出现次数public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(LongWritable key, Text value, Context context) {String[] words = value.toString().split(" ");for (String w : words) {word.set(w);context.write(word, one);}}}
2. Spark与Hadoop的对比
- 性能:Spark基于内存计算,速度比MapReduce快10-100倍。
- 适用场景:
- Hadoop:离线批处理(如日志分析)。
- Spark:实时计算(如推荐系统)、机器学习(MLlib)。
- 容错机制:Hadoop通过复制数据块容错,Spark通过RDD(弹性分布式数据集)的Lineage恢复。
建议:强调Spark的DAG执行引擎优化了任务调度。
三、应用场景与案例分析
1. 实时数据处理场景
- 技术选型:Kafka(消息队列)+ Flink(流处理)+ HBase(存储)。
- 案例:金融风控系统中,实时监测交易数据,通过Flink的CEP(复杂事件处理)识别欺诈行为。
关键点: - 低延迟(毫秒级)。
- 状态管理(如Flink的State Backend)。
- 反压机制(Backpressure)避免系统过载。
2. 数据仓库与OLAP
- 技术栈:Hive(离线查询)+ Impala(交互式查询)+ Druid(实时分析)。
- 优化策略:
- 分区表(按时间/地区分区)。
- 列式存储(Parquet/ORC)。
- 索引优化(如Hive的Bloom Filter索引)。
示例:电商销售分析中,通过Hive的分区表按日聚合数据,Impala实现秒级查询响应。
四、性能优化与故障排查
1. MapReduce作业优化
- 输入优化:合并小文件(CombineFileInputFormat)。
- Map阶段:调整
mapreduce.task.io.sort.mb参数优化排序内存。 - Reduce阶段:设置
mapreduce.job.reduces合理分区数(通常为节点数的1.5倍)。
工具:使用JStack分析任务卡死原因,通过Ganglia监控集群负载。
2. Spark内存溢出(OOM)解决方案
- 原因:Executor内存不足或数据倾斜。
- 调优参数:
// 设置Executor内存(堆内存+堆外内存)spark.executor.memory=4gspark.memory.offHeap.enabled=true// 处理数据倾斜(如Join时)val skewedKey = "high_frequency_key"val partitionedDF = df.repartition(100, $"key") // 增加分区数
- 数据倾斜处理:对高频Key单独处理或加随机前缀。
五、进阶问题
1. Lambda架构与Kappa架构的对比
- Lambda架构:
- 批处理层(Batch Layer):Hadoop处理历史数据。
- 实时层(Speed Layer):Storm处理增量数据。
- 缺点:代码重复,维护复杂。
- Kappa架构:
- 仅流处理(如Flink),通过重放日志(Replay)修正结果。
- 优点:架构简单,适合实时场景。
选择依据:业务对实时性要求(Kappa)或历史数据准确性(Lambda)。
2. 大数据安全与合规
- 数据加密:HDFS透明加密(HDFS Encryption Zone)。
- 访问控制:Ranger(细粒度权限管理)+ Kerberos(认证)。
- 合规要求:GDPR(欧盟数据保护条例)下的数据匿名化处理。
示例:通过Hive的动态列掩码(Dynamic Column Masking)隐藏敏感字段。
六、面试策略建议
- 技术深度:对常用组件(如HDFS、Spark)的源码级理解(如Spark的Tungsten引擎优化)。
- 项目经验:用STAR法则描述项目(情境-任务-行动-结果),突出技术选型原因。
- 软技能:强调团队协作能力(如跨部门数据治理)和问题解决思维(如通过日志定位Spark任务失败原因)。
总结:大数据面试需兼顾理论深度与实践经验,建议通过LeetCode(大数据专题)、GitHub开源项目(如Spark贡献)提升竞争力。