2025年大数据开发工程师试题及答案_第1页
2025年大数据开发工程师试题及答案_第2页
2025年大数据开发工程师试题及答案_第3页
2025年大数据开发工程师试题及答案_第4页
2025年大数据开发工程师试题及答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年大数据开发工程师试题及答案一、单项选择题(每题2分,共20分)1.关于HDFS的副本机制,以下描述错误的是()A.默认副本数为3B.客户端写入数据时,第一个副本存储在本地节点C.机架感知策略可提升数据读取的网络效率D.副本数可通过dfs.replication参数动态调整答案:B解析:HDFS写入时,第一个副本存储在客户端所在节点(若客户端不在集群节点上,则随机选择节点),并非强制本地节点。2.以下哪项不是SparkRDD的转换(Transformation)操作?()A.reduceByKeyB.groupByC.countD.mapPartitions答案:C解析:count是行动(Action)操作,会触发计算并返回结果;其他选项均为转换操作,延迟执行。3.关于Flink的时间类型,以下说法正确的是()A.事件时间(EventTime)是数据实际产生的时间,需依赖水印(Watermark)处理乱序B.处理时间(ProcessingTime)是数据到达Flink算子的时间,无需水印机制C.摄入时间(IngestionTime)介于事件时间和处理时间之间,由Source节点记录D.以上均正确答案:D解析:事件时间依赖水印解决乱序问题;处理时间基于算子本地时间,无乱序问题;摄入时间由Source记录数据进入集群的时间,介于前两者之间。4.Kafka中,ISR(In-SyncReplicas)的作用是()A.保证生产者消息的有序性B.维护与Leader保持同步的Follower集合C.控制消费者的消费偏移量D.优化Broker的网络带宽答案:B解析:ISR是与Leader副本保持同步的Follower副本集合,当Leader故障时,仅从ISR中选举新Leader以保证数据一致性。5.以下HBase的RowKey设计原则中,错误的是()A.避免热点:通过加盐或哈希分散写入压力B.长度越短越好:减少存储和内存占用C.顺序读友好:按业务时间或区域等维度排序D.必须包含时间戳:确保数据唯一性答案:D解析:RowKey需保证唯一性,但时间戳并非必须,可通过组合业务主键(如用户ID+订单ID)实现唯一。6.关于数据湖(DataLake)与数据仓库(DataWarehouse)的区别,以下描述错误的是()A.数据湖存储原始数据(如日志、文件),数据仓库存储结构化的清洗数据B.数据湖支持多类型数据(结构化、半结构化、非结构化),数据仓库以结构化为主C.数据湖的分析工具以SQL为主,数据仓库支持机器学习、实时分析等多样化工具D.数据湖的典型存储是对象存储(如S3、HDFS),数据仓库多使用关系型数据库或列式存储答案:C解析:数据湖支持多样化分析(如SQL、机器学习、实时处理),数据仓库以SQL分析为主。7.在SparkSQL中,以下哪种操作会触发Shuffle?()A.filter("age>18")B.select("name","age")C.join(rightDF,"id")D.limit(100)答案:C解析:Join操作通常需要将相同键的数据分发到同一节点,触发Shuffle;其他操作不涉及数据重分区。8.Flink中,以下哪种状态后端(StateBackend)适合处理超大数据量的状态?()A.MemoryStateBackendB.FsStateBackendC.RocksDBStateBackendD.HashMapStateBackend答案:C解析:RocksDBStateBackend使用本地磁盘存储状态,支持更大的状态容量,适合高并发、大状态场景;Memory和FsStateBackend受内存或文件系统限制。9.关于分布式事务的CAP定理,以下说法正确的是()A.一致性(Consistency)指所有节点同时看到相同的数据B.可用性(Availability)指部分节点故障时系统仍能响应C.分区容错性(PartitionTolerance)指网络分区时系统仍能运行D.以上均正确答案:D解析:CAP定理中,一致性要求所有节点数据一致;可用性要求非故障节点能快速响应;分区容错性要求系统在网络分区时仍能继续运作。10.以下不属于大数据离线处理场景的是()A.每日用户行为分析报表B.实时推荐系统的特征计算C.历史订单数据归档D.年度销售趋势预测答案:B解析:实时推荐的特征计算属于实时处理场景,其他选项为离线批量处理。二、填空题(每空2分,共20分)1.HBase的RegionServer默认监听端口是______。答案:160202.Kafka中,设置`acks=all`时,消息需要被______副本确认才会返回成功。答案:ISR中所有3.SparkShuffle的默认序列化方式是______。答案:KryoSerializer(注:Spark3.0+默认使用Kryo,早期版本为JavaSerializer)4.Flink任务中,`CheckpointInterval`参数用于设置______的时间间隔。答案:检查点(Checkpoint)5.Hive中,`STOREDASPARQUET`表示数据存储格式为______。答案:Parquet(列式存储)6.分布式系统中,ZooKeeper的默认心跳检测时间(`tickTime`)是______毫秒。答案:20007.数据仓库的ODS层(操作数据层)通常存储______数据。答案:原始(未加工/原始明细)8.SparkRDD的`persist(StorageLevel.MEMORY_AND_DISK_SER)`表示数据优先存储在______,空间不足时存储到磁盘,且数据会被______。答案:内存;序列化9.Flink的时间窗口中,`TumblingWindow`的特点是______。答案:窗口不重叠、固定大小10.HDFS的`node.handler.count`参数用于设置______的处理线程数。答案:NameNode(客户端请求)三、简答题(每题8分,共40分)1.简述SparkRDD的持久化(Persistence)与检查点(Checkpoint)的区别及适用场景。答案:区别:持久化(cache/persist):将RDD计算结果存储在内存或磁盘中,属于容错机制的轻量级实现;数据丢失时可通过父RDD重算恢复。检查点(checkpoint):将RDD结果写入可靠存储(如HDFS),切断RDD的依赖链;数据丢失时直接从检查点读取,无需重算。适用场景:持久化:适用于需要多次计算同一RDD、且RDD计算链较短(重算成本低)的场景(如迭代计算)。检查点:适用于RDD计算链复杂(重算成本高)、或需要长期保留中间结果的场景(如关键指标计算)。2.说明Flink中水印(Watermark)的作用及生成策略。答案:作用:水印是Flink处理事件时间(EventTime)时的时间进度标记,用于衡量事件时间的进展,触发窗口计算并处理乱序数据。当水印时间超过窗口的结束时间时,认为该窗口的所有数据已到达,触发计算。生成策略:周期性水印(PeriodicWatermark):按固定时间间隔(如每200ms)生成,通过`withIdleness(Duration)`处理空闲流。标点水印(PunctuatedWatermark):基于事件数据中的特定标记(如消息中的时间戳字段)生成,适用于事件时间有明确递增规律的场景。3.列举Kafka消费者的三种分区分配策略,并说明各自特点。答案:RangeAssignor(默认策略):按消费者ID排序,为每个消费者分配连续的分区(如主题有6个分区、2个消费者,则消费者1分配0-2,消费者2分配3-5)。特点:简单高效,但可能导致数据倾斜(如热门分区集中在少数消费者)。RoundRobinAssignor:轮询分配分区,将所有分区和消费者排序后依次分配(如分区0→消费者1,分区1→消费者2,分区2→消费者1)。特点:分区分布更均匀,适用于多主题消费场景。StickyAssignor:在Rebalance时保留原有分配(尽可能少调整),剩余分区轮询分配。特点:减少Rebalance时的数据迁移,提升稳定性。4.简述HBase的预分区(Pre-split)作用及实现方式。答案:作用:HBase默认表只有1个Region,随着数据写入会分裂为多个Region。预分区通过手动设置初始Region数量,避免初始写入时单个Region成为热点,提升写入和查询性能。实现方式:使用`create`命令指定分区键:`create'table','cf',SPLITS=>['1000','2000','3000']`(按RowKey前缀分区)。通过JavaAPI调用`HBaseAdmin.createTable(HTableDescriptor,byte[][]splits)`方法,自定义分区键数组。使用`BulkLoad`工具导入数据前预分区,避免Region分裂影响在线服务。5.数据仓库设计中,如何处理缓慢变化维度(SCD,SlowlyChangingDimension)?列举至少三种常见策略。答案:类型1(SCD1):覆盖旧值,直接更新维度表中变化的字段(如用户手机号变更)。优点:存储简单;缺点:丢失历史信息。类型2(SCD2):保留历史版本,通过生效时间(start_date)和失效时间(end_date)标记记录的有效区间(如用户地址变更时插入新记录,旧记录标记为失效)。优点:完整保留历史;缺点:增加存储和查询复杂度。类型3(SCD3):记录最近N个版本,通过额外字段存储旧值(如用`old_city`和`current_city`记录用户最近两次城市变更)。优点:折中存储;缺点:仅保留有限历史。类型4(SCD4):使用维度表+历史表,主维度表存储当前值,历史表存储全量变更记录。优点:灵活查询;缺点:维护两张表,复杂度高。四、编程题(每题15分,共30分)1.请使用SparkSQL编写代码,实现用户行为漏斗分析:统计“首页→商品详情页→下单页”的转化漏斗,要求输出每一步的用户数及转化率(转化率=下一步用户数/当前步用户数)。输入数据说明:表名:`user_action`字段:`user_id`(用户ID),`page`(页面类型,取值:home、detail、order),`action_time`(行为时间)要求:过滤同一天内的重复行为(同一用户同一页面仅计一次);按“首页→商品详情页→下单页”顺序计算转化。答案:```scalaimportorg.apache.spark.sql.functions._importorg.apache.spark.sql.expressions.WindowvaluserActionDF=spark.table("user_action")//步骤1:过滤同一天内重复行为,保留用户每天每个页面的最早访问记录valdailyDistinctDF=userActionDF.withColumn("date",to_date(col("action_time")))//提取日期.groupBy(col("user_id"),col("date"),col("page")).agg(min(col("action_time")).as("first_action_time"))//取当天首次访问时间//步骤2:为每个用户每天的行为打标签(是否访问过各步骤页面)valfunnelFlagDF=dailyDistinctDF.groupBy(col("user_id"),col("date")).pivot("page",Seq("home","detail","order"))//按页面类型透视.agg(when(count("")>0,1).otherwise(0).as("flag"))//存在则标记为1,否则0.na.fill(0)//未访问的页面标记为0//步骤3:计算各步骤的用户数valstepCountDF=funnelFlagDF.agg(sum(col("home")).as("home_users"),//首页用户数sum(col("detail")).as("detail_users"),//详情页用户数sum(col("order")).as("order_users")//下单页用户数)//步骤4:计算转化率valresultDF=stepCountDF.withColumn("home_to_detail_rate",round(col("detail_users")/col("home_users"),4))//首页→详情页转化率.withColumn("detail_to_order_rate",round(col("order_users")/col("detail_users"),4))//详情页→下单页转化率resultDF.show()```输出示例:```+-+-++-++|home_users|detail_users|order_users|home_to_detail_rate|detail_to_order_rate|+-+-++-++|10000|6000|2400|0.6000|0.4000|+-+-++-++```2.请使用Flink(Java/Scala)编写实时计算程序,统计最近1小时内每个商品的点击量(每5分钟输出一次结果),要求处理乱序数据(最大延迟5秒)。输入数据说明:数据流:`ClickEvent`(字段:`itemId`(商品ID),`eventTime`(事件时间,时间戳),`userId`(用户ID))要求:使用事件时间(EventTime);窗口类型为滑动窗口(SlidingWindow);输出字段:`itemId`,`clickCount`,`windowStart`,`windowEnd`。答案(Scala版本):```scalaimportmon.eventtime._importmon.functions.AggregateFunctionimportorg.apache.flink.streaming.api.scala._importorg.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindowsimportorg.apache.flink.streaming.api.windowing.time.Timeimportorg.apache.flink.streaming.api.windowing.windows.TimeWindowcaseclassClickEvent(itemId:Long,eventTime:Long,userId:Long)caseclassWindowResult(itemId:Long,clickCount:Long,windowStart:Long,windowEnd:Long)objectItemClickCount{defmain(args:Array[String]):Unit={valenv=StreamExecutionEnvironment.getExecutionEnvironmentenv.setParallelism(4)//步骤1:定义水印生成策略(最大延迟5秒)valwatermarkStrategy=WatermarkStrategy.forBoundedOutOfOrderness[ClickEvent](Duration.ofSeconds(5)).withTimestampAssigner((event:ClickEvent,_:Long)=>event.eventTime)//步骤2:读取数据流(模拟Source,实际可能为Kafka)valclickStream=env.addSource(/KafkaSource或其他Source/).assignTimestampsAndWatermarks(watermarkStrategy)//步骤3:定义滑动窗口(窗口大小1小时,滑动步长5分钟)valwindowStream=clickStream.keyBy(_.itemId).window(SlidingEventTimeWindows.of(Time.hours(1),Time.minutes(5))).aggregate(newClickCountAgg,newWindowResultFormatter)windowStream.print()env.execute("ItemClickCount")}//聚合函数:统计点击次数classClickCountAggextendsAggregateFunction[ClickEvent,Long,Long]{overridedefcreateAccumulator():Long=0Loverridedefadd(value:ClickEvent,accumulator:Long):Long=accumulator+1overridedefgetResult(accumulator:Long):Long=accumulatoroverridedefmerge(a:Long,b:Long):Long=a+b}//窗口结果格式化classWindowResultFormatterextendsWindowFunction[Long,WindowResult,Long,TimeWindow]{overridedefapply(itemId:Long,window:TimeWindow,input:Iterable[Long],out:Collector[WindowResult]):Unit={valcount=input.headout.collect(WindowResult(itemId,count,window.getStart,window.getEnd))}}}```关键说明:水印策略设置最大延迟5秒,确保乱序数据在延迟范围内被正确处理。滑动窗口大小1小时,滑动步长5分钟,每5分钟输出最近1小时的点击量。使用`AggregateFunction`优化内存占用,仅存储计数中间结果。五、综合应用题(20分)某电商公司需构建大数据平台,要求支持以下场景:实时处理:用户点击流(5万条/秒)、订单支付(2万条/秒);离线处理:每日用户行为分析(数据量约500GB)、商品销售趋势(历史数据10TB);数据查询:业务方实时查询用户最近7天的行为明细、运营团队周报的多维统计。请设计该平台的技术架构,要求包含:1.数据采集层:数据源及工具选择;2.数据存储层:各场景数据的存储方案(技术选型、存储格式、分区策略);3.计算层:实时与离线计算框架选择及分工;4.数据服务层:查询加速方案(如索引、缓存)。答案:1.数据采集层用户点击流(埋点数据):通过客户端SDK(如JS、AndroidSDK)发送至Kafka(Topic:user_click),使用FlinkCDC或Canal采集数据库(如MySQL)的订单支付变更日志至Kafka(Topic:order_pay)。第三方数据(如物流、营销):通过Sqoop定期(每日)从关系型数据库导入HDFS,或通过Flume从文件服务器(如NFS)同步至HDFS。2.数据存储层实时数据(原始流):Kafka(保留7天)作为实时数据管道,存储原始JSON格式数据,按`topic+partition`分区。实时计算结果:ClickHouse(列式存储)存储最近7天的用户行为明细(按`user_id`

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论