** 本专栏的Hadoop复习计划文章内容主要包含以下几个部分:
【简单】学习通习题
【进阶】课本课后练习
【操作】相关章节实验回顾
让我们开始吧!
学习通 - 习题
1. 下列关于Hive基本操作命令的解释错误的是
A.create table if not exists usr(id bigint,name string,age int);//如果usr表不存在,创建表usr,含三个属性id,name,age
B.load data local inpath ‘/usr/local/data’ overwrite into table usr; //把目录’/usr/local/data’下的数据文件中的数据以追加的方式装载进usr表
C.create database userdb;//创建数据库userdb
D.insert overwrite table student select * from user where age>10;
//向表student中插入来自usr表的age大于10的数据并覆盖student表中原有数据
我的答案:B
解析:
B.load data local inpath ‘/usr/local/data’ overwrite into table usr; //把目录’/usr/local/data’下的数据文件中的数据以追加的方式装载进usr表 - 错误
overwrite - 意为“覆写”,直接把新数据写进去,覆盖原有的表
2. 下列说法正确的是
A.Impala和Hive、HDFS、HBase等工具可以统一部署在一个Hadoop平台上
B.数据仓库Hive不需要借助于HDFS就可以完成数据的存储
C.Hive本身不存储和处理数据,依赖HDFS存储数据,依赖MapReduce处理数据
D.HiveQL语法与传统的SQL语法很相似
我的答案:ACD
解析:
A.Impala和Hive、HDFS、HBase等工具可以统一部署在一个Hadoop平台上
正确,因为Impala和Hive都可以与HDFS、HBase进行交互
B.数据仓库Hive不需要借助于HDFS就可以完成数据的存储
错误,hive简介如下:
- Hive某种程度上可以看作是用户编程接口,本身不存储和处理数据
- 依赖HDFS存储数据
- 依赖MapReduce处理数据
- 定义了简单的类SQL 查询语言 HiveQL(HQL)
- 用户可以通过编写的HQL语句运行MapReduce任务
- 是一个可以提供有效、合理、直观组织和使用数据的模型
C.Hive本身不存储和处理数据,依赖HDFS存储数据,依赖MapReduce处理数据
正确
D.HiveQL语法与传统的SQL语法很相似
正确
3. 以下属于Hive的基本数据类型是
A.TINYINT
B.BINARY
C.FLOAT
D.STRING
我的答案:ABCD
解析:
hive的基本数据类型有:

课本 - 课后习题
1. 在hadoop生态中hive与其他组件的关系

2. 简述hive与传统数据库的区别
Hive | 传统数据库 | |
数据插入 | 支持批量导入 | 支持单条和批量导入 |
数据更新 | 不支持 | 支持 |
索引 | 支持 | 支持 |
分区 | 支持 | 支持 |
执行延迟 | 高 | 低 |
扩展性 | 好 | 有限 |
3. 简述hive的几种访问方式
1)内部访问
- CLI
- HWI
2)外部访问
- Karmasphere
- Hue
- Qubole
4. 对hive的几个主要组成模块进行简要介绍
1)用户接口模块
- 包含:CLI、HWI、JDBC、ODBC、Thrift Server等
- CLI:Hive自带的一个命令行界面
- HWI:Hive的一个简单网页界面
- JDBC、ODBC、Thrift Server:向用户提供进行编程访问的接口
2)驱动模块
- 包含:编译器、优化器、执行器等
- 所有命令和查询都会进入到驱动模块,通过该模块对输入进行解析编译,对需求的计算进行优化,然后按照指定的步骤进行执行
3)元数据存储模块
- 是一个独立的关系型数据库
- 通常是与MySQL数据库连接后创建的一个MySQL实例,也可以是Hive自带的derby数据库实例
- 元数据存储模块中主要保存表模式和其他系统元数据(如表的名称、表的列及其属性、表的分区及其属性、表的属性、表中数据所在位置信息等)
5. 简述hive中输入一条查询的具体执行过程
1)SQL → 语法树
2)语法树 → 查询块
3)查询块 → 逻辑查询计划
4)重写逻辑查询计划
5)逻辑查询计划 → 物理计划(MapReduce Jobs)
6)选择最佳的优化查询策略
图示:

6. 简述hive HA原理
- 将若干个hive实例纳入一个资源池,然后对外提供一个唯一的接口,进行proxy relay
- 对于程序开发人员,就把它认为是一台超强“hive",每次它接收到一个hive查询连接后,都会轮询资源池里可用的hive资源
7. 简述Impalad进程的主要作用
Impalad 是 Impala 的一个进程
功能:
- 负责协调客户端提交查询的执行
- 给其他impalad分配任务
- 收集其他impalad的执行结果进行汇总
8. 比较hive与Impala的异同点
1)不同点
Hive适合于长时间的批处理查询分析,而Impala适合于实时、交互式SQL查询
Hive依赖于MapReduce计算框架,执行计划组合成管道型的MapReduce任务模式进行执行,Impala把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询。
Hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以Impala目前处理查询时会受到一定的限制。
2)相同点
Hive、Impala使用相同的存储数据池,都支持把数据存储于HDFS、HBase中
Hive与Impala使用相同的元数据
Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划
9. 简述 state store的作用
Impala主要由Impalad,State Store和CLI三部分组成
State Store会创建一个statestored进程
作用:
- 跟踪集群中的Impalad的健康状态及位置信息
- 创建多个线程来处理Impalad的注册订阅和与各类Impalad保持心跳连接
- 当State Store离线后,Impalad一旦发现State Store处于离线时,就会进入recovery模式,并进行反复注册
- 当State Store重新加入集群后,自动恢复正常,更新缓存数据
- 3. CLI给用户提供查询使用的命令行工具
- 提供了Hue、JDBC及ODBC的使用接口
10. 简述impala执行一条查询的具体过程
- 当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息
- 用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator,其中,PlanFragment由PlanNode组成的,能被分发到单独的节点上原子执行,每个PlanNode表示一个关系操作和对其执行优化需要的信息
- Coordinator通过从HDFS的名称节点中获取数据地址,从MySQL元数据库中获取元数据,以得到存储这个查询相关数据的所有数据节点
- Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点
- Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果
- Coordinator把汇总后的结果返回给CLI客户端
11. 列举hive值的列所支持的3种集合数据类型
- ARRAY 矩阵
- MAP 映射
- STRUCT 结构体

12. 列举几个hive常用的操作和基本语法
** 见下文中的实验回顾
实验回顾
** 详见我之前写的:【hadoop学习之路】Hive HQL 语句实现查询