Spark,Hive,Impala和Presto是基于SQL的引擎,Impala由Cloudera开发和交付。在选择这些数据库来管理数据库时,许多Hadoop用户会感到困惑。Presto是一个开放源代码的分布式SQL查询引擎,旨在运行甚至PB级的SQL查询,它是由Facebook人设计的。

Spark SQL是一个分布式内存计算引擎,它的内存处理能力很高。Hive也由Apache作为查询引擎引入,这使数据库工程师的工作更加轻松,他们可以轻松地在结构化数据上编写ETL作业。在发布Spark之前,Hive被认为是最快速的数据库之一。

现在,Spark还支持Hive,也可以通过Spike对其进行访问。就Impala而言,它也是一个基于Hadoop设计的SQL查询引擎。Impala查询不会转换为mapreduce作业,而是本地执行。

这是对Hive,Spark,Impala和Presto的简要介绍。在本文中,我们会讲解这些SQL查询引擎的功能描述,并根据它们的属性介绍这些引擎之间的差异。

Hive,Spark,Impala和Presto之间的区别

让我们看一下所有这些功能特性的描述:

什么是Hive?

用于查询和管理大型数据集的Apache Hive数据仓库软件设施将分布式存储用作其后端存储系统。它建立在Apache之上。该工具是在Hadoop文件系统或HDFS的顶部开发的。Hadoop可简化以下任务:

  • 临时查询
  • 数据封装
  • 庞大的数据集和分析

Hive特征

  • 在Hive中,首先创建数据库表,然后将数据加载到这些表中
  • Hive旨在管理和查询存储表中的结构化数据
  • Map Reduce没有可用性和优化功能,但是Hive具有这些功能。查询优化可以高效地执行查询
  • Hive的灵感语言降低了Map Reduce编程的复杂性,并重用了其他数据库概念,例如行、列、模式等。
  • Hive使用目录结构进行数据分区并提高性能。
  • Hive的大多数交互都是通过CLI或命令行界面进行的,并且HQL或Hive查询语言用于查询数据库
  • Hive支持四种文件格式,即TEXTFILE,ORC,RCFILE和SEQUENCEFILE

Hive的三个核心部分

  • Hive客户
  • Hive服务
  • Hive存储和计算

通过不同的驱动程序,Hive与各种应用程序进行通信。与基于Java的应用程序一样,它使用JDBC驱动程序,对于其他应用程序,它使用ODBC驱动程序。Hive客户端和驱动程序然后再次与Hive服务和Hive服务器通信。Hive客户端可以通过Hive服务解决其查询。

CLI或命令行界面在这里就像Hive服务一样,用于数据定义语言操作。来自不同应用程序的请求由驱动程序处理,并转发到不同的Meta商店和现场系统进行进一步处理。

Hive服务(如作业客户端,文件系统和元存储)与Hive存储进行通信,并用于执行以下操作:

  • 在Hive中创建并存储了表的元数据信息,也称为“元存储数据库”
  • 数据和查询结果加载到表中,这些表以后存储在HDFS上的Hadoop集群中

配置单元在本地模式或地图缩小模式下执行。如果数据大小较小或处于伪模式下,则使用Hive的本地模式可以提高处理速度。而对于大量数据或用于多节点处理,则使用Hive的Map Reduce模式,以提供更好的性能。

什么是Impala

Impala是一个大规模并行处理引擎,是一个开源引擎。它要求将数据库存储在运行Apache Hadoop的计算机群集中。这是一个SQL引擎,由Cloudera在2012年推出。

Hadoop程序员可以以出色的方式在Impala上运行其SQL查询,它被认为是一种高效的引擎,因为它在处理之前不会移动或转换数据,该引擎可以轻松实现。Impala的数据格式、元数据、文件安全性和资源管理与MapReduce相同。

它具有Hadoop的所有特质,还可以支持多用户环境。以下列出了使Impala非常有用的两个最有用的品质:

1)列存储

2)树结构

Impala的一些流行功能:

  • 支持Apache HBase存储和HDFS或Hadoop分布式文件系统
  • 支持Kerberos身份验证或Hadoop安全性
  • 它可以轻松读取Apache Hive的元数据,SQL语法和ODBC驱动程序
  • 它可以识别Hadoop文件格式,RCFile,Parquet,LZO和SequenceFile
  • Apache Sentry基于角色的授权。

