Hive进阶篇(十)总结
一、知识点梳理
二、常用面试题
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
- Spark是一个分布式的内存计算框架,其特点是能处理大规模数据,计算速度快。
- Spark的计算过程保持在内存中,减少了硬盘读写,能够将多个操作进行合并后计算,因此提升了计算速度。
- 同时Spark也提供了更丰富的计算API,例如filter,flatMap,count,distinct等。
- 过程间耦合度低,单个过程的失败后可以重新计算,而不会导致整体失败;
3、Order By和Sort By的区别
Order By在大数据中使用较少,它是全局有序的。如果数据量较大的话可能会出现问题。
Sort By是局部有序(一个Reducer)的,只是对Reduce的输出结果有序。
4、Parquet或ORC文件格式的特点
ORCfiel和parquet本质上都是列上存储,大同小异。
parquet主要特点是支持嵌套格式,ORCfile主要特点是strips中有轻量级的index data。
所以这两种数据存储格式完全是可以相互借鉴融合的。
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,顺序与读取相反。
三、建表知识总结
四、其它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(日期)的形式,不仅仅只有日期