《Hadoop生态圈与Hive基础》模拟试卷
《Hadoop生态圈与Hive基础》模拟试卷满分100分|考试时间90分钟一、单项选择题每题2分共30分在Hadoop集群中负责资源管理和调度的核心组件是 A. HDFSB. MapReduceC. YARND. Hive以下命令中用于查看HDFS文件系统详细信息的是 A.hadoop fs -lsB.hadoop fs -catC.hadoop fs -duD.hadoop fs -tail在Hive中创建外部表时必须使用的关键字是 A.INTERNALB.EXTERNALC.TEMPORARYD.MANAGEDHDFS中负责存储实际数据块Block的节点是 A. NameNodeB. SecondaryNameNodeC. DataNodeD. ResourceManager关于Hive分区表下列说法正确的是 A. 分区字段可以在表的定义字段中重复出现B. 分区字段的值必须在定义表中提前定义C. 分区字段不能出现在表定义的普通字段中D. 分区表只能在创建后动态添加分区默认情况下Hive内部表的数据存储在 A./user/root/B./hive/data/C./user/hive/warehouse/D./tmp/MapReduce中Map阶段的输出数据经处理后进入Reducer阶段中间这个过程称为 A. PartitionB. ShuffleC. SortD. MergeYARN中ResourceManager默认的WEB UI端口号通常是 A. 50070B. 8088C. 9000D. 50075在Linux系统中将目录及其内容递归授予rwx权限的命令是 A.chmod 777 /pathB.chmod -R 755 /pathC.chown user:group /pathD.chmod 755 /path/*关于Hive内部表和外部表的区别以下说法错误的是 A. 删除内部表会删除元数据和实际数据B. 删除外部表只删除元数据不删除实际数据C. 外部表更适合作为源数据表或数据共享D. 默认创建的Hive表是外部表二、理论简答题每题8分共32分1. (8分) 请描述HDFS写数据的具体流程。提示涉及Pipeline机制、与NameNode/DataNode的交互。2. (8分) 简述Hive分区表相比普通表的优缺点并解释为什么分区字段不能在表的普通定义字段中重复出现。3. (8分) 给定一个微型Hadoop集群1台Master2台Slave请列举需要配置的关键文件并说明如何验证集群是否正常启动。4. (8分) MapReduce过程中Shuffle机制在Map阶段做了哪些处理三、程序题每题8分共24分1. (8分) MapReduce计算题给定输入数据textstudent teacher student may can can may请写出Map阶段输出的完整键值对Key-Value pairs形式。2. (8分) Hive Shell命令假设你在Hadoop本地文件系统有一个文件/home/user/data.txt你需要在Hive中创建一个分区表student_2023分区字段year2023并将该本地文件的数据加载到该分区表中。请写出完整的HQL语句。3. (8分) Java HDFS编程要求编写一段Java代码的核心片段实现从本地路径/local/data.txt上传文件到HDFS路径/user/hive/data/。请写出核心类名核心代码逻辑包括FileSystem实例化、路径设置、异常处理四、综合应用题14分背景现有学生数据文件students.txt内容格式如下textid,name,age,department,register_date 1,张三,20,计算机系,2023-09-01 2,李四,22,数学系,2022-09-01 3,王五,19,计算机系,2023-09-15 4,赵六,21,数学系,2023-10-01 5,孙七,23,英语系,2021-09-01任务请分步完成(1) 建表与加载数据 (6分)请写出创建一个外部表student_2023的HiveQL语句。要求字段根据文件内容定义。字段分隔符为逗号,。数据实际存储在/user/hive/external/student_2023。表中只保留register_date在2023年及以后的数据提示可通过分区或查询加载实现。(2) 数据统计 (4分)请使用HiveQL统计“每个系的学生人数”并按照人数从大到小排序输出。(3) 故障处理 (4分)如果在删除该表时你发现不小心把原始数据文件students.txt也删除了请分析原因并说明这是由内部表还是外部表造成的如何避免 参考答案与详细解析一、单项选择题答案C YARN负责资源调度A hadoop fs -ls查看列表BCC 分区字段不能出现在普通字段定义中它是独立的维度CBB 8088是ResourceManager50070是NameNodeB -R递归755表示所有者rwx组和他人rxD 默认创建的是内部表二、理论简答题解析1. HDFS写数据流程关键点① 客户端向NameNode发起上传请求NameNode检查文件是否存在/权限。② NameNode返回可写入的DataNode列表通常按副本数。③ 客户端与DataNode建立Pipeline管线传输数据块Block。④ 数据以包Packet为单位沿Pipe逐副本写入。⑤ 写入完成后由DataNode返回确认Ack客户端收到确认后告知NameNode完成。2. Hive分区表的优缺点优点查询效率大幅提升避免全表扫描数据管理方便按分区添加/删除。缺点创建过多的分区可能导致元数据膨胀影响小文件读写性能。解释分区字段是虚拟的维度列如year它在物理存储上作为目录层级与表内实际数据字段无关因此不能重复定义。3. 微型集群配置与验证关键配置文件core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,slaves。验证方式运行jps命令Master应显示NameNode, ResourceManagerSlave应显示DataNode, NodeManager。浏览器访问http://master_ip:50070NameNode UIhttp://master_ip:8088ResourceManager UI。4. Map阶段Shuffle处理①分区Partition根据Key决定数据去往哪个Reducer。②排序Sort对Map输出的Key进行排序。③溢写Spill内存缓冲区满后写入磁盘可能进行合并Merge。④FetchReducer从Map节点拉取数据需要的话。三、程序题答案1. Map阶段输出按单词拆分textstudent, 1 teacher, 1 student, 1 may, 1 can, 1 can, 1 may, 12. Hive加载本地数据到分区表sql-- 第一步建表 CREATE EXTERNAL TABLE student_2023 ( id INT, name STRING, age INT, department STRING ) PARTITIONED BY (year INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE; -- 第二步加载本地数据到特定分区 LOAD DATA LOCAL INPATH /home/user/data.txt OVERWRITE INTO TABLE student_2023 PARTITION (year2023);3. Java HDFS核心代码java// 核心类名 import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; // 核心代码 Configuration conf new Configuration(); FileSystem fs FileSystem.get(conf); Path src new Path(/local/data.txt); Path dst new Path(/user/hive/data/); try { fs.copyFromLocalFile(src, dst); } catch (Exception e) { e.printStackTrace(); } finally { fs.close(); }四、综合应用题答案(1) 建表与加载sql-- 创建外部表 CREATE EXTERNAL TABLE student_2023 ( id INT, name STRING, age INT, department STRING, register_date DATE ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE LOCATION /user/hive/external/student_2023; -- 加载数据同时过滤2023年及以后的数据 INSERT OVERWRITE TABLE student_2023 SELECT * FROM student_2023_source WHERE year(register_date) 2023; -- 注假设原始数据已加载到student_2023_source表或者利用分区方式。更简单的方法若直接生成数据sqlLOAD DATA LOCAL INPATH /path/students.txt OVERWRITE INTO TABLE student_2023; -- 然后根据register_date过滤但一般建表时直接利用分区策略。(2) 统计与排序sqlSELECT department, COUNT(*) as student_num FROM student_2023 GROUP BY department ORDER BY student_num DESC;(3) 故障分析原因如果删除表时实际数据文件被删除了说明你创建的是内部表。避免方法创建表时使用关键字CREATE EXTERNAL TABLE删除时只会删除元数据不会误删HDFS上的原始数据文件。