一. Hive基本面试
1.什么是metastore.
metadata即元数据。包含database、tabel、column names、partitions信息、bucketing信息等的元数据信息。
元数据默认是存储在Derby中,建议存储在关系型数据库中。
2.metastore安装方式有什么区别.
· 内嵌模式
o 内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
· 本地元存储
o 本地安装mysql 替代derby存储元数据, 这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。 hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。
· 远程元存储(HiveServer2)
o Hive服务和metastore在不同的进程内,可能是不同的机器,该模式需要将hive.metastore.uris设置为metastore服务器URL,如果有多个metastore服务器,将URL之间用逗号分隔,metastore服务器URL的格式为thrift://127.0.0.1:9083。
3.什么是Managed Table跟External Table.
- Hive有两种类型的表Managed Table跟External Table
- Managed Table:也被称作Internal table,这种表是hive的默认类型. 如果你在创建表的时候没有指明Managed或者External,那么默认就会给你创建Managed Table.
a. Managed Table的数据,会存放在HDFS中的特定的位置中,通常是/user/username/hive/warehouse.
b. 我们可以使用describe formatted table_name命令来查看表的信息.

c. 当你删除drop table table_name;删除表时,数据文件也会一并删除.
3. External Table: 特别适用于想要在Hive之外使用表的数据的情况.当你删除External Table时,只是删除了表的元数据,它的数据并没有被删除.
4.什么时候使用Managed Table跟External Table.
· Managed Table:
o 适用于临时创建的中间表.
· External Table
o 适用于数据多部门共享.
5.hive有哪些复合数据类型.
- MAP
a. Map复合数据类型提供了key-value对存储.你可以通过key获取value.
b. zhangsan Math:90,Chinese:92,English:78
i. create table score_map(name string,score map<string,int>) map keys terminated by ‘:’;
ii. select name,score[‘English’],size(score) from score_map; - STRUCT
a. Struct是不同数据类型元素的集合。
b. zhangsan Math,90
i. create table course_struct(name string,course structcourse:string,score:int) collection items terminated by ‘,’;
ii. select name,course.score,course.course from course_struct; - ARRAY
a. Array是同类型元素的集合.
b. zhangsan beijing,shanghai,Hangzhou
i. create table person_array(name string,work_locations array) collection items terminated by ‘,’;
ii. select name,work_locations[0],size(work_locations) from person_array; - UNIONTYPE
a. 它代表一个可以具有属于你所选择的任何数据类型的值的列。
b. 官方支持不完整,在join查询中,group by或者where字句会失败.目前可以不用这个集合.