第一章 数据仓库的简介
一、填空题
1.数据仓库的目的是构建面向 分析 的集成化数据环境。
2.Hive是基于 Hadoop 的一个数据仓库工具。
3.数据仓库分为3层,即 源数据层 、 数据应用层 和数据仓库层。
4.数据仓库层可以细分为 明细层 、 中间层 和业务层。
5.在数据仓库建设中,一般会围绕着 星状模型 和雪花状模型来设计数据模型。
二、判断题
1.数据仓库是以业务流程来划分应用程序和数据库。 ( 错 )
2.数据仓库中的数据一般是很少更新的。 ( 对 )
3.数据仓库模型中星状模型和雪花状模型都属于维度建模。 ( 对 )
4.Hive可以将非结构化的数据文件映射为一张数据表。 ( 错 )
5.从Hive 0.14开始支持事务。 ( 对 )
三、选择题
1.下列选项中,属于数据仓库特点的是( C )。
A.面向对象的
B.时效的
C.数据集成的
D.面向数据的
2.下列选项中,不属于数据Hive架构组成部分的是?( D )
A.Compiler
B.Optimizer
C.Thrift Server
D.HiveServer2
3.下列选项中,对于Hive工作原理说法错误的是( A )。
A.Driver向MetaStore获取需要的元数据信息
B.Driver向Compiler发送获取计划的请求
C.Driver向execution engine提交执行计划
D.execution engine负责与HDFS与MapReduce的通信
4.下列选项中,不属于Hive支持的集合数据类型是( C )。
A.ARRAY
B.MAP
C.LIST
D.STRUCT
四、简答题
1.简述数据仓库分层的源数据层、数据仓库层和数据应用层的执行流程。
首先,源数据层采集并存储的数据来源于不同的数据源,然后,通过ETL(抽取-转换-加载)的方式将清洗和转换后的数据装载到数据仓库层,最终,数据应用层根据实际业务需求从数据仓库层中获取数据实现报表展示、数据分析或数据挖掘等操作。
第二章 Hive数据仓库应用
一、填空题
1.克隆虚拟机时,与原始虚拟机不共享任何资源的克隆方式是 完整克隆 。
2.网卡设置为静态路由协议后,需要添加参数DNS1、 IPADDR 、 NETMASK 和 GATEWAY 。
3.密钥文件id_rsa和 id_rsa.pub分别是 私钥 文件和 公钥 文件。
4.Centos7初始化系统环境的命令是 ifcfg-ens33 。
5.规划Zookeeper集群中服务器数量的公式为 2n+1 。
二、判断题
1.Zookeeper集群可以存在多个Follower和Leader。 ( 错 )
2.2888表示Leader选举过程中的投票通信端口。 ( 错 )
3.Hadoop的高可用集群需要两个NameNode和两个ResourceManager。 ( 对 )
4.在嵌入模式下运行Hive时,会在当前目录下生成元数据文件。 ( 对 )
5.在启动HiveServer2服务的同时也会默认启动Metastore服务。 ( 对 )
三、选择题
1.下列选项中,正确启动Zookeeper服务的命令是( C )。
A.start zkServer.sh
B.start zookeeper
C.zkServer.sh start
D.start zookeeper.sh
2.下列选项中,不属于Hadoop高可用集群进程的是?( D )
A.DFZKFailoverController
B.JournalNode
C.QuorumpeerMain
D.Master
3.下列选项中,关于部署Hive说法正确的是( B )。
A.本地模式部署的Hive不支持元数据共享
B.远程模式部署的Hive支持元数据共享
C.HiveServer2不支持多客户端连接
D.Hive客户端工具Beeline可以远程连接单独启动的Metastore服务
四、简答题
1.简述SSH服务的作用。
(1)、可以通过远程连接工具连接虚拟机,便于虚拟机的操作。
(2)、可以实现免密登录功能,避免集群各节点间频繁访问需要输入密码,影响服务器的连续运转。
五、操作题
1.通过修改主机名的命令将虚拟机Node_01的主机名修改为hello。
hostnamectl set-hostname hello
第三章 Hive的数据定义语言
一、填空题
1.操作Hive时,默认使用的数据库是 default 。
2.若需要同时删除数据库和数据库中的表,则需要在删除数据库的语句中添加 CASCADE 。
3.分区主要是将表的整体数据根据业务需求,划分成多个子目录来存储,每个子目录对应一个 分区 。
4.索引是一种以空间换取 时间 的方式。
5.临时表只对当前会话可见,数据被存储在用户的 临时 目录,并在会话结束时 删除 。
二、判断题
1.当删除外部表时,外部表的元数据和数据文件会一同删除。 ( 错 )
2.查看表结构信息语法中,DESCRIBE要比DESC查看的信息更加详细。 ( 错 )
3.分区表中的分区字段名称不能与分区表的列名重名。 ( 对 )
4.分桶表可以根据多列进行分桶。 ( 错 )
三、选择题
1.下列选项中,不属于Hive内置Serde的是( A )。
A.FIELD TERMINATED BY
B.COLLECTION ITEMS TERMINATED BY
C.MAP KYS TERMINATED BY
D.NULL DEFINED AS
2.下列选项中,下列关于Hive分桶表描述错误的是( BD )。
A.创建分桶表是可以不指定排序列
B.分桶表不能与分区表同时使用
C.分桶个数决定分桶表的存储目录下生成小文件的数量
D.分桶表中指定分桶的列需要与排序的列保持一致
3.下列选项中,关于视图说法错误的是( B )。
A.视图是只读的
B.视图包含数据文件
C.创建视图时无法指定列的数据类型
D.视图是通过查询语句创建的
四、简答题
1.简述索引如何避免扫描全表数据。
在涉及索引列的查询时,首先会去索引表中查找索引列的值在HDFS对应的数据文件路径以及索引列的值在数据文件中的偏移量,通过这两个值去扫描全表的部分数据,从而避免全表扫描。
五、操作题
1.在数据库hive_database中创建外部表external_test,关于外部表external_ test的结构要求如下:
(1)要求数据文件存储位置为/test/hive/external_ test
(2)外部表external_ test包含5列,这5列的数据类型分别是STRING、INT、FLOAT、ARRAY和MAP,并自定义列名。
(3)指定数据类型为ARRAY的列中元素的数据类型为STRING。
(4)指定数据类型为MAP的列中每个键值对KEY:VALUE的数据类型为STRING:INT。
CREATE TABLE IF NOT EXISTS
hive_database.external_test(
col1 INT,
col2 STRING,
col3 FLOAT,
col4 ARRAY<STRING>,
col5 MAP<STRING, INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ':'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY '-'
STORED AS textfile
LOCATION '/test/hive/external_test';
2.在数据库hive_database中创建与外部表external_test表结构一致的分区表partitioned_test,指定文件存储位置为/test/hive/partitioned_ test,在分区表中创建两个分区字段,自定义分区字段的名称和数据类型。
CREATE TABLE IF NOT EXISTS
hive_database.partitioned_test(
col1 INT,
col2 STRING,
col3 FLOAT,
col4 ARRAY<STRING>,
col5 MAP<STRING, INT>
)
PARTITIONED BY (
col6 STRING,
col7 STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ':'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY '-'
STORED AS textfile
LOCATION '/test/hive/partitioned_test';
第四章 Hive数据操作语言
一、填空题
1.加载文件是将文件中的 结构化 数据加载到指定的Hive数据表中。
2.在Hive中可以通过 静态分区 、动态分区和混合分区的方式向分区表中加载数据。
3.查询插入可分为 单表插入 、多表插入和本地插入。
4.IMPORT和EXPORT分别代表 导入 和 导出 。
5.在使用Hive动态分区前,需要修改Hive的配置参数hive.exec.dynamic.partition.mode为 nonstrict 。
二、判断题
1.Hive中加载文件只能加载HDFS文件系统中的文件。 ( 错 )
2.LOCATION子句可以将数据文件中的数据加载到数据表。 ( 错 )
3.本地插入是将本地系统文件中的数据插入到数据表。 ( 错 )
4.多表插入是将多个表的查询结果插入到多张表。 ( 对 )
5. 保证插入数据表列的数量与查询数据表列的数量一致。 ( 对 )
三、选择题
1.下列选项中,关于插入数据的语句书写正确的是( A )。
A.INSERT INTO TABLE table1 VALUES (11);
B.INSERT INTO TABLE table2 VALUES (user01);
C.INSERT INTO TABLE table3 VALUES (11,20)(22,30);
D.INSERT INTO TABLE table3 VALUES (user01),(user02);
2.下列选项中,关于查询数据的语句书写正确的是( B )。
A.SELECT username city FROM table1;
B.SELECT * FROM table1;
C.SELECT username FROM table1 WHERE province;
D.SELECT username FROM table1 WHERE province=ShanDong;
四、简答题
1.简述通过LOAD DATA语句向指定数据表加载数据文件时的注意事项。
文件分隔符需要与数据表的字段分隔符保持一致。
文件换行符需要与数据表的行分隔符保持一致。
文件中的集合数据与数据表的集合元素分隔符保持一致。
文件中的键值对数据与创建数据表时指定键值对的分隔符保持一致。
文件中每个字段的顺序需要与数据表中字段的顺序保持一致
文件的字段数量需要与数据表的字段数量保持一致。
2. 简述动态分区与混合分区的区别。
动态分区加载数据时只需要指定分区字段即可,混合分区加载数据时必须指定一个分区包含分区字段和分区字段值,其它分区可以直接使用分区字段即可。
五、操作题
1. 将本地文件系统目录/export/data/hive_data中的文件test.txt加载到分区表partitioned_table的二级分区province=ShanDong/city=HeZe。
LOAD DATA LOCAL INPATH '/export/data/hive_data/test.txt' INTO TABLE partitioned_table PARTITION (province='ShanDong', city='HeZe');
第五章 Hive数据查询语言
一、填空题
1.SELECT句式中分组操作的子句是 GROUP BY。
2.复杂运算符S.x 支持的数据类型是 STRUCT 。
3.公用表表达式是一个临时 结果集 。
4. UNION 语句用于将多个SELECT句式的结果合并为一个结果集。
5.抽样查询分为数据块抽样、 随机抽样 和 分桶抽样 。
二、判断题
1.LIMIT子句用于限制查询表的行数据。 ( 对)
2.DISTINCT子句可以对查询结果进行去重。 ( 对 )
3.关系运算符RLIKE支持所有基本数据类型。 ( 错 )
4.分组操作会发出MapReduce任务进行处理。 ( 对 )
5.JOIN语句中LEFT OUTER JOIN和LEFT JOIN所表达的意思相同。 ( 对)
三、选择题
1.下列选项中,不属于关系运算符的是( B)。
A.!=
B.!
C.NOT LIKE
D.LIKE
2.下列选项中,关于分组操作的描述正确的是( D)。
A.空值不会进行分组处理
B.GROUP BY子句执行顺序在SELECT语句之后
C.使用GROUP BY子句时,在SELECT语句中只能出现聚合函数不能出现列
D.GROUP BY子句中的列需要与SELECT语句中的列保持一致
四、简答题
1.简要描述左外连接、右外连接、全外连接和内连接的关联方式。
内连接:根据关联列将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据。
左外连接:根据关联列保留左表完全值,若右表中存在与左表中匹配的值,则保留;若右表中不存在与左表中匹配的值,则以NULL代替。
右外连接:根据关联列保留右表完全值,若左表中存在与右表中匹配的值,则保留;若左表中不存在与右表中匹配的值,则以NULL代替;
全外连接:根据关联列返回左表和右表中的所有数据,若关联不上则以NULL代替。
2. 简述SORT BY子句和ORDER BY子句的区别。
ORDER BY用来对查询结果做全局排序,查询的结果集只会交由一个Reducer处理。
SORT BY用来对查询结果做局部排序,根据MapReduce默认划分Reducer个数的规则,将查询结果集交由多个Reducer处理。
第六章 Hive函数
一、填空题
1.Hive自定义函数分为即UDF、 UDTF 和 UDAF 。
2.将指定列中的数据组合为数组,去重复数据的函数是 COLLECT_SET 。
3.编写UDTF程序时需要继承类 GenericUDTF 。
4.使用 侧视图 时可以为表生成函数指定列的别名。
二、判断题
1.UDF表示用户自定义聚合函数。 ( 错)
2.ROUND()函数返回0~1的随机值。 ( 错 )
3.CONCAT()函数按顺序拼接字符串,没有分隔符。 ( 对 )
4.TRIM()函数用于拆分字符串。 ( 错 )
三、选择题
1.下列选项中,不属于字符串函数的是( D)。
A.RPAD()
B.REPEAT()
C.SUBSTR()
D.COALESCE()
2.下列选项中,属于数学函数的是(C )。
A.SUM()
B.COUNT()
C.NEGATIVE ()
D.BINARY()
四、简答题
1.简述字符串函数CONCAT()和CONCAT_WS()的区别。
CONCAT()按照顺序对字符串进行拼接,没有分隔符。
CONCAT_WS()按照指定分隔符对字符串进行拼接。
2.简述字符串函数COLLECT_SET()和COLLECT_LIST()的区别。
COLLECT_SET()将指定列中的数据组合为数组,去重复数据。
COLLECT_LIST()将指定列中的数据组合为数组,不去重复数据。
五、操作题
1. 创建UDF程序实现比较两列数值是否相等,若比较的两列数值不相等,则输出两列数值中较小的值,以及两列数值相加的计算结果。
public class hiveUDF extends UDF {
public String evaluate(int col1,float col2){
if (col1>col2){
return "min:"+col2+",diffe:"+(col1+col2);
}else if(col1<col2){
return "min:"+col1+",diffe:"+(col2+col1);
}else {
return "0";
}
}
}
第七章 Hive事务
一、填空题
1.Hive事务表中的数据会被分成两种类型的文件,即基础文件和 增量文件 。
2.开启Hive事务时必须指定Compactor的工作线程数大于等于 1 。
3.Hive事务表的文件存储格式必须为 ORC 。
4.Hive通过HiveServer2中运行的一组后台进程 compacter 实现事务的支持。
二、判断题
1.Hive默认开启事务的支持。 ( 错)
2.更新Hive事务表数据操作的列必须在事务表中已存在。 ( 对)
3.删除Hive事务表数据操作时,若不指定条件,则无法执行。 ( 错)
三、选择题
1.下列选项中,不属于事务四大特性的是(D )。
A.原子性
B.隔离性
C.持久性
D.容忍性
四、简答题
1.简述基础文件和增量文件的作用。
基础文件用于存放Hive事务表中的原始数据;增量文件用于存储Hive事务表存储的新增、更新和删除的数据
五、操作题
1. 将事务表tran_clustered_table中员工姓名为user03的员工id更新为010,并且年龄更新为33。
UPDATE hive_database.tran_clustered_table
SET age = 33,id="010"
WHERE name = "user03";
第八章 Hive优化
一、填空题
1.文件存储格式ORCFile的使用方式是 行列存储 。
2.Hive默认的文件存储格式是 TextFile 。
3.ORCFile自身支持两种压缩,分别是 ZLIB 和 SNAPPY 。
4.参数hive.exec.parallel用于配置 并行执行 。
二、判断题
1.笛卡儿积JOIN只能使用一个Reduce处理。 ( 对)
2.ORCFile文件存储格式可以通过LOAD语句加载数据。 ( 错)
3.参数mapred.map.tasks主要用于减少Map个数。 ( 错)
三、选择题
1.下列选项中,用于配置MapReduce压缩的参数是(B )。
A.mapreduce.map.input.compress
B.hive.exec.compress.intermediate
C.mapreduce.fileoutputformat.compress.codec
D.mapreduce.output.fileoutputformat.type
四、简答题
1.简述配置合并文件的作用。
每个数据文件都会交给一个Map去处理,如果存在多个小数据文件,那么会每个小数据文件都会启动一个Map,造成不必要的资源浪费,因此在Map执行之前应该将这些小数据文件进行合并
五、操作题
1. 创建外部表test,自定义表的列,要求表的文件存储格式为ORCFile,并指定表的压缩格式为ZLIB。
CREATE TABLE test(
col1 STRING,
col2 STRING,
col3 STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC
TBLPROPERTIES ("orc.compress"="ZLIB");