1.hive的计算是通过什么实现的
hive是搭建在Hadoop集群上的一个SQL引擎,它将SQL语句转化成了MapReduce程序在Hadoop上运行,所以hive的计算引擎是MapReduce,底层存储采用的是HDFS.
2.为什么不用Java的序列化Serializable
Java的序列化是一个重量的序列化框架(Serializable),一个对象别序列化后,会附带很多额外的信息(各种效验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoop自己开发了一套序列化机制(Writable),具有如下特点:
(1)紧凑,紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源。
(2)快速,进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的。
(3)可扩展,协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文。
(4)互操作,能支持不同语言写的客户端和服务端进行交互
3.MapReduce工作流程
Map阶段:
(1):读取输入文件的内容,并解析成键值对(<key, value>)的形式,输入文件中的每一行被解析成一个<key, value>对,每个<key, value>对调用一次map()函数。
(2):用户写map()函数,对输入的<key,value>对进行处理,并输出新的<key,value>对。
(3):对Step 2中得到的<key,value>进行分区操作。
(4):不同分区的数据,按照key值进行排序和分组,具有相同key值的value则放到同一个集合中。
(5)(可选):分组后的数据进行规约。
Reduce阶段:
(1):对于多个map任务的输出,按照不同的分区,通过网络传输到不同的Reduce节点。
(2):对多个map任务的输出结果进行合并、排序,用户书写reduce函数,对输入的key、value进行处理,得到新的key、value输出结果。
(3):将reduce的输出结果保存在文件中。
4.如何决定一个job中需要多少个maptask和reducetask?
一、影响map个数,即split个数的因素主要有:
1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为256m时,会被划分为4个split;当块为128m时,会被划分为8个split。
2)文件的大小。当块为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,会被划分为2个split。
3)文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为64m,而输入的目录中文件有100个,则划分后的split个数至少为100个。
4)splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节。
map个数的计算公式如下:
splitsize=max(minimumsize,min(maximumsize,blocksize))。
如果没有设置minimumsize和maximumsize,splitsize的大小默认等于blocksize
二、reduce端的个数取决于用户的需求,默认是有一个reduce,可以在代码中声明
reduce的输出个数
5.hive内部表和外部表的区别
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
6.hive的元数据和存储引擎
元数据包括表的名字,列、分区,目录等其他属性信息,存储在存储引擎中。
默认使用Derby数据库,缺点:一次只能打开一个会话。
可以使用MySQL,优点:允许多用户访问。
7.hive的特点,hive和RDBMS有什么异同?
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
8.hive数据倾斜原因
key分布不均匀
业务数据本身的特性
某些SQL的语言本身就有数据倾斜
建表时考虑不周