Hive介绍:
- facebook开发的,用于分析海量数据使用。为了解决公司内部好多员工熟悉SQL,但是不熟悉编写程序(mapreduce是通过编写代码实现的)
- 是一个分析框架,不是数据存储框架,本身不存储业务的数据。Hive处理的数据存放在HDFS中。
- 提供SQL查询(HQL),SQL形式跟MYSQL的基本一样。
- 执行HQL后转化成mapreduce的程序,在后台提交给YARN,由YARN分配资源跑mapreduce。
- 将SQL语言中常用的操作(SELCT, WHERE, GROUP 等)用mapreduce写成很多模板,所有的mapreduce模板存放在Hive中。
- 执行HQL以后通过hive框架匹配出相应的mapreduce模板,然后后台执行mapreduce代码统计出结果,然后返回客户端。
- 可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
- 元数据存储:Hive 将元数据存储在数据库中(通常是存储在关系数据库如 mysql , derby中)。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
- Hive建表后,表的元数据存储在关系型数据库中(如:mysql),表的数据(内容)存储在hdfs中,这些数据是以文本的形式存储在hdfs中(关系型数据库是以二进制形式存储的),既然是存储在hdfs上,那么这些数据本身也是有元数据的(在NameNode中),而数据在DataNode中。这里注意两个元数据的不同。
- 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
- Hive就像是hadoop中的一个客户端工具。
优点:
- 类似SQL语法,容易上手。
- 不通写MR(mapreduce)了。
- 执行延迟比较高(因为执行的时候他在后台启动MR程序,但是启动MR程序也是需要时间的,启动MR通常是比较慢的),对实时性要求不高的场合适用,用在离线分析场景。
- 优势在于处理大数据,对于处理小数据没有优势。
- 支持用户自定义函数。
缺点:
HQL表达能力有限(迭代式计算无法表达;数据挖掘方面不擅长)
执行效率低(hive自动生成MR作业,通常情况下不够智能化;hive调优比较困难,粒度较粗)
例子:
Hive创建一个表:
hive> create external table if not exists pageview(
> pageid int,
> page_url string comment 'The page URL'
> )
> row format delimited fields terminated by ','
> location 'hdfs://192.168.158.171:9000/user/hivewarehouse/';
知识链接:
https://www.cnblogs.com/ggzhangxiaochao/p/9363029.html