Hive:由Facebook开源用于解决海量结构化日志的数据统计。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
本质是:将HQL转化成MapReduce程序
1)Hive处理的数据存储在HDFS
2)Hive分析数据底层的实现是MapReduce
3)执行程序运行在Yarn上
Hive的特点:
1.Hive是一种易于对数据实现提取转换加载的工具(ETL数据清洗),可以理解为数据清洗分析
2.它有一种大量格式化数据集强加上结构的机制
3.它可以分析处理直接存储在HDFS中的数据,或者别的和数据存储中的数据例如:Hbase
4.查询的执行是MapReduce完成的
5.Hive可以使用存储过程
6.YARN和Slider实现秒级查询搜索
架构图
Hive数据存储在HDFS,大部分的查询、计算由mapreduce完成
Hive数据仓库于数据库的异同
(1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。
(2)数据存储位置。 hdfs raw local fs
(3)数据格式。 分隔符
(4)数据更新。hive读多写少。Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。
INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 不支持的
HDFS 一次写入多次读取
(5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。
(6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架
(7)可扩展性
(8)数据规模。
hive几种基本表类型:内部表、外部表、分区表
内部表(管理表)和外部表的区别:
外部表创建表的时候,不会移动数到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径
内部表会把数据复制或剪切到表的目录下
删除表
外部表在删除表的时候只会删除表的元数据信息不会删除表数据
内部表删除时会将元数据信息和表数据同时删除
Hive 自定义函数函数
UDF 一进一出 处理原文件内容某些字段包含 [] “”
UDAF 多进一出 sum() avg() max() min()
UDTF 一进多出 ip -> 国家 省 市
order by、sort by、Distribute By、Cluster By的用法区别
①Order By:全局排序,只有一个Reducer
(1)使用 ORDER BY 子句排序
ASC(ascend): 升序(默认)
DESC(descend): 降序
(2)ORDER BY 子句在SELECT语句的结尾
②Sort By:对于大规模的数据集order by的效率非常低。在很多情况下,并不需要全局排序,此时可以使用sort by
③Distribute By:在有些情况下,我们需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。distribute by 子句可以做这件事。distribute by类似MR中partition(自定义分区),进行分区,结合sort by使用
④Cluster By:当distribute by和sorts by字段相同时,可以使用cluster by方式。cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC
hive的优化
(1)MapJoin:小表在前大表在后,把小表全部读入内存中
(2)行列过滤:过滤空值(根据行列进行过滤)
(3)列式存储:hive的格式
(4)采用分区技术:建分区表
(5)合理设置Map数:过多的map数会造成数据倾斜
(6)合理设置Reduce数:过多的Reduce数会造成文件过多
(7) 压缩:时间换空间,空间换时间



