介绍及功能
1、介绍
痛点:
- 数据分析师不懂Java开发
- 开发人员不懂业务
tips:最早大数据领域只有Hadoop这个分布式存储和计算的组件用于大数据的处理:数据分析
- FaceBook公司在使用Hadoop实现数据分析的时候,发现有个毛病:
会做分析的人如业务人员、数据分析师,会用SQL;会用Hadoop实现分布式开发是开发人员
解决:
- 方案一:让开发人员教业务写代码,成本比较高
- 方案二:让开发人员对Hadoop做一层封装,开发一个新的程序,封装以后新的程序提供SQL接口,在新的程序中用SQL进行开发,这个程序底层自动将SQL转为MapReduce程序提交给YARN去运行。最早的Hive就诞生了
Hive的本质:
- 对Hadoop做了封装,提供了SQL来操作Hadoop
- 实现基于HDFS的分布式存储
- 实现基于MR和YARN的分布式计算
- 是一种特殊的Hadoop的客户端,最终的计算和存储还是由Hadoop来完成的,Hive实际上是一个翻译的角色,Hive的使用依赖于Hadoop
问题:Hive是不是分布式的?
- Hive本身不是分布式
- Hive可以实现分布式表结构的存储和分布式的计算
- 通过Hadoop来实现的
2、功能
- 一:
将HDFS文件映射成表中的数据
- 二:
将SQL解析为MapReduce程序
考虑问题1:如何能将一个SQL语句转换为一个MapReduce程序?
select 1 from 2 where 3 group by 4 having 5 order by 6 limit 7
针对一句sql:各位置的处理
- Input:2,决定了程序处理的数据源
- Map:1和3这个位置,分组之前的数据的过滤
- Shuffle:4和6,实现分组和排序
- Reduce:聚合函数和5、7,自定义的聚合逻辑和分组以后的过滤
- Ouptut:保存结果
Hive的底层本质上就有一个MR的模板,通过对SQL进行解析,变成参数传递给底层的MR模板,提交运行
考虑问题2:SQL是对表进行处理,MR是对HDFS文件进行处理的?如何能实现这样的转换呢?
- 总结Hive的功能
- 第一:将HDFS上文件映射成表中的数据,通过SQL来处理表,就会处理对应HDFS文件
- 第二:将SQL语句转换成MapReduce程序
- SQL -》 表
- MR -》 HDFS文件
- 分析一下如何能实现上面的两大功能?
功能一:将HDFS上的文件映射成表?
- 在我们使用Hive的过程中
- 我们在Hive中创建一张表,让这张表关联HDFS的文件
- 并且我们将这个关联的关系存储起来:Hive的元数据
Hive 元数据:存储了Hive中每张表与HDFS文件之间的映射关系
功能二:将SQL转换为MapReduce程序呢?
- 假设有一个文件
1 zhangsan 18 男
2 lisi 20 女
- Hive中构建表
create table info(
id int,
name string,
age int,
sex string
);
- 实现文件与表的关联:将文件中的每一列与表的每一列关联
select id,name from info where id > 3 ;
- Input:读取要处理的表所对应的HDFS的数据
根据Hive的元数据获取这张表对应的HDFS文件
- Map:根据你所指定的列名id,name计算出是这个文件哪些列
id:第一列
name:第二列
map方法中分割每一行只过滤这两列,判断id是否大于3,
如果id大于3保留
小于等于3就丢弃