Impala在2年内崛起,已成为最重要的SQL引擎之一。现在,甚至Amazon Web Services和MapR都已列出了对Impala的支持。

什么是Spark?

Apache Spark是最受欢迎的QL引擎之一,它是通用数据处理引擎,在核心火花数据处理的顶部还有很多其他库,例如图形计算、机器学习和流处理,这些库可以在应用程序中一起使用。Spark支持以下语言,例如Spark、Java和R应用程序开发。

Spark应用程序运行几个独立的进程,这些进程由驱动程序中的SparkSession对象协调,簇或资源管理器也将该任务分配给工作人员。任务将其工作单位应用于数据集、结果,创建了一个新的数据集分区,最终结果可以存储并保存在磁盘上,也可以发送回驱动程序。

Spark可以处理PB级的数据,并以分布式方式在成千上万个群集中进行处理,这些群集分布在几个物理和虚拟群集之间。Spark被用于多种应用,例如:

  • 流处理
  • 机器学习
  • 互动分析
  • 资料整合

由于其有益的功能(例如速度,简单性和支持),Spark被许多用户选择。可以通过一组丰富的API来访问Spark的功能,这些API专门用于快速,轻松地与数据进行交互。Apache Spark社区庞大且支持您快速,快速地获得查询的答案。

什么是Presto?

Presto是一个分布式的开源SQL查询引擎,用于运行交互式分析查询。它可以处理从GB到PB的任何大小的查询。Presto是由Facebook人设计的。它旨在加速商业数据仓库查询处理。它可以扩大与Facebook相匹配的组织规模。

Presto在一组机器上运行。Presto设置包括多个工作人员和协调员。Presto查询由其客户提交给协调器。然后,Presto协调器分析查询并创建其执行计划。稍后,处理过程将分配给工人。

在处理PB级或TB级数据时,用户将不得不使用大量工具与HDFS和Hadoop进行交互。Presto可以帮助用户通过Hive和Pig等MapReduce作业管道查询数据库。Presto可以帮助用户处理不同类型的数据源,例如Cassandra和许多其他传统数据源。

Presto的功能

  • 可以帮助从其驻留位置查询数据,例如Hive,Cassandra,专有数据存储或关系数据库。
  • 可以合并来自多个数据源的单个查询的数据
  • Presto的响应时间非常快,通过昂贵的商业解决方案,他们可以快速解决查询
  • 它使用矢量化的柱状处理
  • Presto具有流水线执行
  • 其架构简单而广泛

Facebook每天都使用Presto在一天中运行PB级数据。这可能包括几个内部数据存储。它还支持为查询提供数据的可插拔连接器。Presto支持以下连接器:

  • TPC-H
  • Cassandra
  • Hadoop /Hive

就Presto应用程序而言,它支持Facebook,Teradata和Airbnb等许多工业应用程序。Presto支持标准的ANSI SQL,这对于数据分析人员和开发人员而言非常容易。Presto是用Java开发和编写的,但没有与Java代码相关的问题,例如:

内存分配和垃圾回收。Presto具有Hadoop友好的连接器体系结构。

推荐用法

就这些查询引擎的用途而言,您可以考虑以下几点:

对于任何类似BI的交互式工作负载,Impala可能是您的最佳选择。由于Impala查询的延迟最低,如果是为了减少查询延迟,您可以果断选择Impala,尤其是对于并发执行。

但对于低延迟和多用户支持要求,Hive也是不错的选择。选择Hive,仅出于您的ETL或批处理要求。但Hive不会减少太多查询处理所需的时间,因此它可以成为BI的合适选择。

Spark SQL,用户可以有选择地使用SQL构造为Spark管道编写查询。Spark SQL重用Hive元存储和前端,与现有的Hive查询,数据和UDF完全兼容。通过基于成本的查询优化器,代码生成器和列式存储Spark查询的执行速度得以提高。

Presto在BI类型查询中处于领先地位,与主要用于性能丰富查询的Spark不同,Presto对并发查询工作负载的支持至关重要。因此从并发查询执行和增加的工作量的角度出发,您可以使用它。

选择合适的数据库或SQL引擎完全取决于您的要求。在这里,我们列出了所有SQL引擎的一些常用和有益的功能。您可以选择Presto或Spark或Hive或Impala。数据库的选择取决于技术规格和功能的可用性。

写在最后

如果你不确定数据库或SQL查询引擎的选择,那只需进行详细比较它们特定的属性和登记功能,你就能更轻松地选择合适的数据库或SQL引擎了。

