版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年大数据工程师考试试题及答案一、单项选择题(每题2分,共20分)1.以下关于HDFS默认块大小的描述,正确的是()A.16MBB.32MBC.64MBD.128MB答案:D2.下列Spark操作中,属于转换(Transformation)操作的是()A.collect()B.reduce()C.groupByKey()D.count()答案:C3.Kafka中,消费者组(ConsumerGroup)的主要作用是()A.提高生产者的发送吞吐量B.实现消息的广播与负载均衡C.保证消息的顺序性D.减少Broker的存储压力答案:B4.数据倾斜(DataSkew)最可能导致的问题是()A.计算任务超时B.数据丢失C.存储成本增加D.网络带宽浪费答案:A5.Flink中,事件时间(EventTime)的语义依赖于()A.处理时间(ProcessingTime)B.水印(Watermark)C.检查点(Checkpoint)D.窗口(Window)答案:B6.HBase中,RegionServer负责管理的核心组件是()A.HMasterB.RegionC.ZooKeeperD.WAL(预写日志)答案:B7.数据湖(DataLake)与数据仓库(DataWarehouse)的主要区别在于()A.数据存储格式B.数据结构化程度C.查询性能D.数据来源数量答案:B8.ClickHouse中,适合高频写入、低频查询场景的表引擎是()A.MergeTreeB.LogC.ReplacingMergeTreeD.Distributed答案:B9.以下不属于Kudu核心特性的是()A.支持ACID事务B.高并发随机读C.列式存储D.实时写入与实时查询答案:A(Kudu支持有限事务,非完整ACID)10.机器学习模型训练中,使用SparkMLlib的Pipeline时,特征工程阶段的Transformer需要()A.调用fit()方法生成模型B.直接调用transform()方法处理数据C.与Estimator交替使用D.仅用于测试集处理答案:B二、填空题(每题2分,共20分)1.Hadoop生态中,负责资源管理的组件是________。答案:YARN2.SparkRDD的持久化级别中,MEMORY_AND_DISK_SER表示________。答案:数据先存内存,内存不足时溢写磁盘,且数据序列化存储3.Kafka的消息偏移量(Offset)由________维护。答案:消费者(或消费者组)4.Flink的状态后端(StateBackend)支持的三种类型是:MemoryStateBackend、FsStateBackend和________。答案:RocksDBStateBackend5.Hive的元数据存储通常使用________数据库(填写常见选型)。答案:MySQL6.数据治理的核心目标是保障数据的________、完整性和可用性。答案:准确性(或一致性)7.实时计算中,窗口(Window)的常见类型包括时间窗口、计数窗口和________。答案:会话窗口(SessionWindow)8.分布式事务解决方案中,Seata的AT模式依赖于________实现数据回滚。答案:全局锁(或回滚日志)9.数据脱敏的常见方法包括匿名化、________和掩码处理。答案:泛化(或随机化)10.机器学习中,处理类别不平衡数据的常用方法有过采样、欠采样和________。答案:调整类别权重(或使用代价敏感学习)三、简答题(每题8分,共40分)1.简述Hive与SparkSQL在执行引擎上的主要差异。答案:Hive基于MapReduce引擎,将SQL转换为多个MapReduce任务,通过YARN调度,适合离线批量处理,但任务启动开销大、延迟高;SparkSQL基于Spark的内存计算引擎,将SQL转换为RDD/Dataset的DAG执行计划,支持内存迭代计算和缓存,任务执行效率更高,且支持实时查询(如SparkStreaming结合)和交互式分析。2.说明Kafka如何保证消息的可靠性(至少列出3点机制)。答案:(1)生产者确认(ACK机制):生产者发送消息时,可设置ACK=0(不确认)、1(Leader确认)、-1(ISR全确认),ACK=-1时可靠性最高;(2)Broker持久化:消息写入磁盘(通过分段日志+索引),结合副本机制(ISR中的Follower同步),避免单节点故障;(3)消费者偏移量提交:消费者手动或自动提交消费偏移量,避免重复消费或数据丢失;(4)日志压缩(LogCompaction):对相同Key的消息保留最新值,防止日志无限增长导致的存储问题。3.数据倾斜的检测方法及解决思路(至少3种)。答案:检测方法:(1)观察任务执行日志,查看各Reducer/Task的运行时间,若某任务耗时远高于其他,可能存在倾斜;(2)统计Key的分布,通过GROUPBYKeyCOUNT()定位高频Key;(3)监控集群指标(如CPU、内存),倾斜任务所在节点资源占用异常。解决思路:(1)业务侧优化:拆分高频Key(如添加随机前缀),分散到多个任务处理;(2)参数调优:增大Reducer数量,或调整Spark的shuffle分区数(spark.sql.shuffle.partitions);(3)算法优化:使用Map端聚合(如Hive的mapjoin、Spark的broadcastjoin)避免Shuffle;(4)存储层优化:预聚合倾斜Key的数据,减少计算时的压力。4.简述Flink的状态管理机制(包括状态类型和存储方式)。答案:Flink的状态分为算子状态(OperatorState)和键值状态(KeyedState)。算子状态与算子实例绑定(如Kafka消费者的分区偏移量),支持列表状态(ListState)、联合列表状态(UnionListState)等;键值状态与Key绑定(需KeyBy操作),支持值状态(ValueState)、列表状态(ListState)、映射状态(MapState)等。状态存储依赖状态后端:MemoryStateBackend将状态存内存(测试用);FsStateBackend将元数据存内存、状态存分布式文件系统(如HDFS);RocksDBStateBackend将状态存本地RocksDB数据库(适合大状态场景)。状态通过检查点(Checkpoint)实现持久化,故障时可恢复。5.数据治理中的主数据管理(MasterDataManagement,MDM)主要包含哪些内容?答案:主数据管理是对企业核心业务实体(如客户、产品、供应商)的统一管理,内容包括:(1)主数据标准制定:定义主数据的字段、格式、业务规则(如客户ID的唯一性);(2)主数据整合:通过ETL或MDM平台,合并多源系统的主数据,消除冲突(如同一客户在不同系统的不同编码);(3)主数据共享:建立主数据中心库,提供API或服务供各业务系统调用,确保全局一致性;(4)主数据生命周期管理:覆盖创建、更新、归档、删除的全流程,记录变更日志;(5)主数据质量监控:通过规则校验(如完整性、准确性)和血缘分析,保障主数据质量。四、编程题(每题10分,共20分)1.用SparkSQL编写代码,处理用户行为日志表(user_behavior),计算“次日留存率”。表结构:user_id(用户ID,长整型)、event_time(事件时间,时间戳)、event_type(事件类型,字符串)。要求:(1)提取用户首次活跃日期(首次访问日期);(2)计算首次活跃后次日(+1天)再次活跃的用户数;(3)输出格式:首次活跃日期、总用户数、次日留存用户数、留存率(保留4位小数)。答案:```scalaimportorg.apache.spark.sql.functions._importorg.apache.spark.sql.expressions.scalalang.typed//读取用户行为日志表valuserBehavior=spark.table("user_behavior")//步骤1:提取用户首次活跃日期valfirstActive=userBehavior.select(col("user_id"),to_date(from_unixtime(col("event_time"))).as("active_date")).groupBy("user_id").agg(min("active_date").as("first_active_date"))//步骤2:关联用户所有活跃日期,筛选次日活跃记录valuserActive=userBehavior.select(col("user_id"),to_date(from_unixtime(col("event_time"))).as("active_date")).distinct()//去重同一用户同一天的多次活跃valretentionData=firstActive.join(userActive,firstActive("user_id")===userActive("user_id"),"left").withColumn("is_second_day",when(userActive("active_date")===date_add(firstActive("first_active_date"),1),1).otherwise(0))//步骤3:按首次活跃日期聚合计算留存率valretentionResult=retentionData.groupBy("first_active_date").agg(countDistinct("user_id").as("total_users"),sum("is_second_day").as("retained_users")).withColumn("retention_rate",round(col("retained_users").divide(col("total_users")),4)).orderBy("first_active_date")retentionResult.show()```2.用Flink编写实时计算程序,统计“每10分钟内,各商品分类的点击量”,要求使用滑动窗口(滑动步长5分钟),并输出结果到Kafka。已知:-输入流:Kafka主题“user_clicks”,格式为JSON(字段:user_id,item_id,category_id,click_time(时间戳));-输出主题:“category_click_stats”,格式为CSV(category_id,click_count,window_start,window_end)。答案:```javaimportmon.eventtime.;importmon.serialization.SimpleStringSchema;importorg.apache.flink.connector.kafka.source.KafkaSource;importorg.apache.flink.connector.kafka.sink.KafkaSink;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows;importorg.apache.flink.streaming.api.windowing.time.Time;importorg.apache.flink.util.Collector;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;publicclassCategoryClickStats{publicstaticvoidmain(String[]args)throwsException{StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(4);//1.读取Kafka输入流KafkaSource<String>kafkaSource=KafkaSource.<String>builder().setBootstrapServers("kafka-broker:9092").setTopics("user_clicks").setGroupId("flink-category-stats-group").setValueOnlyDeserializer(newSimpleStringSchema()).build();DataStream<String>clickStream=env.fromSource(kafkaSource,WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(5)),"KafkaInput");//2.解析JSON并提取事件时间和分类IDDataStream<CategoryClick>parsedStream=clickStream.map(value->{ObjectMappermapper=newObjectMapper();JsonNodenode=mapper.readTree(value);longclickTime=node.get("click_time").asLong();StringcategoryId=node.get("category_id").asText();returnnewCategoryClick(categoryId,clickTime);}).assignTimestampsAndWatermarks(WatermarkStrategy.<CategoryClick>forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner((event,timestamp)->event.clickTime));//3.定义滑动窗口(窗口大小10分钟,滑动步长5分钟)DataStream<String>resultStream=parsedStream.keyBy(event->event.categoryId).window(SlidingEventTimeWindows.of(Time.minutes(10),Time.minutes(5))).aggregate(newCategoryClickAggregate(),newWindowResultFunction());//4.输出到KafkaKafkaSink<String>kafkaSink=KafkaSink.<String>builder().setBootstrapServers("kafka-broker:9092").setRecordSerializer(newKafkaRecordSerializationSchemaBuilder<String>().setTopic("category_click_stats").setValueSerializationSchema(newSimpleStringSchema()).build()).build();resultStream.sinkTo(kafkaSink).name("KafkaOutput");env.execute("Real-timeCategoryClickStatistics");}//自定义POJO类publicstaticclassCategoryClick{publicStringcategoryId;publiclongclickTime;publicCategoryClick(StringcategoryId,longclickTime){this.categoryId=categoryId;this.clickTime=clickTime;}}//自定义聚合函数(统计点击次数)publicstaticclassCategoryClickAggregateimplementsAggregateFunction<CategoryClick,Long,Long>{@OverridepublicLongcreateAccumulator(){return0L;}@OverridepublicLongadd(CategoryClickvalue,Longaccumulator){returnaccumulator+1;}@OverridepublicLonggetResult(Longaccumulator){returnaccumulator;}@OverridepublicLongmerge(Longa,Longb){returna+b;}}//自定义窗口结果函数(格式化输出)publicstaticclassWindowResultFunctionimplementsWindowFunction<Long,String,String,TimeWindow>{@Overridepublicvoidapply(StringcategoryId,TimeWindowwindow,Iterable<Long>aggregateResult,Collector<String>out){longclickCount=aggregateResult.iterator().next();StringwindowStart=String.valueOf(window.getStart());StringwindowEnd=String.valueOf(window.getEnd());out.collect(String.format("%s,%d,%s,%s",categoryId,clickCount,windowStart,windowEnd));}}}```五、综合分析题(20分)某电商公司计划构建大数据平台,需处理以下场景:-业务系统日志(如用户点击、下单、支付):日均数据量500GB,实时性要求高(延迟<5秒);-业务数据库(MySQL)增量数据:日均变更量100GB,需同步到分析库;-历史订单数据:总量10TB,需支持复杂OLAP查询(如多表关联、分组聚合);-机器学习需求:需基于用户行为、订单、商品等数据训练推荐模型。请设计该平台的技术架构,并说明各组件的选型及作用(需涵盖数据采集、存储、计算、应用层)。答案:技术架构设计如下(分层说明):1.数据采集层-业务日志采集:使用Flume或Logstash实时采集服务器日志,发送至Kafka消息队列(选型Kafka,原因:高吞吐量、支持消息持久化和多消费者订阅,满足5秒内的实时性要求);-数据库增量同步:使用Canal(针对MySQL)解析Binlog,捕获增量变更,通过Kafka传输(Canal支持准实时同步,延迟可控制在毫秒级,适合业务数据库的增量同步需求);-历史数据导入:通过Sqoop将MySQL历史订单数据批量导入HDFS或Hive(Sqoop支持关系型数据库与Hadoop生态的高效迁移)。2.数据存储层-实时数据存储:Kafka作为实时数据缓冲区(保留7天日志,支持实时计算任务订阅);-原始数据存储:HDFS存储全量原始日志和历史订单数据(HDFS适合海量非结构化/半结构化数据的低成本存储,支持高容错);-实时计算中间存储:Kudu存储实时聚合的用户行为指标(如实时点击量),支持快速更新和随机读(Kudu兼容Spark/Flink,适合实时OLAP场景);-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年聊城市茌平信发铝制品有限公司大量招聘参考考试试题及答案解析
- 2025湖南怀化市教育局直属学校招聘教职工65人参考考试试题及答案解析
- 2025内蒙古鄂尔多斯羊绒服装集团绒纺事业部招聘20人参考考试题库及答案解析
- 2025广西来宾市忻城县城镇公益性岗位工作人员招聘3人备考笔试试题及答案解析
- 2025内蒙古北疆交通天然气有限公司招聘6人备考考试试题及答案解析
- 网店电子合同范本
- 职工工装合同范本
- 联合协议书的样本
- 联盟商户合同范本
- 联通合作合同范本
- 部队地雷使用课件
- 航空材料基础培训课件
- 血细胞形态学幻灯片课件
- 铁路车务培训课件
- 2025至2030军工自动化行业市场深度研究及发展前景投资可行性分析报告
- 海上风电场项目陆上集控中心环评报告公示
- 老旧小区消防系统升级改造方案
- 起重机械应急救援预案演练记录
- 新专业申报答辩课件
- 护理事业十五五发展规划(2026-2030年)
- 2026版创新设计高考总复习数学人教A版学生用-学生答案一~五章
评论
0/150
提交评论