在Hadoop生态系统中,HDFS用于存储数据,Yarn用于资源管理,MapReduce用于数据处理,而Hive是构建在Hadoop之上的数据仓库,包括以下方面:
使用HQL作为查询接口,注意是Sql,并不完全遵循sql语言
使用HDFS存储;
使用MapReduce或其它计算框架计算;
执行程序运行在Yarn上。
Hive的本质是:将Hive SQL转化成MapReduce程序,其灵活性和扩展性比较好,自定义存储格式等;适合离线数据处理。
Hive是由Facobook开发的,贡献给Apache的一套进行数据仓库管理的工具,使用类SQL语言来对分布式文件系统中的PB级别的数据来进行读写、管理以及分析
Hive是基于Hadoop来使用的,底层的默认计算引擎是MapReduce。Hive利用类SQL(HQL,Hive Query Language)语言来操作数据,但是底层是将SQL转化为MapReduce来执行(效率低下),Hive更适合于处理离线分析场景
Hive的支持的计算引擎:MapReduce、Tez、Spark。底层默认使用的是MapReduce,但是效率最高的是Spark
在Hive中,库名、表名、字段名、字段类型、分区、分桶等信息属于元数据,是存储在数据库中,默认支持的是Derby。但是Derby本身是一个单连接的数据库(只允许一个客户端),所以会将Hive的元数据库替换为MySQL。注意:Hive的元数据是存储在数据库的,Hive的数据是放在HDFS上!hdfs提供了多副本机制,hive中存放的大多都是历史数据,hive一般不会自动建立索引
Hive和MySQL都是常见的数据存储和管理系统,但它们有一些主要的区别。
1.数据库类型
Hive是一种基于Hadoop的数据仓库系统,而MySQL是一种传统的关系型数据库管理系统。
2.语言
Hive使用HiveQL(类似于SQL),而MySQL使用SQL。
3.存储方式
Hive通常用于存储和管理大量非结构化数据,而MySQL通常用于存储和管理结构化数据。
4.性能
MySQL通常比Hive更快,但Hive可以处理更大的数据集。
以下是一些HiveQL和MySQL SQL的简单示例:
5.数据格式
Hive支持多种数据格式,包括文本文件、序列文件、RC文件、ORC文件等;而MySQL通常使用标准的关系型数据库表格来存储数据。
6.数据处理方式
Hive适用于大数据批处理,通常需要一些时间来处理和分析大量数据。MySQL通常适用于在线事务处理(OLTP),需要快速处理和检索少量数据。
7.数据规模
Hive通常用于处理PB级别的数据,而MySQL通常用于处理TB或更小规模的数据。
hive 优点
(1)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
(2)避免了去写MapReduce,减少开发人员的学习成本。
(3)Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。(只用于做离线数据)
(4)Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
(5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
hive缺点
1)Hive的HQL表达能力有限
(1)迭代式算法无法表达 (无法实现循环)
(2)数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法却无法实现。
2)Hive的效率比较低(因为hive 把sql翻译成MapReduce程序,没有直接写MapReduce程序好)
(1)Hive自动生成的MapReduce作业,通常情况下不够智能化
(2)Hive调优比较困难,粒度较粗(hive只能对sql进行调优,无法对hive本身进行调优)