目录
Hive就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行.
1、Hive 由 Facebook 实现并开源
2、是基于 Hadoop 的一个数据仓库工具
3、可以将结构化的数据映射为一张数据库表
4、并提供 HQL(Hive SQL)查询功能
5、底层数据是存储在 HDFS 上
6、Hive的本质是将 SQL 语句转换为 MapReduce 任务运行
7、使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
内部表和外部表
分区和分桶
分区:就是将同一组数据放到同一个HDFS目录下,当查询中过滤条件指定了某一个分区值时候,只将该分区对应的目录作为Input,从而减少MapReduce的输入数据,提高查询效率
控制hive任务中的map数和reduce数
Hive中的join
Hive中Join的原理和机制
对于一个简单的关联查询,CommonJoin任务设计Map阶段和Reduce阶段。Mapper 从连接表中读取数据并将连接的 key 和连接的 value 键值对输出到中间文件中。Hadoop 在所谓的 shuffle 阶段对这些键值对进行排序和合并。Reducer 将排序结果作为输入,并进行实Join。Shuffle 阶段代价非常昂贵,因为它需要排序和合并。
因此减少 Shuffle 和 Reduce 阶段的代价可以提高任务性能。
MapJoin 的目的是减少 Shuffle和 Reducer阶段的代价,并仅在 Map 阶段进行Join。
Join的原理和机制
hive中的数据倾斜
1、开启map端的聚合
2、distinct的时候使用两个Mapreduce
参考:数据倾斜
hive sql和mapreduce的转换过程
antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。
参考:HiveSQL解析原理