ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大数据备考清单:HDFS、MapReduce与Zookeeper核心考点解析

大数据备考清单:HDFS、MapReduce与Zookeeper核心考点解析 简介《大数据技术原理和应用操作》试卷A卷及答案是一份针对大数据技术原理与操作课程的完整考核资料面向高校相关专业学生、自学大数据技术的人员以及准备技术认证或面试的考生。试卷内容覆盖Hadoop生态体系包括HDFS主从架构与Block默认副本数、MapReduce处理数据的四个阶段、Shuffle对性能的决定作用、Zookeeper的Shell命令与选举机制、Hadoop2.x的NodeManager进程、HA模式下多NameNode的高可用设计等核心知识点。题型包含单选题、多选题、判断题、填空题和简答题并附有参考答案能够帮助学习者系统检验对大数据组件原理、集群配置、Linux网络参数、Sqoop导入导出、Hive数据插入、Flume事件模型等细节的掌握情况。整个资源为单个PDF文件大小仅196KB便于下载、打印和离线查看目前已有1450人学习使用尤其适合在考前冲刺阶段快速查漏补缺、巩固高频考点。1. 一份带答案的大数据试卷为什么拿它当备考清单比翻讲义更省时间大数据相关的学习资料从来不缺缺的是能把知识点串起来、还能自检的东西。这份《大数据技术原理和应用操作》试卷 A 卷是一套带参考答案的完整试卷42 道客观题加 5 道简答题覆盖 Zookeeper 命令、HDFS 架构、MapReduce 流程、YARN 进程演进以及 Hive、Flume、Sqoop 三大组件的操作细节。它不像教材那样铺开讲原理而是直接用题目把考点逼到你面前Zookeeper 获取信息用哪个命令、MapReduce 分几步、Block 默认几份副本、Hadoop 2.x 新增了哪个进程。对于准备课程考试的学生、刚接触大数据开发的转行者、以及要快速圈定考点的讲师这套题比从第一章翻讲义高效得多。用它自测一遍哪块是盲区立刻暴露。2. HDFS 与 Hadoop 基础考点主从架构、Block 副本与四个配置文件2.1 HDFS 主从架构从单选第 3 题看节点职责单选第 3 题直接考 HDFS 架构四个选项里“主从架构”是正确答案。这道题本身不难但把它放在集群视角看牵扯出的节点职责才是真正的考点。HDFS 采用一主多从一个 NameNode 负责元数据管理多个 DataNode 负责数据块存储。单选第 4 题问“哪个节点关闭了无法访问集群”答案是 NameNode因为所有文件的目录、副本位置、权限信息都在它身上它挂了客户端就找不到数据块在哪。节点角色核心职责故障影响NameNode主节点维护元数据、管理副本策略、处理客户端读写请求集群数据不可访问DataNode从节点实际存储 Block、执行流水线复制、心跳上报单点故障只丢一部分数据SecondaryNameNode辅助节点定期合并编辑日志、生成新的 fsimage不提供实时故障转移多选第 8 题问 Hadoop 集群包含哪些节点答案是 Master 和 Slave没有选 Worker也没有选 HMaster。这里有个容易混淆的细节Worker 是 Spark 语境下的说法HMaster 是 HBase 里的角色在 Hadoop 原生架构术语里就是 Master/Slave。我见过不少人在这个选项上丢分本质上是对各框架术语边界不熟。2.2 Block 默认 3 份副本副本策略背后的可靠性逻辑单选第 8 题考 HDFS 中 Block 默认保存几份答案是 3 份。默认值来自 hdfs-site.xml 里的dfs.replication参数生产环境里有人会调成 2也有人为了可靠性调到 4但默认 3 是官方权衡的结果1 份本地副本加 2 份跨机架副本既能容忍单机故障也能容忍整个机架掉电。如果只存 1 份DataNode 宕机就等于永久丢数据存 5 份以上写入和存储成本又过高。HDFS 里修改副本数可以直接用命令不需要重启集群# 修改某目录下所有文件的副本数为 2 hdfs dfs -setrep -R -w 2 /user/hive/warehouse # 查看某个文件的副本分布情况 hdfs fsck /user/hive/warehouse/ods_user -files -blocks -locations-R表示递归处理目录下所有文件-w表示等待副本调整完成再返回。第二条命令里的fsck是检查文件健康状态最常用的工具能看出每个 Block 落在哪些节点上、当前副本数是否满足阈值。判断题第 5 题说“传统文件系统存储数据时文件太大会导致上传下载耗时”这个论断是对的正因如此 HDFS 才把大文件切成 128MB 的 Block 并行存储。2.3 存放配置文件的目录etc 与四个 XML 的对应关系单选第 6 题问 Hadoop 配置文件存放在哪个目录答案是etc。这是个实操向的考点很多新手在bin、conf里翻半天找不到core-site.xml其实 Hadoop 解压后配置目录就是etc/hadoop。多选第 4 题进一步考自定义配置会编辑哪些文件答案是core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四个全选。配置文件负责范围常见参数core-site.xml全局通用配置fs.defaultFS、hadoop.tmp.dirhdfs-site.xmlHDFS 相关配置dfs.replication、dfs.namenode.name.dirmapred-site.xmlMapReduce 运行参数mapreduce.framework.name、mapreduce.task.io.sort.mbyarn-site.xmlYARN 资源调度yarn.nodemanager.resource.memory-mb、yarn.resourcemanager.hostname以core-site.xml为例它决定了客户端访问集群的入口地址configuration property namefs.defaultFS/name valuehdfs://namenode01:8020/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property /configurationfs.defaultFS是客户端读写 HDFS 的默认路径前缀写成hdfs://namenode01:8020后hdfs dfs -ls /就不需要再手动拼完整地址。hadoop.tmp.dir指定 NameNode 和 DataNode 存储元数据与数据块的根目录生产环境必须把它从默认的/tmp换到独立磁盘分区否则系统重启临时文件被清空集群等于没有格式化过。2.4 安装目录陷阱bin、sbin、etc 各自装什么判断题第 9 题说“Hadoop 解压目录下的 bin 目录存放的是配置文件”这个论断是错的。配置文件在etc目录bin目录放的是 HDFS 和 MapReduce 的命令行客户端工具比如hdfs、hadoop、yarn这些可执行脚本。真正的管理脚本在sbin目录填空题第 6 题考的就是这一点sbin目录包含 HDFS 和 YARN 各类服务的启动关闭脚本比如start-dfs.sh、stop-yarn.sh。区分这三个目录对排错很有帮助客户端工具找不到时检查bin服务起不来时看sbin参数不生效时改etc/hadoop下的 XML 文件。填空第 5 题问 Hadoop 支持在哪些系统上安装答案是 Linux 和 Windows。但判断题第 10 题明确说 Windows 平台配置后直接运行是没有问题的这个论断是错的。Windows 上跑 Hadoop 需要额外处理 native 库、权限模型和路径分隔符差异尤其在伪分布式模式下经常出现java.io.IOException: Cannot create directory这类权限异常真实开发中还是以 Linux 为准。3. MapReduce 与 Zookeeper流程分几步、瓶颈在哪、选举怎么过半3.1 MapReduce 四步流程Shuffle 才是性能分水岭单选第 2 题问 MapReduce 处理数据的工作流程分几步答案是四步。这个“四”指的是分片与格式化数据源、MapTask 并行处理、Shuffle 数据洗牌、ReduceTask 汇总输出。很多教程把 Shuffle 当成 Map 和 Reduce 之间的过渡带实际上它是独立的一步也是单选第 9 题考的“决定整个 MapReduce 程序性能高低”的阶段。阶段名称做什么常见误区第 1 步分片、格式化数据源InputFormat 将文件拆成 splitRecordReader 逐行解析成 key-value以为切片就是 Block第 2 步MapTask执行 map() 逻辑输出中间结果忽略环形缓冲区大小第 3 步Shuffle分区、排序、溢写、归并、压缩、网络拷贝以为 Shuffle 只发生在 Reduce 端第 4 步ReduceTask执行 reduce() 逻辑写出结果忽略 reduce 拉取数据的并发度我在调优时见过最典型的翻车案例Map 和 Reduce 逻辑都简单但任务跑了几小时最后定位到 Shuffle 阶段溢写次数过多磁盘 IO 被打满。Shuffle 的性能主要受mapred-site.xml里几个参数约束configuration property namemapreduce.task.io.sort.mb/name value512/value /property property namemapreduce.map.sort.spill.percent/name value0.85/value /property property namemapreduce.reduce.shuffle.parallelcopies/name value10/value /property property namemapreduce.job.reduce.slowstart.completedmaps/name value0.8/value /property /configurationmapreduce.task.io.sort.mb是 Map 端环形缓冲区大小默认 100MB调到 512MB 能显著减少溢写次数spill.percent是缓冲区写满比例0.85 表示达到 85% 时开始溢写这个值不宜过大否则 map 输出还没写完就得等缓冲腾出空间。parallelcopies控制 ReduceTask 并发从多个 MapTask 拷贝数据的线程数默认只有 5集群机器多时可以调高。最后一个参数控制 Reduce 启动时机等 80% 的 MapTask 完成后再启动 Reduce避免过早占用资源。3.2 Hadoop 2.x 进程演进谁替代了 TaskTracker单选第 5 题问 Hadoop 2.x 版本独有的进程答案是 NodeManager。这道题对应的是 YARN 对 Hadoop 1.x 的架构重构1.x 里的 JobTracker 既负责任务调度又负责资源管理TaskTracker 周期性向 JobTracker 汇报心跳并执行任务2.x 把职责拆开了ResourceManager 统一管资源每个节点上的 NodeManager 负责任务执行和资源上报。多选第 3 题考 Hadoop 版本系列答案是 1、2、3不存在 Hadoop4这个只要看过官网版本列表就不会错。判断题第 1 题说“Hadoop 是 Java 编写的因此可以用 Java API 操作文件系统”这个论断是对的。实际开发里FileSystem是核心入口Configuration conf new Configuration(); conf.set(fs.defaultFS, hdfs://namenode01:8020); FileSystem fs FileSystem.get(conf); Path src new Path(/data/input/orders.csv); Path dst new Path(/data/warehouse/orders.csv); fs.copyFromLocalFile(src, dst);FileSystem.get()会加载 classpath 下的配置文件构造客户端实例如果core-site.xml没打进 classpath就需要手动设置fs.defaultFS。这里有个经验之谈写 Java API 时不要硬编码集群地址优先通过配置文件注入否则换环境就要改代码编译。3.3 Zookeeperget 命令与四态选举机制单选第 1 题问获取 Zookeeper 信息的 Shell 命令答案是 get。这道题干扰项是ls和ls2ls只列出子节点名ls2在 3.5 之前能列出子节点加自身状态信息而get才是获取节点数据和属性如版本号、时间戳的正解。实际使用时命令行长这样# 进入 Zookeeper 客户端连接本地 2181 端口 zkCli.sh -server namenode01:2181 # 查看根节点下的子节点 ls / # 获取指定节点的数据和元信息 get /hadoop-ha/namenode01输出里会带cZxid、mZxid、dataVersion这些字段其中dataVersion在分布式协调场景特别有用可以用它实现乐观锁——先 get 拿版本号再通过带版本号的 set 更新版本不匹配就重试避免并发覆盖。多选第 6 题考 Zookeeper 选举中的四种状态分别是竞选LOOKING、随从FOLLOWING、观察OBSERVING、领导者LEADING。判断题第 7 题说选举采用 FastLeaderElection 算法、投票数大于半数胜出这个论断是对的。部署时有个铁律集群节点数要配奇数比如 3 台或 5 台。因为过半机制下3 台允许挂 1 台5 台允许挂 2 台4 台和 3 台能容忍的故障数一样多花一台机器却买不到额外容错能力。4. Hive、Flume、Sqoop 的操作向考点三种启动方式与两组同步命令4.1 Hive 三种安装模式与 insert 关键字辨析填空第 3 题问 Hive 的安装模式答案是嵌入模式、本地模式、远程模式。嵌入模式用内嵌 Derby 数据库存元数据适合本地试用本地模式把元数据存在同一个节点的 MySQL 里远程模式则把 MySQL 独立出去客户端通过网络访问 metastore这才是生产环境的标配。判断题第 8 题说 Hive 启动方式简答第 1 题考的也是这个答案是bin/hive和bin/hiveserver2两种。# 方式一交互式客户端适合临时查询 bin/hive # 方式二启动 HiveServer2配合 beeline 远程连接 bin/hiveserver2 --hiveconf hive.server2.thrift.port10000 # 客户端连接 bin/beeline -u jdbc:hive2://namenode01:10000/default多选第 10 题考insert() table括号里能写什么关键字答案是 into 和 overwrite-- 追加写入保留原有数据 INSERT INTO TABLE dwd_orders SELECT * FROM ods_orders; -- 覆盖写入先清空分区再写入 INSERT OVERWRITE TABLE dwd_orders PARTITION(dt2024-06-01) SELECT * FROM ods_orders;insert into是纯追加适合增量场景insert overwrite用于重算某天分区写之前会清掉目标分区或全表数据。选项里的append是干扰项Hive 没有这个关键字它来自 MySQL 中LOAD DATA INFILE ... APPEND的写法两者语法体系不同。这个点在我审过的简历里出现过多次项目里写了“用 append 插入”基本就能判断没真正跑过 Hive SQL。4.2 FlumeSource、Channel、Sink 与 event 结构填空第 1 题考 Flume 的三大组件答案是 Channel。Source 是数据采集器Sink 是输出器Channel 是连接两者的缓冲管道默认有 Memory Channel 和 File Channel 两种。简答第 3 题考 event 概念event 是 Flume 内部数据传输的基本单元由 headers 和 body 组成headers 装标识信息body 装真实数据。生产配置比想象中简单核心就三块agent.sources spool-source agent.channels mem-channel agent.sinks log-sink # Source监听目录读新增文件 agent.sources.spool-source.type spooldir agent.sources.spool-source.spoolDir /data/logs/orders agent.sources.spool-source.fileHeader true # Channel内存缓冲容量 1000 条 agent.channels.mem-channel.type memory agent.channels.mem-channel.capacity 10000 agent.channels.mem-channel.transactionCapacity 1000 # Sink输出到日志 agent.sinks.log-sink.type logger agent.sources.spool-source.channels mem-channel agent.sinks.log-sink.channel mem-channelspooldir是生产环境最好用的 Source 之一它监控整个目录文件写入完成后会被读取并重命名加后缀避免重复采集。capacity是 Channel 能缓冲的最大 event 条数transactionCapacity是事务内允许处理的最大条数后者必须小于等于前者否则启动直接报错。把 Channel 从 memory 换成 file 可以防丢数据代价是吞吐下降取舍标准是数据重要程度。4.3 Sqoop一组 import 和 export 命令多选第 7 题考 Sqoop 指令参数答案是 import 和 export。这两个参数对应一进一出import 把关系型数据库的表导入 HDFS 或 Hiveexport 把 HDFS 或 Hive 的结果导出到关系型数据库。以 MySQL 导入 HDFS 为例sqoop import \ --connect jdbc:mysql://mysql01:3306/bigdata?useSSLfalse \ --username root \ --password 123456 \ --table orders \ --target-dir /data/warehouse/orders \ --split-by order_id \ --m 4 \ --fields-terminated-by \t--connect指定 JDBC 连接串--table写源表名--target-dir是 HDFS 输出目录--split-by用来指定并发切分的字段--m是并行度。这里有个血泪经验--m必须和主键或索引配合否则 Sqoop 默认把主键作为切分列表中没有主键时会退化成一个 MapTask导入速度大打折扣数据量大时还会因--split-by字段值分布不均导致数据倾斜。导出方向换成sqoop export \ --connect jdbc:mysql://mysql01:3306/bigdata?useSSLfalse \ --username root \ --password 123456 \ --table orders_export \ --export-dir /data/warehouse/orders \ --input-fields-terminated-by \t填空题第 2 题考 Sqoop 的核心功能答案是导入和导出注意表述顺序要和题干对应题干说的是“数据的【】和导出操作”所以填“导入”。5. 避坑与常见问题这份答案里五处容易翻车的地方5.1 HA 判断题为什么是“错”主备不是多台机器同时当 Active现象判断题第 8 题说“Hadoop HA 是启动两台或以上机器充当 NameNode”很多人毫不犹豫打勾。原因Hadoop HA 的本质是主备架构同一时刻只有一台 Active NameNode 对外提供服务另一台 Standby 接收编辑日志并保持元数据同步Active 挂掉后自动切换。如果两台机器同时充当 Active会进入脑裂状态两个节点同时写元数据文件系统直接损坏。题干的错误在于“两台或以上机器充当 NameNode”这个说法掩盖了主备关系只强调了数量。解决记住 HA 的标准描述——一台 Active一台 StandbyJournalNode 集群负责同步编辑日志Zookeeper 负责自动故障转移。答题时看到“同时充当”这类表述基本可以判定为错。5.2 crontab 表达式到底是 5 位还是 6 位现象多选第 5 题问 crontab 表达式说明这份试卷的答案是选“6 个参数”而 Linux 系统里 crontab 明明写的是 5 位。原因Linux 原生 crontab 是 5 位分、时、日、月、周一些扩展调度框架如 Quartz 支持秒级触发写成 6 位多出的第一位是秒。这套试卷按带秒的扩展口径出题所以把 6 个参数判定为正确。解决备考按试卷答案走实战中用crontab -e编辑时按系统 5 位写。区分标准很简单* * * * *是一分钟执行一次0/5 * * * * *这种带 6 段的写法只出现在 Quartz 或部分 Java 调度组件里。5.3 多选第 10 题的 insert 关键字append 为什么是干扰项现象Hive 数据表插入数据括号里有人选了 append。原因MySQL 的LOAD DATA里有 APPEND 语义Hive 早期版本文档中也没有 append 这个关键字。Hive 的追加机制靠INSERT INTO表达覆盖机制靠INSERT OVERWRITE表达两者对应的是不同数据写入策略。解决Hive SQL 里写INSERT INTO TABLE就是追加写INSERT OVERWRITE TABLE会先清空目标再写。面试时被问“Hive 怎么实现 upsert”正确思路是INSERT OVERWRITE配合分区重算而不是回答 append。5.4 “最早提出大数据概念”选谁麦肯锡还是吉拉德现象单选第 7 题问最早提出“大数据”概念的机构或人答案是麦肯锡但市面上资料有的写吉拉德。原因口径不同。吉拉德Gerard在更早的研究中用过这个术语但让“大数据”成为行业概念的是麦肯锡 2011 年发布的报告《Big data: The next frontier for innovation, competition, and productivity》。国内教材多数采用“麦肯锡提出大数据概念”这个版本。解决这类题没有绝对技术对错按教材口径答。备考时遇到这种有争议的题目把它归入“概念口径题”不要花时间争辩把精力留给命令和原理题。5.5 Hadoop 版本系列里没有 Hadoop4现象多选第 3 题问 Hadoop 版本系列有人把“Hadoop4”也选上理由是见过hadoop-4.x的安装包。原因Hadoop 官方版本主线是 1.x、2.x、3.x4.x 至今没有正式发布。网上有些第三方编译包目录叫 4.0 或者实验分支容易造成混淆。解决以 Apache Hadoop 官网 release 列表为准3.x 是目前主流生产版本。看到版本号先确认发行方发行方是 Cloudera 或 HDP 之类的厂商包时版本命名规则不一样不要混为一谈。6. 进阶用法把判断题变成命令把错题变成三层标签把这份试卷真正消化掉不能止于对答案。我拿到这类带答案的资源会做两件事一是把判断题里的论断全部落到命令行验一遍二是把错题按错误原因分层分类。这两步做完一份试卷就变成了自己的知识基线。判断题第 4 题说“MapReduce 执行完后输出_SUCCESS和part-r-00000文件”这个可以直接验证。随便跑一个 WordCount然后看输出目录hdfs dfs -ls /output/wordcount # 期望看到以下结构 # /output/wordcount/_SUCCESS # /output/wordcount/part-r-00000_SUCCESS是空文件只做标记下游任务判断作业是否成功依赖它part-r-00000是 Reduce 输出文件文件名里的r表示来自 Reduce如果只有 Map 没有 Reduce文件名会变成part-m-00000。判断题第 9 题说“bin 目录存放配置文件”用ls扫一眼解压目录就能证伪bin下面是可执行脚本etc/hadoop下面才是core-site.xml。判断题第 10 题说 Windows 上直接运行 Hadoop 没问题这个在 Windows 上配伪分布式跑一次就会碰到权限异常错误信息Permission denied是必经之路。错题分层是复盘环节最有价值的动作。我会把每道错题打三个标签第一层是“知识遗忘”比如不记得 Block 默认副本数是 3翻书就好第二层是“概念混淆”比如把 Worker 和 Slave 混用把 HMaster 当 Hadoop 集群角色这种需要专门列一张术语对照表第三层是“题目口径问题”比如 crontab 5 位和 6 位的争议、大数据概念提出者之争这类题专门记到一个“争议题库”里不占用主要复习精力。三层标签做完再回头看这份试卷它就不是一份要背的答案而是一张查漏补缺的地图。这份试卷的价值在于它把分散的知识点压缩成了可验证的题目。从那以后我每次拿到新的练习卷或复习材料都会先花十分钟把判断题里的论断转成命令跑通了才把结论存进笔记跑不通就倒逼自己查文档。这个习惯帮我省掉了大量死记硬背也绕开了好几处网上流传的错误答案。希望帮到你。本文还有配套的精品资源点击获取
返回列表