大数据运维面试题及答案
一、基础理论与技术栈
Hadoop 核心组件及各自作用是什么?答案:核心为 “3 大组件”。- HDFS:分布式文件系统,负责海量数据的存储,分 NameNode(管理元数据)和 DataNode(存储实际数据);- YARN:资源调度框架,分配 CPU、内存等资源给计算任务;- MapReduce:分布式计算模型,将任务拆解为 Map(拆分数据)和 Reduce(汇总计算)两阶段处理。
HDFS 中 NameNode 与 SecondaryNameNode 的区别?答案:- NameNode:集群 “大脑”,管理元数据(文件目录、块位置),实时响应客户端请求,数据存于内存,元数据镜像(fsimage)和编辑日志(edits)持久化到磁盘;- SecondaryNameNode:非备份(NameNode 备份需手动配置),主要功能是合并 fsimage 和 edits,生成新镜像并发送给 NameNode,减轻其磁盘 IO 压力,避免 edits 日志过大。
Spark 与 MapReduce 相比,优势是什么?答案:核心优势是 “基于内存计算”。- 速度快:中间计算结果存于内存,避免 MapReduce 反复读写磁盘,相同任务耗时通常仅为 MapReduce 的 1/10~1/5;- 易用性高:支持 Scala/Python/Java 等多语言,API 更简洁,还提供 Spark SQL(SQL 操作)、Spark Streaming(流处理)等组件,场景覆盖更广;- 容错性强:通过 RDD 的 “ lineage(血缘)” 机制,任务失败时可快速重算,无需从头执行。
二、运维实操与问题排查
HDFS 集群出现 DataNode 心跳丢失,如何排查?答案:按 “网络→进程→配置→日志” 步骤排查。1. 检查网络:用
ping测试 NameNode 与故障 DataNode 连通性,telnet或nc验证 DataNode 心跳端口(默认 50020)是否开放;2. 检查进程:在 DataNode 节点执行jps命令,确认 DataNode 进程是否存活,若未存活,查看启动日志(默认$HADOOP_HOME/logs/hadoop-*-datanode-*.log);3. 检查配置:确认 DataNode 的hdfs-site.xml中dfs.namenode.rpc-address配置是否正确(指向 NameNode 地址),且dfs.data.dir目录权限是否为hadoop用户(或集群指定用户);4. 检查磁盘:查看 DataNode 存储目录(dfs.data.dir)所在磁盘是否满(df -h),或磁盘损坏(dmesg | grep error)。Spark 任务执行缓慢,可能的原因及优化方案?答案:常见原因及对应优化:- 资源不足:YARN 分配给 Spark 的内存(
--executor-memory)或 CPU 核数(--executor-cores)不足,需根据任务数据量调整资源参数,避免资源争抢;- 数据倾斜:部分 Key 对应的数据量过大,导致个别 Executor 过载,解决方案:① 对倾斜 Key 进行拆分(如加随机前缀);② 使用repartition或coalesce重新分区,平衡数据分布;- Shuffle 优化:Shuffle 阶段磁盘 IO 高,可开启 Shuffle 内存管理(spark.shuffle.memoryFraction调整比例),或使用kyro序列化(减少数据传输大小);- 数据格式:避免使用文本格式(如 TXT),改用 Parquet/Orc 等列式存储格式,减少 IO 量。如何监控大数据集群(Hadoop/Spark)的运行状态?答案:主流方案分 “原生工具” 和 “第三方工具”。- 原生工具:① Hadoop/YARN 自带 Web UI(NameNode 默认 50070 端口,ResourceManager 默认 8088 端口),可查看集群节点、资源使用、任务进度;② Spark UI(任务运行时默认 4040 端口),查看 Executor 状态、任务执行详情;- 第三方工具:① Prometheus + Grafana:通过 Exporter(如 hadoop-exporter、spark-exporter)采集集群指标(CPU、内存、磁盘、任务延迟等),Grafana 可视化展示并设置告警;② Zabbix/Nagios:监控节点存活、磁盘空间、进程状态等基础指标,支持邮件 / 短信告警;③ Cloudera Manager/Ambari:集群管理平台,集成监控、部署、运维功能,适合大型集群。
三、进阶与架构设计
Hadoop 集群如何实现高可用(HA)?核心组件是什么?答案:Hadoop HA 主要解决 NameNode 单点故障问题,核心依赖 ZooKeeper。1. 架构组成:- 2 个 NameNode(Active 活跃节点、Standby 备用节点),实时同步元数据(通过 JournalNode 集群,默认 3 个节点,存储 edits 日志,Active 写入、Standby 读取以保持元数据一致);- 故障检测:ZooKeeper 监控 NameNode 状态,Active 节点通过 ZK 持有 “锁”,若 Active 故障(如进程挂掉、网络断连),ZK 释放锁,Standby 竞争锁成功后切换为 Active;- 数据节点:DataNode 同时向 2 个 NameNode 发送心跳,避免切换后数据节点重新注册。
大数据集群中,如何处理数据备份与容灾?答案:分 “数据备份” 和 “集群容灾” 两层。- 数据备份:① HDFS 副本机制:通过
dfs.replication配置副本数(默认 3),数据块自动存于不同节点(同机架 1 个,异机架 2 个),避免单节点 / 机架故障丢失数据;② 跨集群备份:通过distcp工具将生产集群数据定时同步到备用集群(如每天凌晨同步前一天数据),或使用 HBase 复制(Replication)功能实现实时数据同步;- 集群容灾:① 同城双活:生产集群与备用集群部署在同一城市不同机房,通过同步工具保持数据一致,故障时快速切换流量;② 异地容灾:备用集群部署在不同城市,用于应对地震、洪水等区域性灾难,数据同步周期可放宽(如每小时同步),优先保证数据不丢失。
