hive框架:
1.Hive的特点:
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能.可以将sql语句转化为mapreduce任务进行运行.其优点是学习成本低,可以通过类SQL语句快速实现简单的mapreduce统计,不必开发专门的Mapreduce应用,十分适合数据仓库的统计分析,但是Hive不支持实时查询.
2.Hive框架
3.Hive-SQL转化为MapReduce的过程
HSQL->AST抽象语法树->QB查询块->OpreateTree操作树->优化后的操作树->MapReduce任务树->优化后的MapReduce任务树
4.hive与mysql最主要区别
mysql hive
数据量大 小 大
速度 小增删改查 大数据量的查询
(1)数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式;
(2)数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据;
(3)数据存储位置:Hive 存储在 HDFS 。数据库将数据保存在块设备或者本地文件系统中。
(4)数据更新 :Hive 中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的
5.hive内部表和外部表区别
元数据 原始数据
删除数据:
内部表 删除 元数据 +原始数据
外部表 只删除元数据
在生产环境, 只有自己使用的临时表,是内部表
6. 4个by的区别
order by =>全局排序,只有一个Reduce,在生产环境中Order By不常用,容易导致OOM,一般采用distrubute by(分区)+sort by(排序)
sort by =>分区内有序,不是全局排序,其在数据进入Reduce之前完成排序(sort by是局部排序。相比order by的懒惰糊涂,sort by正好相反,它不但非常勤快,而且具备分身功能。sort by会根据数据量的大小启动一到多个reducer来干活,并且,它会在进入reduce之前为每个reducer都产生一个排序文件。这样的好处是提高了全局排序的效率。)
distrbute by =>按照指定的字段对数据进行划分输出到不同的reduce中,类似于MR的partition进行分区,结合sort by使用
cluster by =>当distrbute by和sort by字段相同时,可以使用cluster by方式.cluster by除了具有distrbute by功能外还兼具sort by功能,但其排序只能是升序.
举例分析:
在根据年份和气温对气象数据进行排序时,我们希望看到同一年的数据被放到同一个reducer中去处理,因为distribute by 通常和sort by 一起用,所以当distribute by 遇上 sort by时,distribute by要放在前面,这个不难理解,因为要先通过distribute by 将待处理的数据从map端做分发,这样,sort by 这个擅长局部排序的才能去放开的干活。不然要是没有distribute by的分发,那么sort by 将要处理全部的数据,即全局排序,这不是sort by的活,这样做只能拖慢集群工作效率。
Select year,temperature from table distribute by year, sort by year ASC,temperature DESC;
对于cluster by的话,如果 distribute by中和sort by 中所用的列相同的话,可以缩写为cluster by以便同时指定两者所用的列
Select year,temperature from table cluster by year;
7.hive中常见文本格式介绍
| 类型 | 介绍 |
|---|---|
| TextFile | Hive默认的文件格式,最简单的数据格式,数据不做压缩,开销大,便于查看和编辑,耗费存储空间,I/O性能较低.存储方式-行存储 |
| SequenceFile | 含有键值对的二进制文件,优化磁盘利用率和I/O,并行操作数据,查询效率高,但存储空间消耗最大.存储方式-行存储 |
| AvroFile | 特殊的二进制文件,设计的主要目标是为了满足schema evolution,Schema和数据保存在一起 |
| OrcFile | 列式存储,Schema存储在footer中,不支持schema evolution,高度压缩比并包含索引,查询速度非常快,存储方式-列存储 |
| ParquetFile | 列式存储,与Orc类似,压缩比不如Orc,但是查询性能接近,支持的工具更多,通用性更强 |
根据性能测试总结
从存储文件的压缩比来看,ORC和Parquet文件格式占用的空间相对而言要小得多。
从存储文件的查询速度看,当表数据量较大时Parquet文件格式查询耗时相对而言要小得多。
实际情况
根据目前主流的做法来看,Hive中选用ORC和Parquet文件格式似乎更好一点,但是为什么Hive默认的文件存储格式是TextFile?
这是因为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码),这样TextFile文件格式的Hive表能直接load data数据。
如果说我们想使用ORC文件或者Parquet文件格式的表数据,可以先通过TextFile表加载后再insert到指定文件存储格式的表中。而这些不同文件格式的表我们可以通过数据分层保存,便于后期进行数据统计。
8.hive中的自定义函数
UDF 解析字段 一进一出 一行进 一行出
UDTF 解析字段 一进多出 flatmap/行转列explore()
UDAF 解析字段 多进一出 count/max/min



