【hadoop期末复习】第九章 数据仓库Hive 超详细讲解

** 本专栏的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执行一条查询的具体过程

  1. 当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息
  2. 用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator,其中,PlanFragment由PlanNode组成的,能被分发到单独的节点上原子执行,每个PlanNode表示一个关系操作和对其执行优化需要的信息
  3. Coordinator通过从HDFS的名称节点中获取数据地址,从MySQL元数据库中获取元数据,以得到存储这个查询相关数据的所有数据节点
  4. Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点
  5. Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果
  6. Coordinator把汇总后的结果返回给CLI客户端

11. 列举hive值的列所支持的3种集合数据类型

  • ARRAY 矩阵
  • MAP 映射
  • STRUCT 结构体

12. 列举几个hive常用的操作和基本语法

** 见下文中的实验回顾

实验回顾

** 详见我之前写的:【hadoop学习之路】Hive HQL 语句实现查询


版权声明:本文为onion23原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。