青牛:Hadoop与 Spark —选择正确的大数据框架

spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?相关推荐

  1. spark sql合并小文件_Spark SQL小文件问题在OPPO的解决方案

    Spark SQL小文件是指文件大小显著小于hdfs block块大小的的文件.过于繁多的小文件会给HDFS带来很严重的性能瓶颈,对任务的稳定和集群的维护会带来极大的挑战. 一般来说,通过Hive调度 ...

  2. 导出合并小文件_关于微信语音导出,这个方法强烈建议~

    [阳阳效率工具类] 这是一篇微信语音导出工具分享文章. 背景: 1.前几天临时接到一个任务,需要把微信语音合成导出变成一个MP3格式转发,但微信却没有开放保存语音到本地及转发语音的功能. 2.上周在@ ...

  3. spark 实现HDFS小文件合并

    一.首先使用sparksql读取需要合并的数据.当然有两种情况, 一种是读取全部数据,即需要合并所有小文件. 第二种是合并部分数据,比如只查询某一天的数据,只合并某一个天分区下的小文件. val df ...

  4. hive与spark合并小文件,将大文件打碎成小文件

    场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...

  5. winfrom里面使用类似于table的合并的控件_Flink集成iceberg数据湖之合并小文件

    背景 使用 流式数据入湖 开启压缩程序 快照过期 删除无用文件 数据查询 遇到的坑 最大并发度问题 文件被重复压缩 扫描任务读取文件问题 不读取大文件 优化生成CombinedScanTask 后续问 ...

  6. Spark-HDFS 删除空文件 合并小文件

    一.引言 hive 执行任务后目录下生成过多小文件,过多的小文件会占用 namenode 的内存,对于 HDFS 非常不友好,所以可以通过删除空文件或者合并小文件的方法进行优化. 二.删除空文件 可以 ...

  7. 实践数据湖iceberg 第九课 合并小文件

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

  8. Hive合并小文件参数总结

    hive merge小文件 一:为什么要合并小文件 当Hive输入由很多个小文件组成,由于每个小文件都会启动一个map任务,如果文件过小,以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资 ...

  9. [Hive]Hive合并小文件

    一般每个reduce输出一个文件到HDFS,如果reduce过多,则下阶段处理时就会有很多小文件.如果job只有map,没有reduce,那么可通过map输出时合并小文件. 3.1 map端合并 se ...

最新文章

  1. python pandas dataframe 列 转换为离散值
  2. Hibernate最佳实践
  3. Markdown编辑表格时如何输入竖线('|', pipe,vertical bar)
  4. python扩展库简介_python非官方扩展库
  5. C语言写的程序如何控制计算机硬件
  6. 老手机能升级华为鸿蒙,华为正式发布鸿蒙2.0!实现手机、平板等多平台共用一套代码!...
  7. Exchange 2003 限制用户外发邮件
  8. 年月日时紫白推算表_年月日时飞星算法
  9. 使用高级管理控制台获得对Windows Home Server的扩展访问
  10. 深入解读Service Mesh背后的技术细节
  11. python之禅怎么看_Python之禅
  12. 多源最短路径---Floyd-Warshall算法
  13. mysql 实时恢复_MySQL实时在线备份恢复方案:Replication+LVM Snapsho
  14. mysql进程线程_MySQL 内核线程简要分析
  15. [记录] Ubuntu 配置Apache虚拟站点
  16. c语言试题答题卡,c语言题目及答题卡.docx
  17. 英语阅读——The confusing pursuit of beauty
  18. IDEA不同颜色文件代表的意思
  19. 腾讯新品吐个槽,目标是你的核心用户
  20. 趣图:你永远想不到用户怎么使用你的产品

热门文章

  1. Why expand does not work for complex note
  2. 前端开发神器Sublime里如何设置JSlint
  3. Linux系统里让vim支持markdown格式的语法高亮
  4. html怎么让图标动起来,让ICON生动起来 纯CSS实现带动画的天气图标
  5. esp8266是linux系统吗,ESP8266 Linux开发环境搭建
  6. java经典程序_java经典程序编程知识(二)
  7. java中的与或非_与或非 · java development · 看云
  8. 11 linux suse 本地源_suse 11 Linux 静态路由的添加方法
  9. Python的注释方式
  10. 树莓派支持uvi协议吗_树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi)...