Hive的相关面试问题

一、hive是怎样保存元数据的

  保存元数据的方式有:

    1、  内存数据库Derby  特点: 保存数据小,不稳定。一般不使用。

  2、 本地MySQL数据库  特点: 存储方式可以自己设定,持久化好,一般企业开发都用mysql做支持。

  3、 远程MySQL数据库  特点: 相比而言,本地mysql数据库用的比较多,因为本地读写速度都比较快。

二、什么是hive的内部表和外部表

   1.、被external修饰的是内部表, 被external修饰的是外部表。 

   2、内部表数据由Hive自身管理,外部表数据由HDFS管理。

   3、 内部表数据存储的位置是warehouse的路劲,外部表数据的存储路劲由自己指定。

   4、删除内部表会直接删除元数据以及存储的数据, 删除外部表仅仅会删除元数据, HDFS上的文件并不会被删除。

   5、对内部表的修改会将修改直接同步给元数据, 对外部表的表结构和分区进行修改的话, 则需要修复 :MSCK REPAIR TABLE 表名。

三、 Hive的 sort by 和 order by 的区别

    order by 会对输入做全局排序, 因此只有一个reducer(多个reducer无法保证全局有序)只有一个reduce, 会导致当输入规模较大时, 需要较长的计算时间。

    sort by 不是全局排序,其在数据进入reducer前完成排序。

    因此,如果用sort by 进行排序, 并且设置 mapred.reduce.tasks>1,则sort by 只保证每个reducer的排序有序, 不保证全局有序。

四、 HBase和Hive的区别

    Apache Hive 是一个构建在Hadoop基础设施之上的数据仓库。 通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言, 这种语言最终被转化为Map/Reduce。虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询---因为它只能够在hadoop上批量的执行Hadoop。

    Apache Hbase 是一种 Key/Value 系统,它运行在HDFS之上。 和Hive不一样, Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。 HBase被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema定义,列簇将某一类型列表集合起来(列不要求schema定义)例如: “message” 列簇可能包含:“to”, “from”,“date”,“subject” 和 “body”  每一个key/value对在Hbase中被定义为一个cell,每一个key由row-key, 列簇、列和 时间戳。 在Hbase中,行是key/value 映射的集合,这个映射通过row-key来唯一标识。 Hbase利用Hadoop的基础设施, 可以利用通过的设备进行水平的扩展。

  

猜你喜欢

转载自www.cnblogs.com/fjdsj/p/10094302.html