大数据技术——试题
大数据课程期末模拟试卷
考试时间:120分钟 满分:100分
一、单项选择题(共10题,每题2分,共20分)
-
在Linux系统中,以下哪个命令可以递归删除目录及其所有子目录和文件?
A.rmdirB.rm -rC.rm -fD.del -r -
Hadoop伪分布式模式下,
hdfs-site.xml中dfs.replication属性一般设置为以下哪个值?
A. 0 B. 1 C. 2 D. 3 -
以下哪个Hadoop守护进程属于YARN框架?
A. NameNode B. DataNode C. ResourceManager D. SecondaryNameNode -
在Hive中,以下哪个SQL语句用于查看表的结构(字段名、类型、注释)?
A.SHOW TABLES;B.DESC 表名;C.SHOW CREATE TABLE 表名;D.SELECT * FROM 表名 LIMIT 1; -
执行命令
chmod 600 ~/.ssh/authorized_keys后,该文件的权限是:
A. 自己读写,组员读写,其他人只读 B. 自己读写,组员和其他人无任何权限 C. 自己只读,组员只读,其他人无权限 D. 自己读写执行,组员只读,其他人只读 -
Sqoop将MySQL数据导入Hive时,若报错
ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf,最可能的原因是:
A. MySQL驱动未复制到Sqoop的lib目录 B. Hive服务未启动 C. Sqoop的lib目录缺少Hive的jar包(如hive-common) D. Hadoop未启动 -
以下哪个参数用于Sqoop导入时指定并行度(Map任务数)?
A.--num-mappersB.-mC. 以上两者都可以 D.--parallel -
Hive中创建分区表时,使用的关键字是:
A.PARTITIONB.PARTITIONED BYC.CLUSTERED BYD.DISTRIBUTE BY -
Hadoop集群启动后,在master节点使用
jps命令,以下哪个进程不属于master节点应有的进程?
A. NameNode B. DataNode C. SecondaryNameNode D. ResourceManager -
使用
LOAD DATA LOCAL INPATH '/home/user1/data.txt' OVERWRITE INTO TABLE student PARTITION(city='xiamen');语句时,OVERWRITE关键字的作用是:
A. 追加数据到现有分区 B. 覆盖目标分区中的原有数据 C. 忽略重复数据 D. 删除表后重建
二、填空题(共5题,每空2分,共10分)
-
在Linux中,查看当前主机名的命令是
________,修改主机名的命令是________。 -
Hadoop配置文件
core-site.xml中,用于配置HDFS默认文件系统地址的属性名称是________。 -
Hive中,将本地文件
data.txt加载到表student(非分区表)的SQL语句是:
LOAD DATA LOCAL INPATH '/home/user1/data.txt' ________ TABLE student; -
Sqoop导入数据时,如果要仅导入MySQL表中的指定列,需要使用
________参数。 -
在HDFS Web界面中,默认访问端口是
________;YARN ResourceManager Web界面的默认端口是________。
三、简答题(共4题,每题5分,共20分)
-
简述Hadoop伪分布式模式下需要修改哪些配置文件,并分别说明
core-site.xml和hdfs-site.xml中最核心的配置项(各写出两个)。 -
Hive中的分区表有什么优点?请结合课程中的例子,写出创建单字段静态分区表(分区字段为
city)的HQL语句,以及向指定分区加载数据的语句。 -
Sqoop导入数据时,
--delete-target-dir参数的作用是什么?为什么在多次导入同一张表时建议使用该参数? -
在Hadoop完全分布式集群中,master节点和slave节点的
hdfs-site.xml配置有何主要区别?请说明原因。
四、操作/命令题(共3题,每题6分,共18分)
-
请按顺序写出在Ubuntu系统中安装JDK并配置环境变量的完整命令(从复制压缩包到验证成功,至少包含5条命令)。
-
写出启动Hadoop集群和关闭Hadoop集群的命令(至少两种方式)。然后写出用
jps命令检查进程时,master节点和slave节点分别应该看到哪些进程。 -
在Hive中,已存在数据库
agentmanager,其中有一张分区表agentinformation,分区字段为province和city。现在需要将本地文件/home/user1/fujian_xiamen_new.txt中的数据覆盖加载到province='fujian', city='xiamen'分区中。请写出完整的HQL语句。
五、故障排除题(共1题,共12分)
问题描述:
某同学在执行以下Sqoop命令将MySQL数据导入Hive时,收到了错误信息(见下方)。
bash
./bin/sqoop import \ --connect jdbc:mysql://master:3306/erp?serverTimezone=UTC \ --username zeng --password 123456 \ --table emp \ --where "esalary > 4000" \ --delete-target-dir \ --hive-import --hive-table emp_salary \ -m 3
错误信息(部分):
text
ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly. ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
请回答:
-
(3分)分析该错误的最可能原因。
-
(6分)写出完整的解决步骤(包括具体命令)。
-
(3分)解决后,重新运行上述Sqoop命令,数据将被导入到Hive的哪个数据库的哪张表中?数据在HDFS上的默认存储路径是什么?
六、综合应用题(共1题,共20分)
背景:
某电商公司使用MySQL存储订单数据,订单表orders的结构如下:
sql
CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_name VARCHAR(100), product_name VARCHAR(200), amount DECIMAL(10,2), order_date DATE );
表中已有大量数据。公司希望将2024年1月1日之后的订单数据导入到Hive中,并且按年份和月份进行分区(例如分区字段为year和month),以提高按时间查询的效率。
任务:
-
(6分)写出Sqoop命令,将符合条件的订单数据从MySQL直接导入到Hive(先导入到一个临时非分区表,表名暂定为
orders_temp)。假设MySQL连接信息:master:3306,数据库名ecommerce,用户名zeng,密码123456。 -
(6分)在Hive中,写出创建目标分区表
orders_partitioned的HQL语句,该表包含与原订单表相同的字段(order_id,customer_name,product_name,amount,order_date),并按照year(INT)和month(INT)进行分区,行格式字段终止符为','。 -
(8分)写出将
orders_temp表中的数据插入到分区表orders_partitioned中的HQL语句。要求使用动态分区,并根据order_date自动生成year和month分区字段值。同时请说明在执行动态分区插入前需要设置哪个Hive参数。
参考答案
一、单项选择题
-
B 2. B 3. C 4. B 5. B 6. C 7. C 8. B 9. B 10. B
二、填空题
-
hostname;hostnamectl set-hostname -
fs.defaultFS -
INTO -
--columns -
50070;8088
三、简答题
1. 简述Hadoop伪分布式模式下需要修改哪些配置文件,并分别说明core-site.xml和hdfs-site.xml中最核心的配置项(各写出两个)。
参考答案:
需要修改的配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml。
-
core-site.xml:fs.defaultFS(指定HDFS的NameNode地址),hadoop.tmp.dir(指定Hadoop临时目录)。 -
hdfs-site.xml:dfs.replication(副本数,伪分布式设为1),dfs.namenode.name.dir(NameNode存储目录)。
2. Hive中的分区表有什么优点?请结合课程中的例子,写出创建单字段静态分区表(分区字段为city)的HQL语句,以及向指定分区加载数据的语句。
参考答案:
优点:提高查询效率,避免全表扫描;便于数据管理,可以按分区进行删除或备份。
创建语句:
sql
CREATE TABLE cityperson ( id string, name string, age int ) PARTITIONED BY (city string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
加载数据:
sql
LOAD DATA LOCAL INPATH '/home/user1/citydataForxiamen.txt' INTO TABLE cityperson PARTITION(city='xiamen');
3. Sqoop导入数据时,--delete-target-dir参数的作用是什么?为什么在多次导入同一张表时建议使用该参数?
参考答案:
作用:如果HDFS上目标目录已经存在,则先删除该目录再导入。
原因:Sqoop导入时会自动创建目标目录,如果目录已存在(例如之前导入过),会报错“目录已存在”。使用该参数可以避免手动删除目录的麻烦,确保导入顺利进行。
4. 在Hadoop完全分布式集群中,master节点和slave节点的hdfs-site.xml配置有何主要区别?请说明原因。
参考答案:
-
master节点:保留NameNode相关配置(如
dfs.namenode.name.dir),注释或删除DataNode配置(dfs.datanode.data.dir)。 -
slave节点:保留DataNode相关配置(
dfs.datanode.data.dir),注释或删除NameNode配置。
原因:master节点作为NameNode,只负责管理元数据,不存储实际数据块;slave节点作为DataNode,只负责存储数据块,不应承担NameNode的角色。二者职责分离,避免冲突。
四、操作/命令题
1. 请按顺序写出在Ubuntu系统中安装JDK并配置环境变量的完整命令(从复制压缩包到验证成功,至少包含5条命令)。
参考答案:
bash
sudo cp jdk-8u161-linux-x64.tar.gz /opt cd /opt sudo tar -zxvf jdk-8u161-linux-x64.tar.gz sudo vim /etc/profile # 添加JAVA_HOME等 source /etc/profile java -version
2. 写出启动Hadoop集群和关闭Hadoop集群的命令(至少两种方式)。然后写出用jps命令检查进程时,master节点和slave节点分别应该看到哪些进程。
参考答案:
启动:start-all.sh 或 start-dfs.sh + start-yarn.sh
关闭:stop-all.sh 或 stop-dfs.sh + stop-yarn.sh
master节点进程:NameNode, SecondaryNameNode, ResourceManager, NodeManager
slave节点进程:DataNode, NodeManager
3. 写出HQL语句:覆盖加载数据到分区表agentinformation的(province='fujian', city='xiamen')分区。
参考答案:
sql
LOAD DATA LOCAL INPATH '/home/user1/fujian_xiamen_new.txt' OVERWRITE INTO TABLE agentinformation PARTITION(province='fujian', city='xiamen');
五、故障排除题
1. 原因:Sqoop运行环境中缺少Hive的依赖库,具体是hive-common-*.jar没有被加载。
2. 解决步骤:
-
① 找到Hive安装目录下的
hive-common-3.1.1.jar(通常在/opt/apache-hive-3.1.1-bin/lib/)。 -
② 将该jar包复制到Sqoop的lib目录:
bash
sudo cp /opt/apache-hive-3.1.1-bin/lib/hive-common-3.1.1.jar /opt/sqoop-1.4.7.bin__hadoop-2.6.0/lib/
-
③ 重新执行Sqoop导入命令。
3. 导入后的位置:
-
Hive数据库:
default(因为命令中没有指定库,默认使用default库)。 -
Hive表名:
emp_salary。 -
HDFS存储路径:
hdfs://master:9000/user/hive/warehouse/emp_salary(Hive默认仓库目录下)。
六、综合应用题
1. Sqoop命令(导入到临时非分区表):
bash
./bin/sqoop import \ --connect jdbc:mysql://master:3306/ecommerce?serverTimezone=UTC \ --username zeng --password 123456 \ --table orders \ --where "order_date > '2024-01-01'" \ --delete-target-dir \ --hive-import --hive-table orders_temp \ -m 3
2. 创建分区表HQL语句:
sql
CREATE TABLE orders_partitioned ( order_id INT, customer_name STRING, product_name STRING, amount DECIMAL(10,2), order_date DATE ) PARTITIONED BY (year INT, month INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
3. 动态分区插入数据HQL语句:
sql
-- 设置动态分区为非严格模式 SET hive.exec.dynamic.partition.mode=nonstrict; INSERT INTO TABLE orders_partitioned PARTITION(year, month) SELECT order_id, customer_name, product_name, amount, order_date, YEAR(order_date) AS year, MONTH(order_date) AS month FROM orders_temp;
说明:需要设置的参数是hive.exec.dynamic.partition.mode=nonstrict,否则Hive默认不允许使用动态分区(要求至少有一个静态分区列)。
更多推荐
所有评论(0)