Hive相关面试题(寻不见的霞)

什么是Hive?

Hive 是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL 查询功能。

本质是:将HQL 转化成MapReduce 程序

简述Hive主要架构及解析成MR的过程

 

    Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据,经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce,提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口

  • 1)Hive 处理的数据存储在HDFS
  • 2)Hive 分析数据底层的实现是MapReduce
  • 3)执行程序运行在Yarn 上

谈一下hive的特点,以及hive和RDBMS有什么异同

 

1.存储位置:Hive在Hadoop(HDFS)上;Mysql将数据存储在设备或本地系统中

2.数据更新:Hive不支持数据的改写和添加(比较少),更多的是用于查询;数据库可以增删改查

3.索引:Hive中没有索引(因为不需要对数据做任何处理),Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。但由于Mapreducer的引入,Hive可以并行访问数据,因此即使没有索引,一样可以体现优势。

数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟

4.延迟性:除去没有索引,暴力扫描外,MapReduce本身就具有很高的延迟,相对的数据库延迟较小,当然这个低是有条件的,当数据规模的超过数据库的处理能力时,hive的并行计算就可以体现出优势。

说一下hive中sort by、order by、cluster by、distribute by各代表的意思

Hive内部表和外部表的区别

存储:外部表数据由HDFS管理;内部表数据由hive自身管理

存储位置:外部表数据存储位置由自己指定(没有指定location则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir (默认在/uer/hive/warehouse)

删除(操作权限):删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据

分区表和分桶表的区别?

分区针对的是数据的存储路径;分桶针对的是数据文件

分区表:Hive 数据表可以根据某些字段进行分区操作,细化数据管理,让部分查询更快,不同分区对应不同的目录;

分桶表:表和分区也可以进一步被划分为桶,分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值的hash值进行区分,不同的桶对应不同的文件

简要描述数据库中的 null,说出null在hive底层如何存储

null与任何值运算的结果都是null,可以使用is null、is not null函数指定其值为null情况下的取值

写出hive中split、coalesce及collect_list函数的用法

split将字符串转化为数组,即:split('a,b,c,d' , ',') ==> ["a","b","c","d"]。

coalesce(T v1, T v2, …) 返回参数中的第一个非空值;如果所有值都为 NULL,那么返回NULL。

collect_list列出该字段所有的值,不去重  select collect_list(id) from table

.写出将 text.txt 文件放入 hive 中 test 表‘2016-10-10’ 分区的语句,test 的分区字段是 l_date

load data local inpath '/your/path/test.txt' overwrite into table test partition(1_date='2016-10-10')

Hive join过程中大表小表的放置顺序

在编写带有join操作的代码语句时,应该将小表(条目少)放在join操作符的左边。因为在reduce阶段,位于join操作符左边的表的内容会被加载进内存,载入条目较少的表可以有效减少oom(out of memory)即内存溢出。所以对于同一个key来说,对应的value值小的放前,大的放后。
大表与大表的关联

如果两张都是大表,那么采用联合key,联合key的第一个组成部分是join on中的公共字段,第二部分是一个flag,0代表表A,1代表表B,由此让Reduce区分客户信息和订单信息;在Mapper中同时处理两张表的信息,将join on公共字段相同的数据划分到同一个分区中,进而传递到一个Reduce中,然后在Reduce中实现聚合(有待提高,看不懂)
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值