公司网站没有备案是不是违法的,黄页推广引流网站,莱芜搜狗推广哪家好,企业网站建站技术1#xff0c;Presto背景
2011年#xff0c;FaceBook的数据仓库存储在少量大型hadoop/hdfs集群#xff0c;在这之前#xff0c;FaceBook的科学家和分析师一直靠hive进行数据分析#xff0c;但hive使用MR作为底层计算框架#xff0c;是专为批处理设计的#xff0c;但是随…1Presto背景
2011年FaceBook的数据仓库存储在少量大型hadoop/hdfs集群在这之前FaceBook的科学家和分析师一直靠hive进行数据分析但hive使用MR作为底层计算框架是专为批处理设计的但是随着数据的不断增多使用hive进行一个简单的数据查询可能要花费几分钟或者几个小时显然不能满足查询需求Facebook也调研了其他比hive更快的工具但是他们需要在功能有限的条件下做简单操作以至于无法操作Facebook庞大的数据要求。 2012年开始研究自己的框架–presto每日可以超过1pb查询而且速度比较快faceBook声称Presto的性能比hive要好上10倍或者100倍presto和hive都是facebook开发的。2013年Facebook正式宣布开源Presto。
2. Presto简介
大数据分布式查询引擎 Presto是一个开源的分布式SQL查询引擎适用于交互式查询数据量支持GB到PB字节。 Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题。 Presto支持在线数据查询包括Hive、kafka、Cassandra、关系数据库以及专门数据存储一条Presto查询可以将多个数据源进行合并可以跨越整个组织进行分析。 Presto以分析师的需求作为目标他们期望相应速度小于1秒到几分钟Presto终结了数据分析的两难选择要么使用速度快的昂贵的商业方案要么使用消耗大量硬件的慢速的“免费”方案。
3主流大数据查询引擎性能对比
1,Hive
1,介绍 Hive是基于Hadoop的一个数据仓库工具可以将结构化的数据文件映射为一张数据库表并提供完整的sql查询功能可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低可以通过类SQL语句快速实现简单的MapReduce统计不必开发专门的MapReduce应用十分适合数据仓库的统计分析。 Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具可以用来进行数据提取转化加载ETL这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。 Hive 定义了简单的类 SQL 查询语言称为 HQL它允许熟悉 SQL 的用户查询数据。同时这个语言也允许熟悉 MapReduce 开发者的开发自定义的 Mapper 和 Reducer 来处理内建的 Mapper 和 Reducer 无法完成的复杂的分析工作。 2,性能 Hive相对于其他查询引擎来说性能一般主要的优势体现在系统负载低、稳定性高、数据格式支持面广、社区活跃度高可以为其他多款查询引擎提供底层元数据SparkSql、Presto、Impala、HAWQ等都支持基于Hive的查询。 成本低、稳定性好生态兼容性好因此Hive在企业中应用的较多。
2,sparkSQL
1,介绍 SparkSQL是Hadoop中另一个著名的SQL引擎它以Spark作为底层计算框架Spark使用RDD作为分布式程序的工作集合它提供一种分布式共享内存的受限形式。 在分布式共享内存系统中应用可以向全局地址空间的任意位置进行读写操作而RDD是只读的对其只能进行创建、转化和求值等操作。这种内存操作大大提高了计算速度。 SparkSQL作为Spark生态的一员继续发展而不再受限于Hive只是兼容Hive。可以利用hive作为数据源Spark作为计算引擎通过SQL解析引擎实现基于Hive数据源Spark作为计算引擎的方案。 2 性能 SparkSQL的性能相对其他的组件要差一些多表单表查询性能都不突出。
Impala
1 ,介绍 Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具它拥有和Hadoop一样的可扩展性、它提供了类SQL类Hsql语法在多用户场景下也能拥有较高的响应速度和吞吐量。它是由Java和C实现的Java提供的查询交互的接口和实现C实现了查询引擎部分除此之外Impala还能够共享Hive Metastore甚至可以直接使用Hive的JDBC jar和beeline等直接对Impala进行查询、支持丰富的数据存储格式Parquet、Avro等。 此外Impala 没有再使用缓慢的 HiveMapReduce 批处理而是通过使用与商用并行关系数据库中类似的分布式查询引擎可以直接从 HDFS 或 HBase 中用 SELECT、JOIN 和统计函数查询数据从而大大降低了延迟。 2, 性能 Impala官方宣传其计算速度是一大优点在实际测试中它的多表查询性能和presto差不多但是单表查询方面却不如presto好。 而且Impala有很多不支持的地方例如不支持update、delete操作不支持grouping sets语法不支持Date数据类型不支持ORC文件格式等等所以impala一般采用Parquet格式进行查询而且Impala在查询时占用的内存很大。
HAWQ
1 介绍 HAWQ 是一个 Hadoop 上的 SQL 引擎是以 Greenplum Database 为代码基础逐渐发展起来的。HAWQ 采用 MPP 架构改进了针对 Hadoop 的基于成本的查询优化器。除了能高效处理本身的内部数据还可通过 PXF 访问 HDFS、Hive、HBase、JSON 等外部数据源。HAWQ全面兼容 SQL 标准能编写 SQL UDF还可用 SQL 完成简单的数据挖掘和机器学习。无论是功能特性还是性能表现HAWQ 都比较适用于构建 Hadoop 分析型数据仓库应用。 2 性能 HAWQ 吸收了先进的基于成本的 SQL 查询优化器自动生成执行计划可优化使用Hadoop 集群资源。 HAWQ 采用 Dynamic Pipelining 技术解决这一关键问题。Dynamic Pipelining 是一种并行数据流框架利用线性可扩展加速Hadoop查询数据直接存储在HDFS上并且其SQL查询优化器已经为基于HDFS的文件系统性能特征进行过细致的优化。 但是HAWQ在多表查询时比Presto、Impala差一些而且不适合单表的复杂聚合操作单表测试性能方面要比其余四种组件差很多HAWQ环境搭建也会遇到诸多问题。
ClickHouse
3.5.1 介绍 ClickHouse由俄罗斯Yandex公司开发。专为在线数据分析而设计。Yandex是俄罗斯搜索引擎公司。官方提供的文档表名ClickHouse日处理记录数”十亿级”。
特性 ①采用列式存储 ②数据压缩 ③基于磁盘的存储大部分列式存储数据库为了追求速度会将数据直接写入内存按时内存的空间往往很小 ④CPU 利用率高在计算时会使用机器上的所有 CPU 资源 ⑤支持分片并且同一个计算任务会在不同分片上并行执行计算完成后会将结果汇总 ⑥支持SQLSQL 几乎成了大数据的标准工具使用门槛较低 ⑦支持联表查询 ⑧支持实时更新 ⑨自动多副本同步 10支持索引 11分布式存储查询 2 性能 ClickHouse 作为目前所有开源MPP计算框架中计算速度最快的它在做多列的表同时行数很多的表的查询时性能是很让人兴奋的但是在做多表的Join时它的性能是不如单宽表查询的。 性能测试结果表明ClickHouse在单表查询方面表现出很大的性能优势但是在多表查询中性能却比较差不如Presto和Impala、HAWQ的效果好。
Greenplum
3.6.1 介绍 Greenplum是一个开源的大规模并行数据分析引擎。借助MPP架构在大型数据集上执行复杂SQL分析的速度比很多解决方案都要快。 特性 ①GPDB完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展。 ②从应用编程接口上讲它支持ODBC和JDBC。 ③完善的标准支持使得系统开发、维护和管理都大为方便。 ④支持分布式事务支持ACID。 ⑤保证数据的强一致性。 ⑥做为分布式数据库拥有良好的线性扩展能力。 ⑦GPDB有完善的生态系统可以与很多企业级产品集成譬如SAS、Cognos、Informatic、Tableau等。 ⑧也可以很多种开源软件集成譬如Pentaho、Talend 等。 2 性能 Greenplum作为关系型数据库产品它的特点主要就是查询速度快数据装载速度快批量DML处理快。 而且性能可以随着硬件的添加呈线性增加拥有非常良好的可扩展性。因此它主要适用于面向分析的应用。 比如构建企业级ODS/EDW或者数据集市等Greenplum都是不错的选择。 整体性能上Greenplum的表现比较中庸单表查询不如clickhouse多表查询不如impala整体性能不如presto。
Presto
1 介绍 Presto是一个分布式SQL查询引擎它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL包括复杂查询、聚合Aggregation、连接Join和窗口函数Window Functions)。作为Hive和PigHive和Pig都是通过MapReduce的管道流来完成HDFS数据的查询的替代者Presto本身并不存储数据但是可以接入多种数据源并且支持跨数据源的级联查询。Presto是一个OLAP的工具擅长对海量数据进行复杂的分析但是对于OLTP场景并不是Presto所擅长所以不要把Presto当做数据库来使用。 2 性能 Presto综合性能比起来要比其余组件好一些无论是查询性能还是支持的数据源和数据格式方面都要突出一些在单表查询时性能靠前多表查询方面性能也很突出。 由于Presto是完全基于内存的并行计算所以Presto在查询时占用的内存也不少但是要比Impala少一些比如多表Join时需要很大的内存Impala占用的内存比Presto要多。
总结
1 多表查询 Presto、Impala以及HAWQ在多表查询方面更有优势。 虽说Presto和Impala在多表查询方面的性能差别不大但是Impala的功能有一些局限性Impala不支持的功能是没有办法参与性能对比测试的例如不支持update、delete操作不支持grouping sets语法不支持Date数据类型不支持ORC文件格式等等而Presto则基本没有这些局限问题。 2 单大表聚合 在单表测试方面ClickHouse性能最好其次是Presto相比于HAWQ和impala以及SparkSQL在单大表聚合操作方面的表现也相对优秀。 使用场景
1 Presto 多数据源时可以使用presto进行统一查询。 快速查询时presto查询性能高但是需要的硬件资源也更昂贵。适合在单次扫描级别GB、TB级别的数据。 多张大表的关联查询时不应该使用prestopresto也不应作为etl工具因此在数仓的前两层很少使用presto。 2 Hive 海量数据的场景下一是需要大量的硬件资源二是海量的数据极可能造成内存溢出等各种异常。此时推荐使用Hive成本低、稳定性好且生态兼容性好。
4Presto架构
Presto是一个运行在多台服务器上的分布式系统。 完整安装包括一个coordinator和多个worker。 由客户端提交查询从Presto命令行CLI提交到coordinator。 coordinator进行解析分析并执行查询计划然后分发处理队列到worker。 Presto查询引擎是一个M-S的架构由一个coordinator节点一个Discovery Server节点多个Worker节点组成Discovery Server通常内嵌在Coordinator节点中。Coordinator负责SQL的解析生成执行计划分发给Worker节点进行执行Worker节点负责实时查询执行任务。Worker节点启动后向discovery Server服务注册Coordinator 从discovery server获取可以工作的Worker节点。如果配置了hive connector需要配置hive MetaSote服务为Presto提供元信息worker节点和HDFS进行交互数据。
5相关术语
Connector 连接器
Presto通过Connector连接器来适应数据源例如Hive或关系数据库。功能类似于数据库的驱动程序。允许Presto使用标准API与资源进行交互。 Presto包含几个内置连接器JMX连接器可访问内置系统表的System连接器Hive连接器和旨在提供TPC-H基准数据的TPCH连接器。许多第三方开发人员都贡献了连接器因此Presto可以访问各种数据源中的数据比如ES、Kafka、MongoDB、Redis、Postgre、Druid、Cassandra等。 每个Catalog都与一个特定的连接器关联。如果检查Catalog配置文件将会看到每个都包含一个强制性属性connector.nameCatalog Manager使用此属性指定Catalog的连接器。可能有多个Catalog使用同一连接器来访问相似数据库的两个不同实例。比如有两个Hive群集则可以在单个Presto群集中配置两个都使用Hive连接器的Catalog从而允许从两个不同的Hive集群中查询数
Catalog 连接目录
Presto Catalog是数据源schema的上一级并通过连接器访问数据源。例如可以配置Hive Catalog以通过Hive Connector连接器提供对Hive信息的访问。 在Presto中使用表时标准表名始终是被支持的。例如hive.test_data.test的标准表名将引用hive catalog中test_data schema中的test table。 Catalog需要在Presto的配置文件中进行配置。
Schema
Schema是组织表的一种方式。Catalog和Schema共同定义了一组可以查询的表。当使用Presto访问Hive或关系数据库例如MySQL时Schema会转换为目标数据库中的对应Schema。
Table
Table表是一组无序的行它们被组织成具有类型的命名列。与关系数据库中的含义相同。
6日期与时间类型
1时间转字符 date_format(timestamp, format) → varchar 将timestamp转换化为指定format格式的string。 Format的格式 年%Y 月%m 日%d 时%H 分%i 秒%s 周几%w(0…6)
--时间转字符串
select date_format(timestamp 2020-12-12 12:12:12 , %Y-%m-%d %H:%i:%s);2字符转时间 date_parse(string, format) → timestamp 将format格式的string转换为时间类型。
--字符串转时间
select date_parse(2020-12-12 12:12:12 , %Y-%m-%d %H:%i:%s);3 字符转日期 date(x) → date 等同于CAST(x AS date)
--字符串转日期
select date(2020-12-12);4 时间加减 date_add(unit, value, timestamp) → [same as input] 进行unit单位的时间运算。减法可以用负数来执行。 select date_add(‘hour’,-3,timestamp ‘2020-12-12 12:12:12’)
date_diff(unit, timestamp1, timestamp2) → bigint 时间timestamp2-timestamp1后以unit单位进行展示差值。 select date_diff(‘hour’,timestamp ‘2020-12-12 12:12:12’,timestamp ‘2020-12-12 02:12:12’)
Unit单位可以是year,month,day,hour
--分钟减去3
select date_add(second,3,timestamp 2020-12-12 12:12:12);--计算2个日期的差值可以换算不同的单位
select date_diff(month,timestamp 2020-10-11 12:12:11,timestamp 2020-12-12 02:12:12);