Hive面试题整理

22 篇文章 0 订阅

行转列、列转行

concat与concat_ws

CONCAT(string A/col, string B/col…)

例子

--这个不能添加分隔符
select concat("a","b","c")

结果

abc
--这个可以添加分隔符
select concat_ws(",","a","b")
a,b
select concat_ws(NULL,"a","b")

在这里插入图片描述

COLLECT_SET(col)

select collect_set(ename) from emp;

返回的类型是数组

["SMITH","ALLEN","WARD","JONES"]

提取数组的部分值

select collect_set(ename)[1] from emp;
ALLEN

EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。

分组取topN

统计每个学科的前三名
select * from (select *, row_number() over (partition by sub order by score desc) as od from t ) t where od<=3;
语文成绩是80分的排名是多少
hive (test)> select od from (select *, row_number() over (partition by sub order by score desc) as od from t ) t where sub='chinese' and score=80;
分页查询
hive (test)> select * from (select *, row_number() over () as rn from t) t1 where rn between 1 and 5;

Hive的优化?

Hive优化(整理版) - 牧梦者 - 博客园
https://www.cnblogs.com/swordfall/p/11037539.html

Hive、HBase中的小文件如何处理?

小文件是如何产生的:

动态分区插入数据,产生大量的小文件,从而导致map数量剧增;
reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的);
数据源本身就包含大量的小文件。

小文件问题的影响:

从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能。
在HDFS中,每个小文件对象约占150byte,如果小文件过多会占用大量内存。这样NameNode内存容量严重制约了集群的扩展。

小文件问题的解决方案:

从小文件产生的途径就可以从源头上控制小文件数量,方法如下:

使用Sequencefile作为表存储格式,不要用textfile,在一定程度上可以减少小文件;
减少reduce的数量(可以使用参数进行控制);
少用动态分区,用时记得按distribute by分区;

对于已有的小文件,我们可以通过以下几种方案解决:

使用hadoop archive命令把小文件进行归档;
重建表,建表时减少reduce数量;
通过参数进行调节,设置map/reduce端的相关参数

Hive的架构?有哪些驱动器及作用是什么?

第一层:指的是连接hive的客户端接口层

- CLI (command line interface),指的是hive提供的shell命令
- JDBC/ODBC,指的是可以使用编程语言来来连接hive.比如,java,c++,ruby等
- webui, hive提供了web访问接口

第二层:
- thrift server :第三方软件服务项框架,当使用远程方式连接时,需要使用这个服务。
- 元数据存储: 指的是元数据存储的位置,可以是mysql,oracle,derby等
第三层:驱动层

 - 解析器(SQLParser):
  作用就是解析语法的正确性,比如表是否存在、字段是否存在、SQL语义是否有误。  
- 编译器(Compiler):
     作用就是将正确的语法翻译成mr程序,会与元数据库进行交互,获取对应的元数据,比如表名对应的文件路径。
  最后形成job程序
	- 优化器(Optimizer):
  将执行计划进行优化,减少不必要的列、使用分区、使用索引等。优化job。
	- 执行器(Executer):
  将优化后的执行计划提交给hadoop的yarn上执行。提交job。

Hive与Mysql的区别?

存储位置:Hive在Hadoop上;Mysql将数据存储在设备或本地系统中;
数据更新:Hive不支持数据的改写和添加,是在加载的时候就已经确定好了;数据库可以CRUD
索引:Hive无索引,每次扫描所有数据,底层是MR,并行计算,适用于大数据量;MySQL有索引,适合在线查询数据;
执行:Hive底层是MarReduce;MySQL底层是执行引擎;
可扩展性:Hive:大数据量,慢慢扩去吧;MySQL:相对就很少了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值