大数据运维(1)
Ambari Server/Agent存活状态、心跳延迟;集群节点时间同步偏差(≤5s)、核心端口监听状态、组件日志磁盘占用率、Kerberos认证状态。
HDP Hadoop大集群高级运维工程师(含Prometheus+Grafana监控专项)完整版面试题
先了解不常见重要组件概念
1、JournalNode(JN)作用
一句话:主备 NameNode 之间的 “共享日志中间件”,保证元数据一致。
负责存放 HDFS 的 edits(元数据操作日志) 日志
Active NameNode 把所有写操作 写到 JournalNode
Standby NameNode 从 JournalNode 拉取日志、同步元数据
保证主备 NameNode 内存里的元数据完全一致
只有过半 JournalNode 写入成功,操作才算成功(防止脑裂)
2、ZKFailoverController(ZKFC)作用
一句话:NameNode 的 “自动切换管家”,负责监控、选主、防脑裂。
ZKFC 是独立进程,跟 NameNode 一一对应部署。
它做 3 件最核心的事:
健康监控定时检查本机 NameNode 是否存活、是否正常。
抢主(选举 Active)去 ZooKeeper 抢锁谁抢到锁,谁的 NameNode 变成 Active。
Fencing(隔离旧主,防脑裂)切换前会强制把旧 Active NameNode 踢掉,确保同一时间只有一个 Active。避免双主导致数据错乱。
超级好记总结(面试直接背)
JournalNode:同步元数据,保证主备一致。
ZKFC:监控、选主、隔离,保证 HA 自动切换、不脑裂。
3、
execution.checkpointing.interval: 5000ms
execution.parallelism: 20
state.checkpoints.dir: hdfs:///flink/checkpoints/trajectory-job
execution.checkpointing.mode: EXACTLY_ONC //数据一致性,故障恢复时确保数据只处理一次
第一部分 HDP Hadoop核心运维(必问基础+进阶)
一、HDFS HA & NameNode高可用(必问)
-
问题:HDP中HDFS HA架构用到哪些组件? 答案:NameNode、JournalNode、ZooKeeper、ZKFailoverController(ZKFC)。
-
问题:NameNode主备切换流程? 答案:ZKFC监控NameNode状态 → Active节点异常宕机/卡顿 → Standby通过ZooKeeper抢占主节点资格 → 执行fencing隔离旧Active节点 → Standby切换为Active对外提供服务。
-
问题:如何防止HDFS HA脑裂? 答案:QJM保证同一时间仅一个NameNode可写入edits日志;ZKFC提供fencing隔离机制,杜绝双主节点。
-
问题:NameNode内存如何规划?大集群优化方案? 答案:每100万个Block约占1GB内存;大集群配置64G~128G堆内存,-Xms与-Xmx设为等值,开启JVM并行GC,减少小文件数量降低内存压力。
-
问题:NameNode出现FGC卡顿如何排查? 答案:查看GC日志分析回收频率 → 统计Block数量与小文件占比 → 检查editlog写入速度与磁盘IO瓶颈 → 排查元数据目录权限与磁盘空间。
-
问题:DataNode批量掉线常见原因及排查思路? 答案:原因:磁盘满/坏盘、网络不通、节点时间不同步、DataNode OOM、服务器宕机;排查:查看DN日志、iostat监控磁盘、检查时钟同步、排查JVM内存配置。
-
问题:出现missing block/坏块如何处理? 答案:执行hdfs fsck /检测坏块 → 有副本则触发集群自动恢复 → 无副本从备份恢复数据或删除失效文件 → 定位副本丢失原因(磁盘故障、节点掉线)。
-
问题:如何定位慢盘、坏盘? 答案:iostat查看磁盘IO负载与响应时间 → dmesg查看系统磁盘硬件错误 → 分析DataNode日志读写异常 → 检测磁盘挂载点与RAID状态。
-
问题:HDFS写入延迟高如何优化? 答案:优化磁盘RAID配置 → 调整副本节点分布避免跨网段 → 增加写线程数 → 关闭冗余校验功能 → 合理设置Block大小(128M/256M)。
二、YARN资源调度与任务异常(高频)
-
问题:HDP大集群默认调度器及优势? 答案:Capacity Scheduler(容量调度器);支持多队列资源隔离、按业务分配最小/最大容量、优先级调度,适配多租户大集群场景。
-
问题:任务一直ACCEPTED但不运行的原因? 答案:集群资源不足、队列已满、NodeManager异常、节点被拉黑、任务内存/CPU超出队列上限、用户资源配额超限。
-
问题:Container被杀死,exit code 137是什么问题? 答案:容器内存溢出OOM,被NodeManager强制杀死;需调大Container内存配置,排查任务数据倾斜导致内存暴涨。
-
问题:YARN多租户队列如何规划? 答案:按业务/部门划分根队列 → 配置单队列最小容量保障、最大容量限制 → 设定单用户资源配额与最大应用数 → 开启权限隔离与优先级调度。
-
问题:任务运行慢、数据倾斜如何处理? 答案:定位倾斜Key → 提高Reduce并行度 → 使用Combiner预聚合减少数据传输 → 拆分大文件、打散倾斜数据 → 优化Shuffle阶段参数。
-
问题:NodeManager掉线常见原因? 答案:节点宕机、磁盘满、系统CPU/内存耗尽、网络中断、YARN配置错误、NM进程OOM。
三、ZooKeeper高可用运维
-
问题:ZooKeeper集群为什么推荐奇数节点? 答案:基于过半选举机制,奇数节点可获得更高容错率,节省服务器资源,避免脑裂风险。
-
问题:ZK连接超时、性能差如何排查? 答案:查看磁盘IO性能(ZK事务日志写盘瓶颈) → 排查FGC频繁问题 → 检测网络延迟与丢包 → 限制客户端连接数、优化超时参数。
四、HDP & Ambari平台运维(专属考点)
-
问题:Ambari Agent掉线如何排查? 答案:检查主机网络连通性 → 校验节点时间同步 → 查看磁盘空间是否占满 → 重启ambari-agent进程 → 排查防火墙端口是否放行。
-
问题:HDP集群滚动重启顺序? 答案:ZooKeeper → HDFS(JournalNode→DataNode→NameNode) → YARN(NodeManager→ResourceManager) → MapReduce → HBase → 其他组件。
-
问题:HDP版本升级注意事项? 答案:备份NameNode元数据、Ambari数据库 → 测试环境先行验证兼容性 → 停止非核心服务 → 做好回滚方案 → 升级后校验集群状态。
-
问题:集群时间不同步有什么影响? 答案:HA切换异常、ZK会话超时、认证失败、日志时序错乱、任务运行失败、监控数据失真。
第二部分 HDP生产环境Prometheus+Grafana监控实战(必问核心)
一、HDP集群监控核心指标体系(大企业生产标准)
-
问题:大企业HDP生产环境,Prometheus+Grafana必监控的核心指标有哪些? 答案:遵循**可用性优先、资源兜底、性能预警**原则,按层级拆解核心指标,均为大厂标配,附带采集方式和告警阈值,适配大集群常态化运维: 一、基础设施硬件层(Node Exporter采集,优先级:最高):CPU使用率(≤85%预警)、1/5/15min系统负载、物理内存使用率(≤85%预警)、Swap分区使用率(≤20%预警);磁盘分区使用率(≤80%预警、≥90%紧急)、磁盘%util(≤80%)、iowait占比、磁盘读写延迟、inode使用率;网卡进出流量、网络丢包率、TCP连接数、服务器节点存活状态。 二、ZooKeeper集群层(JMX Exporter采集,优先级:最高):ZK节点存活状态、Leader/Follower角色判定、集群可用节点数;客户端连接数、请求平均延迟、znode总数;事务日志写入吞吐量、FGC次数、会话超时次数、Leader切换次数。 三、HDFS核心层(JMX Exporter采集,优先级:最高) ✅ NameNode指标:HA主备状态、堆内存使用率(≤85%)、FullGC次数/频率、Block总数、丢失Block数、坏块数、小文件数量;文件系统总容量/已用容量、editlog写入延迟、FSImage检查点耗时、客户端读写QPS。 ✅ DataNode指标:节点存活数、心跳正常率、单节点磁盘使用率;副本合规率、数据读写吞吐量、读写延迟、数据块校验错误数、慢盘标识。 四、YARN资源调度层(JMX Exporter采集,优先级:高) ✅ ResourceManager指标:HA主备状态、集群总CPU/内存、可用资源量;各队列资源使用率(≤85%预警)、排队应用数、运行应用数、失败应用数。 ✅ NodeManager指标:节点存活状态、已分配CPU/内存、运行中Container数;Container OOM次数(Exit Code 137)、Container失败率、Shuffle磁盘占用。 ✅ 任务层指标:ACCEPTED阻塞任务数、FAILED/KILLED任务数、任务运行超时次数、数据倾斜标识。 五、Ambari&集群依赖层(Node Exporter+自定义采集,优先级:中):Ambari Server/Agent存活状态、心跳延迟;集群节点时间同步偏差(≤5s)、核心端口监听状态、组件日志磁盘占用率、Kerberos认证状态。
二、HDP集群监控落地实现(采集+配置+可视化)
-
问题:大企业HDP生产环境,如何用Prometheus+Grafana实现全链路监控? 答案:采用Exporter采集+Prometheus存储+Grafana可视化+Alertmanager告警标准化方案,大集群推荐联邦部署避免单点: 1. 指标采集部署(核心步骤):① 服务器指标:每台节点部署Node Exporter,采集硬件/系统指标,默认端口9100;② Hadoop组件指标:部署JMX Exporter,集成到NameNode、DataNode、ResourceManager、ZK进程中,暴露JMX指标,配置采集端口;③ 服务发现:采用文件服务发现/consul,自动纳管集群节点,无需手动更新Prometheus配置; 2. Prometheus配置优化:针对HDP大集群,配置指标抓取间隔30s-1min,数据保留15-30天,开启SSD存储提升读写速度,联邦集群分流采集压力;针对NameNode等高优先级组件,单独配置抓取规则,保证指标不丢失; 3. Grafana可视化落地:① 对接Prometheus数据源,开启认证保障安全;② 定制分层面板:集群总览大盘(核心组件可用性、资源使用率)、HDFS专项大盘、YARN队列大盘、ZK集群大盘、服务器硬件大盘;③ 使用模板变量实现按节点、队列、业务筛选,支持多集群切换; 4. 告警体系搭建:通过Prometheus配置告警规则,设置分级阈值(预警/紧急/致命),经Alertmanager去重、分组后,推送至企业微信/钉钉/短信,核心告警配合电话告警,杜绝漏报。
三、监控常见问题与生产优化(高频考点)
-
问题:HDP大集群监控易出现哪些问题,如何优化? 答案:① 指标过多导致Prometheus压力大:剔除无效指标、开启指标聚合、降低非核心指标采集频率、按业务分组采集;② Grafana图表加载慢:开启数据缓存、简化图表维度、优化PromQL查询语句、限制查询时间范围;③ 告警风暴:配置告警抑制、分级推送、静默规则,避免重复告警;④ 组件指标采集失败:检查JMX Exporter配置、进程端口连通性、防火墙策略、权限配置。
第三部分 大数据高级运维通用高频面试题(大厂必问)
一、集群安全与权限管控(生产刚需)
-
问题:HDP生产集群为什么要开启Kerberos认证?核心流程是什么? 答案:防止未授权访问、杜绝越权操作,保障集群数据安全;核心流程:KDC发放票据 → 客户端凭票据访问集群组件 → 组件验证票据合法性 → 票据过期重新申请。
-
问题:HDFS权限管控有哪些方式?如何实现多租户数据隔离? 答案:① 基础权限:Linux文件系统权限(rwx)、HDFS ACL权限;② 高级权限:Sentry/Ranger权限管控(HDP常用Ranger);③ 多租户隔离:划分独立队列、配置目录权限、绑定用户组、Ranger细粒度策略(库/表/列级别)。
-
问题:Ranger与Sentry的区别?大企业为什么首选Ranger? 答案:Sentry仅支持SQL组件权限管控;Ranger支持全组件(HDFS/YARN/HBase/Hive等)、细粒度、可视化策略配置,支持审计日志,适配大集群多租户安全场景。
-
问题:Kerberos票据过期、认证失败如何排查? 答案:检查KDC服务状态 → 校验节点时间同步 → 查看票据缓存kinit -t → 验证principal账号密码 → 排查keytab文件权限与有效性。
二、容灾备份与数据安全(高管关注)
-
问题:NameNode元数据备份方案有哪些?如何快速恢复? 答案:① 定期备份:fsimage镜像文件异地拷贝、定时脚本备份;② 实时备份:QJM日志同步、远程目录同步(rsync);恢复流程:停止集群 → 替换损坏元数据 → 重新格式化NameNode(保留clusterID) → 启动集群恢复元数据。
-
问题:HDP跨机房容灾方案有哪些? 答案:① HDFS Federation联邦架构;② 跨集群数据复制:DistCp工具定时同步、HDFS快照备份;③ 主备集群切换:DNS切换、负载均衡调度,核心数据多机房冗余。
-
问题:什么是HDFS快照?生产中如何使用? 答案:HDFS快照是文件系统的只读副本,不占用额外空间,仅记录变更;用于数据误删恢复、版本管理、数据备份,生产中对核心业务目录定时创建快照。
-
问题:数据误删除如何恢复?(无回收站场景) 答案:停止写入操作 → 查找hdfs trash目录(开启回收站);未开启则通过NameNode元数据回溯、日志恢复,或从备份集群/快照恢复数据。
三、HBase高级运维(高频组件)
-
问题:HBase RowKey设计原则?如何避免热点问题? 答案:原则:唯一性、散列性、长度适中、业务有序;避免热点:加盐、哈希、反转、分区设计,均衡Region分布。
-
问题:HBase Region分裂、合并策略?大集群优化? 答案:分裂:自动分裂(按阈值)、手动分裂;合并:合并小Region减少寻址开销;优化:预分区创建、关闭自动分裂、定时合并小Region,提升读写性能。
-
问题:HBase宕机、读写卡顿如何排查? 答案:查看ZK节点状态 → 检查HMaster/RegionServer存活 → 分析GC日志、磁盘IO → 定位热点Region → 修复数据损坏问题。
-
问题:HBase与HDFS的关系?为什么HBase适合实时读写? 答案:HBase数据存储在HDFS上,依赖HDFS高可用;基于LSM树架构,内存写+磁盘顺序读,支持随机实时读写,适合海量数据低延迟查询。
四、Hive数仓运维(必问)
-
问题:Hive内部表与外部表的区别?生产如何选择? 答案:内部表:数据由Hive管理,删表删数据;外部表:数据自主管理,删表仅删元数据;生产首选外部表,避免误删数据,适配多引擎共用数据。
-
问题:Hive查询慢、数据倾斜如何优化? 答案:开启分区/分桶、使用ORC/Parquet列式存储、开启压缩、调整MapReduce并行度、打散倾斜Key、使用MapJoin替代普通Join。
-
问题:Hive元数据存储在哪?元数据丢失如何恢复? 答案:元数据存储在MySQL/Oracle等关系型数据库;定期备份元数据库,丢失后停止Hive服务,恢复数据库备份,重启服务重建元数据映射。
五、Linux系统与运维工具(基础功底)
-
问题:Linux服务器性能排查常用命令? 答案:CPU:top、htop、mpstat;内存:free、vmstat;磁盘:iostat、df、du、dmesg;网络:netstat、ss、ping、tcpdump;日志:tail、grep、less。
-
问题:大集群自动化运维常用工具? 答案:批量运维:Ansible、SaltStack;日志管理:ELK、LogSearch+Solr;监控:Prometheus+Grafana、Zabbix;任务调度:Azkaban、Oozie。
-
问题:如何定位Linux服务器网络丢包、延迟高问题? 答案:ping检测连通性 → traceroute/mtr追踪路由 → netstat查看端口连接 → iptables检查防火墙 → ethtool查看网卡状态 → 排查交换机与链路问题。
第四部分 生产实战综合场景题(决定录用)
-
问题:HDP集群整体不可用,结合监控如何排查? 答案:查看Grafana集群总览面板 → 定位NameNode/ZK/YARN状态 → 检查Prometheus告警信息(宕机、磁盘、网络) → 排查核心组件日志 → 恢复顺序:ZK→HDFS→YARN→其他服务。
-
问题:监控显示HDFS读写延迟突增,如何定位解决? 答案:查看Grafana磁盘IO面板定位慢盘 → 排查DataNode节点网络与负载 → 检查是否有大量小文件/大任务写入 → 优化副本策略、清理热点数据。
-
问题:如何搭建一套完善的HDP大集群监控告警体系? 答案:1. 采集层:部署Node Exporter/JMX Exporter采集全链路指标;2. 存储层:Prometheus联邦集群+远程存储;3. 可视化层:Grafana定制多维度面板;4. 告警层:Alertmanager分级告警+多渠道通知;5. 优化:定期梳理告警规则、避免误报、实现故障自动自愈。
-
问题:集群扩容后,如何快速接入Prometheus+Grafana监控? 答案:新节点部署Exporter → 配置Prometheus服务发现自动纳管 → Grafana模板变量自动识别新节点 → 校验指标采集与告警规则 → 纳入集群统一监控面板。
-
问题:如何保证HDP集群7×24高可用? 答案:核心组件开启HA → 部署冗余节点与磁盘RAID → 完善Prometheus+Grafana监控告警体系 → 定期备份元数据与关键数据 → 制定故障应急流程与回滚方案 → 常态化巡检与性能优化。
-
问题:大集群出现大量小文件,有什么危害?如何治理? 答案:危害:占用NameNode内存、降低读写性能、加剧GC压力;治理:HDFS归档、CombineFileInputFormat合并、定时清理无效小文件、写入时调整Block大小。
第五部分 Spark & Flink任务常见报错排查(大厂高频)
一、Spark任务常见报错及排查(HDP集成Spark)
-
问题:Spark任务报Exit code 137/OOM,如何排查? 答案:分为Driver OOM和Executor OOM:① Driver OOM:调大spark.driver.memory,减少collect/toPandas等拉取全量数据操作;② Executor OOM:调大spark.executor.memory/cores,解决数据倾斜,开启堆外内存,避免Shuffle数据暴涨;③ 关联YARN:检查队列内存配额,防止被NM强制kill。
-
问题:Spark任务Shuffle报错/拉取失败,如何处理? 答案:排查Executor节点存活状态 → 检查Shuffle目录磁盘空间/权限 → 优化Shuffle并行度(spark.sql.shuffle.partitions) → 解决数据倾斜 → 清理过期Shuffle文件,重启Executor。
-
问题:Spark连接HDFS报错(权限/路径不存在),怎么解决? 答案:① 权限问题:校验提交用户HDFS权限,开启Kerberos的话检查票据/keytab有效性;② 路径不存在:核对HDFS路径、集群nameservice,修复HA配置;③ 版本兼容:确保Spark与HDP Hadoop版本一致。
-
问题:Spark任务运行极慢/卡死,排查思路? 答案:查看Grafana YARN监控面板,判断资源是否充足 → 定位数据倾斜Key → 检查是否存在大量小文件 → 优化并行度、开启广播Join → 排查Executor节点磁盘/网络瓶颈。
-
问题:Spark SQL报Metadata异常/表不存在,如何修复? 答案:检查Hive Metastore服务状态 → 校验库表元数据一致性 → 修复表分区(msck repair table) → 核对元数据库连接信息,重启Spark Thrift服务。
二、Flink任务常见报错及排查(实时计算高频)
-
问题:Flink任务Checkpoint失败/超时,怎么解决? 答案:排查Checkpoint存储目录(HDFS)磁盘空间/权限 → 调大Checkpoint间隔、超时时间、并发数 → 减少大状态数据,开启状态TTL → 优化算子并行度,避免背压导致Checkpoint堆积。
-
问题:Flink任务出现反压(BackPressure),如何定位? 答案:通过Flink UI查看反压节点 → 定位慢算子/数据倾斜 → 优化算子逻辑、提高并行度 → 排查下游数据源(Kafka/HBase)写入瓶颈 → 调整网络缓冲、State后端配置。
-
问题:Flink任务重启后数据重复/丢失,如何保障Exactly-Once? 答案:开启Checkpoint+事务语义,配置幂等写入 → 合理设置状态后端(FileSystem/RocksDB) → 保证Kafka等数据源offset提交与Checkpoint对齐 → 避免非正常停止任务导致状态失效。
-
问题:Flink on YARN提交失败/无法申请资源,排查步骤? 答案:检查YARN队列资源、权限 → 校验Flink与HDP版本兼容性 → 排查节点网络、DNS解析 → 调优Flink JM/TM内存配置,避免超出队列上限 → 查看YARN日志定位具体报错。
-
问题:Flink State膨胀/磁盘占用过高,如何优化? 答案:开启状态TTL清理过期数据 → 使用RocksDB增量Checkpoint → 合并小状态、拆分大算子 → 清理历史无效Checkpoint数据 → 调整State后端存储路径至大容量磁盘。
///spark任务提交/opt/spark-3.4.2-bin-hadoop3/bin/spark-shell \
--master yarn \
--deploy-mode cluster \
--queue u_xa_css_batch \
--driver-memory 8G \
--executor-memory 12G \
--executor-cores 4 \
--num-executors 15 \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.dynamicAllocation.minExecutors=5 \
--conf spark.dynamicAllocation.maxExecutors=25 \
--conf spark.driver.maxResultSize=16G \
--conf spark.yarn.executor.memoryOverhead=2G \
--conf spark.default.parallelism=600 \
--conf spark.sql.shuffle.partitions=600 \
--conf spark.driver.extraJavaOptions="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=32m" \
--conf spark.executor.extraJavaOptions="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=32m" \
--conf spark.speculation=false \
--conf spark.sql.adaptive.enabled=true \
--conf spark.sql.adaptive.coalescePartitions.enabled=true \
--conf spark.sql.adaptive.skewJoin.enabled=true
///flink任务提交
/opt/flink-1.18.1/bin/flink run-application \
-t yarn-application \
-Dsecurity.kerberos.login.use-ticket-cache=false \
-Dsecurity.kerberos.login.keytab=/home/u_xa_css_iie/sync/keytabs/国家中心/u_xa_css_iie.keytab \
-Dsecurity.kerberos.login.principal=u_xa_css_iie@HADOOP.COM \
-Dsecurity.kerberos.login.contexts=Client,KafkaClient \
-Djobmanager.memory.process.size=16G \
-Dtaskmanager.memory.process.size=16G \
-Dtaskmanager.memory.network.fraction=0.15 \
-Dtaskmanager.memory.managed.fraction=0.4 \
-Dtaskmanager.numberOfTaskSlots=4 \
-Dyarn.application.queue=u_xa_css_stream \
-Dyarn.application.name=xa_css_TargetMain \
-Dyarn.provided.lib.dirs="/user/u_xa_css_iie/yyf/lib:/user/u_xa_css_iie/yyf/plugins" \
-Dexecution.checkpointing.interval=300000 \
-Dexecution.checkpointing.timeout=600000 \
-Dexecution.checkpointing.mode=EXACTLY_ONCE \
-Dstate.backend=rocksdb \
-Dstate.backend.incremental=true \
-Dstate.checkpoints.dir=hdfs://nameservice/user/u_xa_css_iie/checkpoint/xa_css_TargetMain \
-Drestart-strategy=fixed-delay \
-Drestart-strategy.fixed-delay.attempts=5 \
-Drestart-strategy.fixed-delay.delay=10s \
-c lbs.task.MainNoTargetAggLink \
/home/u_xa_css_iie/sync/yyf/flink/f1k-rzfx-1.0-SNAPSHOT.jar \
更多推荐

所有评论(0)