Hive面试题

旧城冷巷雨未停 提交于 2019-12-04 17:24:18

Hive数据倾斜

    key分布不均匀
    业务数据本身的特性
    SQL语句造成数据倾斜
解决方法
    hive设置hive.map.aggr=true和hive.groupby.skewindata=true
还有其他解决方案

Hive内部表和外部表的区别

Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

hive的元数据和存储引擎

hive的元数据存储着通过hive所建的库和表的结构信息, 以及所对应的hdfs上的文件夹
hive可以使用mysql作为存储引擎,也可以使用其他数据库

Hive的特点以及和关系型数据库的区别

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

hive导入数据的几种方式

从本地导入: load data local inpath ‘/home/1.txt’ (overwrite)into table student;
从Hdfs导入: load data inpath ‘/user/hive/warehouse/1.txt’ (overwrite)into table student;
查询导入: create table student1 as select * from student;(也可以具体查询某项数据)
查询结果导入:insert (overwrite)into table staff select * from track_log;

 

hive导出数据的几种方式

用insert overwrite导出方式

    导出到本地:
    insert overwrite local directory ‘/home/robot/1/2’ rom format delimited fields terminated by ‘\t’ select * from staff;(递归创建目录)
    导出到HDFS
    insert overwrite directory ‘/user/hive/1/2’ rom format delimited fields terminated by ‘\t’ select * from staff;

Bash shell覆盖追加导出
例如:$ bin/hive -e “select * from staff;” > /home/z/backup.log
Sqoop把hive数据导出到外部

 

分区和分桶

 

hive优化

Hive中的排序关键字有哪些

sort by ,order by ,cluster by ,distribute by

    sort by :不是全局排序,其在数据进入reducer前完成排序
    order by :会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序).只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
    cluster by : 当distribute by 和sort by的字段相同时,等同于cluster by.可以看做特殊的distribute + sort
    distribute by :按照指定的字段对数据进行划分输出到不同的reduce中

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!