Hadoop 面经传送门:大数据岗位校招Hadoop面试总结
Spark 面经传送门:大数据岗位校招Spark面试总结
秋招结束,在这里把面试时遇到的Hive相关的知识点总结一下~
- 1、Hive的SQL语句如何转换为MR任务?
- 2、Hive中有哪些文件类型
- 3、几种join的区别
- 4、order by和sort by的区别
- 5、drop delete turncate区别
- 6、where和having有什么区别
- 7、select、from、where、group by、order by在一个Hive语句中,这些执行的顺序
- 8、join的表中筛选和where中筛选有什么区别
- 9、分区和分桶具体怎么实现的
- 10、Hive表的内部表和外部表有什么区别
- 11、Hive的map/reduce数怎么确定
- 12、如何判断数据倾斜及解决方法
- 13、Hive中小文件相关问题
- 14、重要的窗口函数
- 15、grouping sets 与 with cube
- 16、行转列与列转行
- 17、其他问题
1、Hive的SQL语句如何转换为MR任务?
- HiveSQL通过SQL Parser,完成SQL词法,语法解析,将SQL转化为抽象语法树(AST);
- 遍历AST,进行Analyzer语义分析,抽象出查询的基本组成单元QueryBlock(QB);
- 生成逻辑执行计划:遍历QueryBlock,翻译为执行操作树Operator Tree(每一个Operator对一行数据完成操作后之后将数据传递给childOperator计算);
- 优化逻辑执行计划:逻辑层优化器进行OperatorTree变换,合并不必要的操作符,减少shuffle数据量,得到优化后的操作树;
- 生成物理执行计划:遍历OperatorTree,翻译为MapReduce任务
- 优化物理执行计划:物理层优化器进行MapReduce任务的变换,生成最终的执行计划
2、Hive中有哪些文件类型
- TextFile:默认格式,行存储,每一行都是一条记录。数据不做压缩,磁盘开销大,数据解析开销大,存储空间消耗比较大。可结合Gzip、Bzip2使用,但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。可以直接存储,加载数据的速度最高,查询的效率最低
- Sequence File:包含键值对的二进制文件,行存储,可分割、可压缩,支持三种压缩选择:NONE, RECORD(记录级), BLOCK(块级压缩),Record压缩率低,一般使用BLOCK,存储空间消耗最大,查询效率高,需要通过text文件转化来加载
- RCFile:数据按行分块 每块按照列存储,保证同一个record在一个块上,避免读一个记录需要读取多个block,块数据列式存储,有利于数据压缩和快速的列存取。存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低
- AVRO:开源项目,为Hadoop提供数据序列化和数据交换服务,Avro是基于大数据Hadoop的应用程序中流行的文件格式之一
- ORC:数据按行分块,每块按照列存储,压缩快,快速列存取,效率比rcfile高,是rcfile的改良版本
- Parquet:面向列的二进制文件格式,相对于ORC,Parquet压缩比较低,查询效率较低,支持Impala查询引擎,对于扫描特定表格中的特定列的查询,Parquet特别有用
3、几种join的区别
- inner join:只有连接的两个表中都存在与连接标准相匹配的数据才会保留下来
- left outer join:左边表全返回,右边表没匹配的返回null
- right outer join:同上
- full outer join:(完全外连接)会返回所有表中符合where筛选条件的记录
- left semi join:(左半开连接)返回左表的记录,其记录对于右表满足on的筛选条件(可替代in)
- cross join(不指定连接条件的join):笛卡尔积join
- map join:小表join大表,小表在左边,大表右边,将小表读入内存,在map端jo