目录
1.hive是怎样保存元数据的
保存元数据的方式有:内存数据库rerdy,本地mysql数据库,远程mysql数据库,但是本地的mysql数据用的比较多,因为本地读写速度都比较快
- 内存数据库derby,安装小,但是数据存在内存,不稳定
- mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。
2.外部表与内部表的区别
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据
内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除
外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。
3.Hive 的 sort by 和 order by 的区别
(1)order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
(2)sort by不是全局排序,其在数据进入reducer前完成排序.
因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1, 则sort by只保证每个reducer的输出有序,不保证全局有序
4.hive保存元数据的方式以及各有什么特点?
(1)Hive有内存数据库derby数据库,特点是保存数据小,不稳定
(2)mysql数据库,储存方式可以自己设定,持久化好,一般企业开发都用mysql做支撑
5.在开发中问什么建议使用外部表?
(1)外部表不会加载到hive中只会有一个引用加入到元数据中
(2)hive不会修改数据,所以无需担心数据的损坏
(3)在删除时不会删除表,只会删除元数据,所以不必担心数据的
6.hive 如何调优?
在优化时要注意数据的问题,尽量减少数据倾斜的问题,减少job的数量,同事对小的文件进行成大的文件,如果优化的设计那就更好了,因为hive的运算就是mapReduce所以调节mapreduce的参数也会使性能提高,如调节task的数目。
insert into 和 override write区别?
insert into:将某一张表中的数据写到另一张表中
override write:覆盖之前的内容。