Hive进阶篇(十)总结

一、知识点梳理

hive ssl hive ssl teamredminer_MySQL

 二、常用面试题

1、Hive Metastore服务的作用

客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。 

    bin/hive --访问--> metaStore server --访问-->MySQL
    beeline --访问-->hiveServer2 --访问--> metaStore server --访问--> MySQL

2、Hive有几种执行引擎及其特点

hadoop 的基本架构中的计算框架是map-reduce,简称MR.

而Hive是基于hadoop的,所以Hive的默认引擎也是MR。

MR的速度确实非常感人的慢,随着计算引擎的更新,目前主要是Tez和Spark。

因为都运行在yarn 之上,所以这3个引擎可以随意切换。

1 ) MR

MR将一个算法抽象成Map和Reduce两个阶段进行处理,如果一个HQL经过转化可能有多个job,那么在这中间文件就有多次落盘,速度较慢。

2 ) Tez

该引擎核心思想是将Map和Reduce两个操作进一步拆分,

即Map被拆分成Input、Processor、Sort、Merge 和 Output;

   Reduce被拆分成Input、Shuffle、Sort、Merge、Processor 和 Output等,

这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。

Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能

3 ) Spark

  1. Spark是一个分布式的内存计算框架,其特点是能处理大规模数据,计算速度快。
  2. Spark的计算过程保持在内存中,减少了硬盘读写,能够将多个操作进行合并后计算,因此提升了计算速度。
  3. 同时Spark也提供了更丰富的计算API,例如filter,flatMap,count,distinct等。
  4. 过程间耦合度低,单个过程的失败后可以重新计算,而不会导致整体失败;

3、Order By和Sort By的区别

Order By在大数据中使用较少,它是全局有序的如果数据量较大的话可能会出现问题。

Sort By是局部有序(一个Reducer)的,只是对Reduce的输出结果有序。

4、Parquet或ORC文件格式的特点

ORCfiel和parquet本质上都是列上存储,大同小异。

parquet主要特点是支持嵌套格式,ORCfile主要特点是strips中有轻量级的index data。

所以这两种数据存储格式完全是可以相互借鉴融合的。

hive ssl hive ssl teamredminer_MySQL_02

5、Hive性能调优的基本方法

参考: 

6、Hive建表时的[ROW FORMAT row_format]和[STORED AS file_format]的作用

 参考: 

7、Hive建表时InputFormat、OutputFormat与SerDe三者关系

Hive中,默认使用的是TextInputFormat,一行表示一条记录。在每条记录(一行中),默认使用^A分割各个字段。

在有些时候,我们往往面对多行,结构化的文档,并需要将其导入Hive处理,此时,就需要自定义InputFormat、OutputFormat,以及SerDe了。

理清这三者之间的关系,可引用Hive官方说法:
SerDe is a short name for “Serializer and Deserializer.”
Hive uses SerDe (and !FileFormat) to read and write table rows.
HDFS files –> InputFileFormat –> <key, value> –> Deserializer –> Row object
Row object –> Serializer –> <key, value> –> OutputFileFormat –> HDFS files

总结一下,当面临一个HDFS上的文件时,Hive将如下处理(以读为例):

(1) 调用InputFormat,将文件切成不同的文档。每篇文档即一行(Row)。
(2) 调用SerDe的Deserializer,将一行(Row),切分为各个字段。

当HIVE执行INSERT操作,将Row写入文件时,主要调用OutputFormat、SerDe的Seriliazer,顺序与读取相反。

三、建表知识总结

hive ssl hive ssl teamredminer_hive ssl_03

 四、其它tips

1.建表的时候,字段的数据类型一般设成STRING而不是VARCHAR
2.Hive的命令后都要加;作为结束
3.Hive的Beeline命令行的进入语法:
 beeline -u jdbc:hive2://localhost:10000 -n hive -p hive
 -u :传Hive JDBC的地址(hive2是数据库的类型,服务器地址-localhost主机名:10000是hive的默认端口号)
 -n :用户名(hive就是最大权限的用户)
 -p :密码
 如果没有什么认证的话就直接用户名是hive,密码也是hive
 如果连错了,可以按输入 !q 退出
4.Hive的分区目录名结尾是一种 key(分区字段)=value(日期)的形式,不仅仅只有日期