大数据组件Presto,Spark SQL,Hive相互关系

6 篇文章 16 订阅
5 篇文章 0 订阅

大数据组件Presto,Spark SQL,Hive相互关系

工作上经常写SQL,有时候会在Presto上查表,或者会Presto web页面上写SQL语句。而有时候会在堡垒机上的服务器利用Spark在Yarn模式下写SQL语句,而有时候查询耗时比较低的情况下,直接利用hive -e 命令直接写SQL。也就是说:在Spark ,Hive,Presto都可以写SQL 的,但是这三者之间有什么区别或者联系呢? 花了一点时间整理下,这样对使用工具有了更清晰的认识。

1:Presto

1.1:Presto背景

Presto是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎是它被设计用来专门处理高速,实时的数据分析。Presto本身不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询

与MySQL对比:MySQL首先是一个单点关系型数据库,其具有存储和计算分析能力,而Presto只有计算分析能力;在数据量方面,MySQL不能满足当前大数据量的分析需求,在这样的背景下,Facebook开发出Presto这样一个可以满足大数据量分析需求的工具(当然还有其他的工具)。

1.2:数据源

刚刚提到,Presto只有计算分析能力,那么数据是从哪里获取呢?实际上,Presto可以连接多种数据源,包括Hive,Oracle,MySQL,Kafka,MongoDB,Redis等。可以通过show catalogs 命令看到Presto连接的所有数据源。

Presto强大之处在于可以将多个不同数据源进行联合分析,举例:

select * from tableA left join tableB where tableA.id=tableB.id

这里的tableA,可以来自以上数据库中任何一个,同样tableB也可以来自以上数据库中任何一个。

1.3:Presto优缺点

Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。

优点缺点
轻量快速,支持近乎实时的查询13年的new born,需要待验证
Facebook内部广泛使用,扩展性和稳定性毋庸置疑现在支持hive管理的表,尽管官方称支持hbase查询,但是仍然是开发状态
自从开源依赖有强劲的发展势头不支持UDF操作
和impala同样使用分布式查询引擎,和传统的Mapreduce相比,消除了延迟和磁盘IO开销
文档完善

2:Hive

2.1:Hive背景

Apache Hive数据仓库软件可以使用SQL方便地阅读、编写和管理分布在分布式存储中的大型数据集。结构可以投射到已经存储的数据上。提供了一个命令行工具和JDBC驱动程序来将用户连接到Hive。产生背景有以下几个方面:

1:MapReduce编程的不便性

2:HDFS上的文件缺少Schema(字段名,字段类型等)

关于Hive的定义(百度百科):

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式

2.2:HQL

Hive直接执行HQL语句有以下三种方式:

1:直接命令行执行SQL语句:hive -e "select from table…

2:执行HQL文件中的语句:hive -f temp.hql

3:打开调试模式:hive --hiveconf

2.3:Hive优缺点

优点缺点
被广泛应用,经受时间的考验既然是基于Mapreduce,也拥有MapReduce所有缺点,包含昂贵的Shuffle操作和磁盘IO操作
运行在Mapreduce框架之上hive仍然不支持多个reduce操作group by和order by查询
非常好的支持用户自定义函数和其他竞品相比,查询速度很慢
很友好的和hbase等系统结合

3:Presto与Hive对比

Hive是一个数据仓库,是一个交互式比较弱一点的查询引擎,交互式没有presto那么强,而且只能访问hdfs的数据;

Presto是一个交互式查询引擎,可以在很短的时间内返回查询结果,秒级,分钟级,能访问很多数据源;

Hive在查询100Gb级别的数据时,消耗时间已经是分钟级了;

但是Presto是取代不了Hive的,因为Presto全部的数据都是在内存中,限制了在内存中的数据集大小,比如多个大表的join,这些大表是不能完全放进内存的,实际应用中,对于在Presto的查询是有一定规定条件的,比如说一个查询在Presto查询超过30分钟(经常会遇到这种问题,此时适合在SparkSQL运行,后面会讲到),那就kill掉吧,说明不适合在Presto上使用,主要原因是,查询过大的话,会占用整个集群的资源,这会导致你后续的查询是没有资源进行查询的,这跟Presto的设计理念是冲突的,就像是你进行一个查询,但是要等个5分钟才有资源继续查询,这是很不合理的,交互式就变得弱了很多。

4:Spark SQL

4.1: Spark SQL背景

SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,我们上面提到,Hive是基于hadoop之上的一个开源的工具,提供的就是类似于SQL的一种HQL语言,它的好处就是可以直接把你的SQL语句转换成mapreduce作业,然后提交在集群上运行,好处就是我们不需要基于mapreduce的api进行编程,只需要写SQL语句就能完成大数据的统计和分析。

在上面我们提到,Hive是把SQL翻译成MapReduce作业,所以底层还是基于MapReduce,那么MapReduce框架的缺点就是效率太低,那么这样的话我们Hive的效率肯定不会高,对于批处理的作业Hive进行实现的话,如果很大的话,耗时十几个小时都是很可能的。

那么如何改进呢?

方法就是换掉底层的执行引擎,后来就产生的TEZ还有Spark这些底层的执行引擎,也就是说Hive可以跑在TEZ、SPARK上面。 后来慢慢发展就推出了Spark,Spark是一个基于内存的分布式计算框架,他的执行效率比MapReduce提高了很多!

4.2:Saprk SQL 的作用

Spark SQL的一大用处就是执行SQL查询语句,Spark SQL也可以用来从Hive中读取数据,当我们使用其它编程语言来运行一个SQL语句,结果返回的是一个Dataset或者DataFrame.可以使用命令行,JDBC或者ODBC的方式来与SQL进行交互。

5:总结

1:在数据源的级联查询时,用Presto写SQL语句进行查询;

2:在进行简单的数据查询时,可以用HQL进行建表,查询,关联等;

3:当数据量较大时,可用SparkSQL进行建表,查询,关联等;

  • 35
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值