Presto、Spark SQL、Hive的比较


Presto、Spark SQL、Hive的比较

1.Presto

Presto只有计算分析能力但可以连接多种数据源,包括Hive,Oracle,MySQL,Kafka,MongoDB,Redis等,并且可以将多个不同数据源进行联合分析。可以通过show catalogs 命令看到Presto连接的所有数据源。

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

擅长:

1、 轻量快速,支持近乎实时的查询

2、Facebook内部广泛使用,有好的扩展性和稳定性

3、和impala同样使用分布式查询引擎,和传统的Mapreduce相比,消除了延迟和磁盘IO开销

4、有完善的文档

Hive是一个数据仓库,是一个交互式比较弱一点的查询引擎,交互式没有presto那么强,而且只能访问hdfs的数据;
Presto是一个交互式查询引擎,可以在很短的时间内返回查询结果,秒级,分钟级,能访问很多数据源;
Hive在查询100Gb级别的数据时,消耗时间已经是分钟级了;但是Presto是取代不了Hive的,因为Presto全部的数据都是在内存中,限制了在内存中的数据集大小,比如多个大表的join,这些大表是不能完全放进内存的,实际应用中,对于在Presto的查询是有一定规定条件的,比如说一个查询在Presto查询超过30分钟(此时适合在SparkSQL运行),那就kill掉吧,说明不适合在Presto上使用,主要原因是,查询过大的话,会占用整个集群的资源,这会导致你后续的查询是没有资源进行查询的,这跟Presto的设计理念是冲突的,就像是你进行一个查询,但是要等个5分钟才有资源继续查询,这是很不合理的,交互式就变得弱了很多。

因此 ,在数据源的级联查询时,用Presto写SQL语句进行查询。在进行简单的数据查询时,可以用HQL进行建表,查询,关联等。当数据量较大时,可用SparkSQL进行建表,查询,关联等。

2.Apache Hudi

Apache Hudi代表Hadoop Upserts anD Incrementals,管理大型分析数据集在HDFS上的存储。Hudi的主要目的是高效减少摄取过程中的数据延迟。由Uber开发并开源,HDFS上的分析数据集通过两种类型的表提供服务:读优化表(Read Optimized Table)和近实时表(Near-Real-Time Table)。

读优化表的主要目的是通过列式存储提供查询性能,而近实时表则提供实时(基于行的存储和列式存储的组合)查询。

Hudi是一个开源Spark库(基于Spark2.x),用于在Hadoop上执行诸如更新,插入和删除之类的操作。它还允许用户仅摄取更改的数据,从而提高查询效率。它可以像任何作业一样进一步水平扩展,并将数据集直接存储在HDFS上。

Hudi 适用于 Spark-2.4.3+ 和 Spark 3.x 版本。因此spark版本需要对应,不过spark和hudi的集成比起flink和Hudi的集成方便很多,毕竟hudi的设计之初就是为了融合spark,而且hudi和spark耦合性很高。现在hudi社区正在做的是实现对于hudi和spark的解耦,不受限于某个数据引擎,这也是hudi一大缺陷,但是社区正在积极推进此项工作,很多大公司也加入进来,如阿里,字节跳动,腾讯等等。而且使用在大数据领域hudi的发展势头很强劲,越来越多的人加入到其中。
————————————————

3.Apache Kudu

Apache Kudu是一个与Hudi具有相似目标的存储系统,该系统通过对upserts支持来对PB级数据进行实时分析。 一个关键的区别是Kudu还试图充当OLTP工作负载的数据存储,而Hudi并不希望这样做。 因此,Kudu不支持增量拉取(截至2017年初),而Hudi支持以便进行增量处理。

Kudu与分布式文件系统抽象和HDFS完全不同,它自己的一组存储服务器通过RAFT相互通信。 与之不同的是,Hudi旨在与底层Hadoop兼容的文件系统(HDFS,S3或Ceph)一起使用,并且没有自己的存储服务器群,而是依靠Apache Spark来完成繁重的工作。 因此,Hudi可以像其他Spark作业一样轻松扩展,而Kudu则需要硬件和运营支持,特别是HBase或Vertica等数据存储系统。 到目前为止,我们还没有做任何直接的基准测试来比较Kudu和Hudi(鉴于RTTable正在进行中)。 但是,如果我们要使用CERN, 我们预期Hudi在摄取parquet上有更卓越的性能。
————————————————

dashboard (opens new window)	当前系统的实时数据面板
thread (opens new window)	查看当前 JVM 的线程堆栈信息
watch (opens new window)	方法执行数据观测
trace (opens new window)	方法内部调用路径,并输出方法路径上的每个节点上耗时
stack (opens new window)	输出当前方法被调用的调用路径
tt (opens new window)	方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
monitor (opens new window)	方法执行监控
jvm (opens new window)	查看当前 JVM 信息
vmoption (opens new window)	查看,更新 JVM 诊断相关的参数
sc (opens new window)	查看 JVM 已加载的类信息
sm (opens new window)	查看已加载类的方法信息
jad (opens new window)	反编译指定已加载类的源码
classloader (opens new window)	查看 classloader 的继承树,urls,类加载信息
heapdump (opens new window)	类似 jmap 命令的 heap dump 功能


原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289241.html

(0)
上一篇 2022年9月13日
下一篇 2022年9月13日

相关推荐

发表回复

登录后才能评论