Druid实时大数据分析原理与实践:数据分析及相关软件

精通实时大数据分析!

本章我们将介绍数据分析及相关软件,以帮助读者了解数据分析软件的一些分类,找到适合自己场景的分析软件,并且和Druid 做一些技术上的比较。

2.1 数据分析及相关概念

数据分析(Data Analytics)从来都不是一个寂寞的领域,每一个时代都赋予数据分析更丰富的内容和精尖的技术。

数据分析是指通过数据的收集,进行数据处理和分析,将数据整理成有用的信息,包括有价值的洞察和可以付之于行动的建议。数据分析的目的就是帮助我们把数据(Data)变成信息(Information),再从信息变成知识(Knowledge),最后从知识变成智慧(Wisdom)。其过程如图2-1 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-1 数据分析的整个过程

在数据分析领域,商务智能(Business Intelligence,BI)、数据挖掘(Data Mining,DM)、联机分析处理(On-Line Analytical Processing,OLAP)等概念在名称上和数据分析方面非常接近,容易混淆,下面做个简单介绍。

商务智能:商务智能(BI)是在商业数据上进行价值挖掘的过程。商务智能的历史很长,很多时候会特别指通过数据仓库技术进行业务报表制作和分析的过程,在分析方法上通常使用聚合(Aggregation)、分片(Slice)等方式进行数据处理。在技术上,商务智能包括ETL(数据的抽取、转换、加载)、数据仓库(Data Warehouse)、OLAP(联机分析处理)、数据挖掘(Data Mining)等技术。

数据挖掘:数据挖掘(DM)是指在大量数据中自动搜索隐藏于其中有着特殊关系(属于Association rule learning)信息的过程。很多年前,它一直是一个热门的研究生专业,直到信息检索专业的出现。

联机分析处理:联机分析处理(OLAP)是一种建立数据系统的方法,其核心思想即建立多维度的数据立方体,以维度(Dimension)和度量(Measure)为基本概念,辅以元数据实现可以钻取(Drill-down/up)、切片(Slice)、切块(Dice)等灵活、系统和直观的数据展现。

数据分析既是一门艺术(所谓艺术就是结合技术、想象、经验和意愿等综合因素的平衡和融合),也是一个经验和想象力的融合(它涉及数学算法、统计分析、工具和软件工程的一种结合,以解决业务的问题为目标,帮助人们从数据中获得智慧)。

2.2 数据分析软件的发展

数据分析软件市场一直以来都很活跃,从两个视角来看,一个是商业软件市场,充满了大鱼吃小鱼的故事;另一个是开源数据存储处理软件,在互联网精神和开源情怀的引导下,各种专业领域的开源软件日益壮大,通用数据存储系统也不断升级。

2011 年,Teradata 收购了Aster Data 公司,同年惠普收购了实时分析平台Vertica 等;2012年,EMC 收购了数据仓库软件厂商GreenPlum;2013 年,IBM 宣布以17 亿美元收购数据分析公司Netezza;这些收购事件指向的是同一个目标市场———大数据分析。传统的数据库软件,处理TB 级别数据非常费劲,而这些新兴的数据库正是瞄准TB 级别,乃至PB 级别的数据分析。部分分析软件的创建时间和重要收购,可以参考图2-2。在开源世界,Hadoop 将人们引入了大数据时代,处理TB 级别大数据成为一种可能,但实时性能一直是Hadoop 的一个伤痛。2014 年,Spark 横空出世,通过最大利用内存处理数据的方式,大大改进了数据处理的响应时间,快速发展出一个较为完备的生态系统。另外,大量日志数据都存放在HDFS 中,如何提高数据处理性能,支持实时查询功能则成为不少开源数据软件的核心目标。例如,Hive 利用MapReduce 作为计算引擎,Presto 自己开发计算引擎,以及Druid 自己开发索引和计算引擎等,都是为了一个目标:处理更多的数据,获取更高的性能。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-2 部分分析软件的创建时间和重要收购

2.3 数据分析软件的分类

为了全面了解数据分析软件的分类,本节将介绍一些适合大数据分析的存储数据库,或者面向大数据分析,适用于TB 级别以上的数据存储和分析任务。接下来,按照以下几个分类来介绍。在介绍完每种软件的技术特点后,我们会与Druid 做一些简单的技术性比较。
商业数据库
开源时序数据库
开源计算框架
开源数据分析软件
开源SQL on Hadoop
云端数据分析SaaS

2.3.1 商业软件

商用数据库软件种类繁多,但是真正能够支持TB 级别以上的数据存储和分析并不多,这里介绍几个有特点的支持大数据的商用数据库软件。

1. HP Vertica

Vertica 公司成立于2005 年,创立者为数据库巨擘Michael Stonebraker(2014 年图灵奖获得者,INGRES、PostgreSQL、VoltDB 等数据库发明人)。2011 年Vertica 被惠普收购。Vertica软件是能提供高效数据存储和快速查询的列存储数据库实时分析平台,还支持大规模并行处理(MPP)。产品广泛应用于高端数字营销、互联网客户(比如Facebook、AOL、Twitter、Groupon)分析处理,数据达到PB 级别。Facebook 利用Vertica 进行快速的用户数据分析,据称Facebook 超过300 个节点(Node)和处理超过6PB 数据。

Vertica 有以下几个特点。
面向列的存储。
灵活的压缩算法,根据数据的排序性和基数决定压缩算法。
高可用数据库和查询。
MPP 架构,分布式存储和任务负载,Shared nothing 架构。
支持标准的SQL 查询、ODBC/JDBC 等。
支持Projection(数据投射)功能。

如图2-3 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-3 Vertical 的特点

相比Druid,Vertica 支持更多的企业级特性,例如SQL、JDBC 等标准,支持数据拆分的Projection 功能,但缺少Druid 的数据部分聚合,缺少数据的实时摄入功能。另外一个区别是Vertica 不使用Index,而是尝试利用行程编码(Run-Length Encoding),以及其他的压缩技术和产生优化的存储结构。

接下来介绍一下Projection 技术,它的原理是将数据的某些列提取出来进行专门的存储,以加快后期的数据访问速度,同一个列可以在不同的Projection 中,如图2-4 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-4 Projection 示意图

2. Oracle Exadata

Oracle Exadata 是数据库发展史上的一个传奇,它是数据库软件和最新硬件的完美结合。它提供最快、最可靠的数据库平台,不仅支持常规的数据库应用,也支持联机分析处理(OLAP)和数据仓库(DW)的场景。

Exadata 采用了多种最新的硬件技术,例如40Gb/s 的InfiniBand 网络(InfiniBand 是超高速的专用数据网络协议,主要专用硬件支持)、3.2TB PCI 闪存卡(每个闪存卡都配有Exadata智能缓存,X6 型号)。Oracle Exadata 数据库云服务器允许将新一代服务器和存储无缝部署到现有的Oracle Exadata 数据库云服务器中。它包含两套子系统,一套处理计算密集型的查询,一套处理存储密集型的查询,Exadata 能够做到智能查询分配。

Exadata 体系结构示意图如图2-5 所示。
Oracle ExaData 有如下几个技术特点。
采用InfiniBand 高速网络,采用极速闪存方案。
全面的Oracle 数据库兼容性。
针对所有数据库负载进行了优化,包括智能扫描。
Oracle Exadata 支持混合列压缩。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-5 Exadata 体系结构示意图

Oracle Exadata 于2008 年推出,软硬件一体,不断发展壮大,逐渐成为高性能数据库的代名词。其发展历程如图2-6 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-6 Oracle Exadata 的发展历程

相比Druid,Oracle Exadata 提供了大而全的企业解决方案,通过硬件加速查询,在处理TB 级别的数据量上有很大的性能优势。对于处理PB 级别的数据量,Exadata 可能会有些力不从心,当然成本也是一个大问题。

Oracle Exadata 混合列存储是介于行存储和列存储之间的一个方案,主要思想是对列进行分段处理,每一段都使用列式存储放在Block 中,而后按照不同的压缩策略进行处理。

3. Teradata

Teradata(天睿)公司是专注于大数据分析、数据仓库和整合营销管理解决方案的供应商。Teradata 采用纯粹的Shared nothing 架构,支持MPP。对于多维度的查询更加灵活,专注于数据仓库的应用领域。Teradata 的架构示意图如图2-7 所示,其中PE(Parsing Engine(s))是查询的分析引擎,用于分析SQL 查询、制定查询计划、聚合查询结果等;BYNET 是一个高速的互联层,是一个软件和硬件结合的解决方案。AMP(Access Module Processor)是存储和查询数据的节点,支持排序和聚合等操作。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-7 Teradata 的架构示意图

另外,Teradata 还提出了一个统一的数据分析框架,如图2-8 所示,其中包括两个核心产品,一个是Teradata 数据仓库,另一个是Teradata Aster 数据分析产品。这两个产品分别走不同的路线:Teradata 是传统数据仓库,满足通用的数据需求;Aster 实际上是一种基于MapReduce 的数据分析解决方案,可以支持更加灵活的数据结构的处理,例如非结构化数据的处理。

Teradata 提供了一个完整的数据解决方案,包括数据仓库和MapReduce。Druid 则聚焦在数据仓库中的时序数据库问题上。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-8 Teradata 统一数据架构示意图

2.3.2 时序数据库

时序数据库用于记录过去时间的各个数据点的信息,典型的应用是服务器的各种性能指标,例如CPU、内存使用情况等。目前时序数据库也广泛应用于各种传感器的数据收集分析工作中,这些数据的收集都有一个特点,就是对时间的依赖非常大,每天产生的数据量非常大,因此写入的量非常大,一般的关系型数据库无法满足这些场景。因此,时序数据库在设计上需要支持高吞吐、高效数据压缩,支持历史查询、分布式部署等。虽然Druid 更加接近数据仓库的角色,但是在很多特性上它也属于一种时序数据库。

1. OpenTSDB

OpenTSDB 是一个开源的时序数据库,支持存储数千亿的数据点,并提供精确查询功能。

它采用Java 语言编写,通过基于HBase 的存储实现横向扩展。OpenTSDB 广泛用于服务器性能的监控和度量,包括网络和服务器、传感器、IoT、金融数据的实时监控领域。OpenTSDB应用于很多互联网公司的运维系统中,例如Pinterest 公司有超过100 个节点的部署,雅虎公司也有超过50 个节点的部署。它的设计思路是利用HBase 的Key 存储一些Tag 信息,将同一个小时数据放在一行存储,提高了查询速度。其设计架构示意图如图2-9 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-9 OpenTSDB 设计架构示意图

相比Druid,OpenTSDB 在运维监控领域有长时间的应用,两者在技术上的区别比较明显,OpenTSDB 通过预先定义好维度Tag 等,采用精巧的数据组织方式放入HBase 中,利用HBase 的KeyRange 进行快速查询,在任意维度的组合查询下,OpenTSDB 查询效率会明显降低。

2. InfluxDB

InfluxDB 是最近非常流行的一个时序数据库,采用GoLang 语言开发,目前它的社区非常活跃,是GoLang 的一个非常成功的开源应用。其技术特点包括:支持任意数量的列,支持方便、强大的查询语言,集成了数据采集、存储和可视化功能。它支持高效存储,使用高压缩比的算法等。在早期设计中,使用LevelDB 作为存储,后来改成Time Series Merge Tree作为内部存储,支持与SQL 类似的查询语言。

相比Druid,InfluxDB 的设计更加针对OpenTSDB 的一些场景,内部存储结构和Druid也有非常大的差别。

2.3.3 开源分布式计算平台

1. Hadoop

Hadoop 是一个分布式系统基础架构,由Apache 基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储。Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System,HDFS)。除了文件存储,Hadoop还有最完整的大数据生态,包括机器管理、NoSQL KeyValue 存储(如HBase)、协调服务(Zookeeper 等)、SQL on Hadoop(Hive)等。其整体生态如图2-10 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-10 Hadoop 软件生态图

Hadoop 基于可靠的分布式存储,通过MapReduce 进行迭代计算,查询批量数据。Hadoop是高吞吐的批处理系统,适合大型任务的运行,但在对任务响应时间和实时性有严格要求的需求方面Hadoop 并不擅长。

Druid 正好是Hadoop 的一个有利补充,它提供了一套非常实时的方案,并可利用HDFS作为其深度存储(Deep Storage)数据文件的一种解决方案。另外,Druid 也全面拥抱Hadoop生态并能够对接很多Hadoop 生态中的数据源。

2. Spark

Spark 是UC Berkeley AMP lab 开源的类Hadoop MapReduce 通用的并行计算框架,同样也是基于分布式计算,拥有Hadoop MapReduce 的所有优点;不同的是,Spark 任务的中间计算结果可以缓存在内存中,这样迭代计算时可以从内存直接获取中间结果而不需要频繁读写HDFS,因此Spark 的运行速度更快,适用于对性能有要求的数据挖掘与数据分析场景。Spark生态组件也较多,核心组件如图2-11 所示。

Spark 是实现弹性分布式数据集概念的计算集群系统,可以看作是商业分析平台。RDD能复用持久化到内存中的数据,从而为迭代算法提供更快的计算速度。这对一些工作流例如机器学习格外有用,比如有些操作需要重复执行很多次才能达到结果的最终收敛。同时,Spark 也提供了大量的算法用来查询和分析数据,其开发语言采用Scala,因此直接在上面做数据处理和分析,开发成本会比较高,适合非结构化的数据查询处理。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-11 Spark 的核心组件

Druid 的核心是通过数据预先聚合提高查询性能,针对预先定义好的Schema,因此适合实时分析的场景,结果返回时间在亚秒级。Spark 可以对任何Schema 进行灵活操作,适合处理规模更大的批处理任务。

2.3.4 开源分析数据库

1. Pinot

如果要找一个与Druid 最接近的系统,那么非LinkedIn Pinot 莫属。Pinot 是LinkedIn 公司于2015 年年底开源的一个分布式列式数据存储系统。LinkedIn 在开源界颇具盛名,大名鼎鼎的Kaa 就来源于LinkedIn,因此Pinot 在推出后就备受关注和追捧。

Pinot 的技术特点如下。
一个面向列式存储的数据库,支持多种压缩技术
可插入的索引技术——Sorted Index、Bitmap Index 和Inverted Index
可以根据Query 和Segment 元数据进行查询和执行计划的优化
从Kaa 的准实时数据灌入和从Hadoop 的批量数据灌入
类似于SQL 的查询语言和各种常用聚合
支持多值字段
水平扩展和容错

在架构上,Pinot 也采用了Lambda 架构,如图2-12 所示,将实时数据流和批处理数据分开处理。其中Realtime Node 处理实时数据查询,Historical Node 处理历史数据。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-12 Pinot 架构示意图

相比Druid,Pinot 还比较年轻,相关生态支持力度小,但像很多刚开放的开源软件一样,目前Pinot 社区也非常活跃。Pinot 的索引结构支持更多的索引格式,如Forwarded Index、Sorted Forwarded Index 和Multi Value Forward Index。当列的基数较少(例如少于10K)时,此列就会采用字典编码(Dictonary Encoding),而后对列内的数据进行压缩存储。Druid 支持比较单一的Bitmap 方式的索引。对于查询语言来说,Pinot 的查询语法更接近SQL 方式。Pinot的集群管理也使用Apache 开源软件Helix,性能更可靠,可管理性更强。总体来说,Pinot的整体设计比Druid 更加完整和系统化,但是该技术刚刚开源,离成熟应用还有很长一段路要走。

2. Kylin

Kylin 是Apache 开源的一个分布式分析引擎,提供了在Hadoop 之上的SQL 查询接口及多维分析(OLAP)能力,可以支持超大规模数据。它最初由eBay 公司开发并于2015 年贡献至开源社区。Kylin 能在亚秒内查询巨大的Hive 表。

Kylin 的优势很明显,它支持标准的ANSI SQL 接口,可以复用很多传统的数据集成系统,支持标准的OLAP Cube,查询数据更加方便,与大量BI 工具无缝整合。另外,它提供了很多管理功能,例如Web 管理、访问控制、支持LDAP、支持HyperLoglog 的近似算法。

从技术上理解,Kylin 在Hadoop Hive 表上做了一层缓存,通过预计算和定期任务,把很多数据事先存储在以HBase 为基础的OLAP Cube 中,大部分查询可以直接访问HBase 获取结果,而不需要访问Hive 原始数据。虽然数据缓存、预计算可以提高查询效率,但这种方式的缺点也很明显,查询缺乏灵活性,需要预先定义好查询的一些模式、一些表结构。目前,Kylin 缺少实时数据摄入的能力。Druid 使用Bitmap Index 作为统一的内部数据结构;Kylin 使用Bitmap Index 作为实时处理部分的数据结构,而使用MOLAP Cube 作为历史数据的数据结构。Kylin 架构示意图如图2-13 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-13 Kylin 架构示意图

另外,在Kylin 开发成员中有很多开发人员来自中国,因此在PMC 成员中中国人占了大部分,所以使用Kylin 很容易得到很好的中文支持。Kylin 的愿景就是创建一个分布式的高可扩展的OLAP 引擎。

3. Druid、Pinot 和Kylin 比较

Druid、Pinot 和Kylin 是数据分析软件选型经常碰到的问题。Druid 和Pinot 解决的业务问题非常类似。Pinot 架构的设计比较规范,系统也比较复杂,由于开源时间短,社区的支持力度弱于Druid。Druid 的设计轻巧,代码库也比较容易懂,支持比较灵活的功能增强。Kylin的最大优势是支持SQL 访问,可以兼容传统的BI 工具和报表系统,在性能上没有太大优势。

这几个软件的特点如图2-14 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-14 Druid、Pinot 和Kylin 特点

4. 神秘的谷歌Dremel

Dremel 是谷歌的“交互式”数据分析系统,支持上千台机器的集群部署,处理PB 级别的数据,可以对网状数据的只读数据进行随机查询访问,帮助数据分析师提供Ad Hoc 查询功能,进行深度的数据探索(Exploration)。谷歌开发的Dremel 将处理时间缩短到秒级,它也成为MapReduce 的一个有利补充。Dremel 在Google Big Query 的Report 引擎上的应用也非常成功。Dremel 的应用如下。
抓取的网页文档分析,主要是一些元数据
追踪Android 市场的所有安装数据
谷歌产品的Crash 报告
作弊(Spam)分析
谷歌分布式构建(Build)系统中的测试结果
上千万的磁盘I/O 分析
谷歌数据中心中任务的资源分析
谷歌代码库中的Symbol 和依赖分析
其他

谷歌公开的论文Dremel: Interactive Analysis of WebScaleDatasets,总体介绍了Dremel 的设计原理。该论文写于2006 年,公开于2010 年,Dremel 为了支持Nested Data,做了很多设计的优化和权衡。

Dremel 系统有以下几个主要技术特点。

Dremel 是一个大规模的高并发系统。举例来说,磁盘的顺序读速度在100MB/s 上下,那么在1s 内处理1TB 数据,意味着至少需要有1 万个磁盘并发读,对于如此大量的读写,需要复杂的容错设计,少量节点的读失败(或慢操作)不能影响整体操作。

Dremel 支持嵌套的数据结构。互联网数据常常是非关系型的。Dremel 还支持灵活的数据模型,一种嵌套的(Nested)数据模型,类似于Protocol Buffer 定义的数据结构。Dremel 采用列式方法存储这些数据,由于嵌套数据结构,Dremel 引入了一种树状的列式存储结构,方便嵌套数据查询。论文详细解释了嵌套数据类型的列存储,这个特性是Druid 所缺少的,实现也是非常复杂的。

Dremel 采用层级的执行引擎。Dremel 在执行过程中,SQL 查询输入会转化成执行计划,并发处理数据。和MapReduce 一样,Dremel 也需要和数据运行在一起,将计算移动到数据上面。所以它需要GFS 这样的文件系统作为存储层。在设计之初,Dremel 并非MapReduce的替代品,它只是可以执行非常快的分析,在使用的时候,常常用它来处理MapReduce 的结果集或者建立分析原型。

在使用Dremel 时,工程师需要通过MapReduce 将数据导入Dremel,可以通过MapReduce的定时任务完成导入。在数据的实时性方面,论文中并没有讨论太多。

5. Apache Drill

Apache Drill 通过开源方式实现了谷歌Dremel。Drill 架构的整个思想还是通过优化查询引擎,进行快速全表扫描,以快速返回结果,其高层架构示意图如图2-15 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-15 Apache Drill 高层架构示意图

Apache Drill 基于SQL 的数据分析和商业智能(BI)引入了JSON 文件模型,这使得用户能查询固定架构,支持各种格式和数据存储中的模式无关(schema-free)数据。该体系架构中的关系查询引擎和数据库构建是有先决条件的,即假设所有数据都有一个简单的静态架构。

Apache Drill 的架构是独一无二的。它是唯一一个支持复杂和无模式数据的柱状执行引擎(columnar execution engine),也是唯一一个能在查询执行期间进行数据驱动查询(和重新编译,也称为schema discovery)的执行引擎。这些独一无二的性能使得Apache Drill 在JSON 文件模式下能实现记录断点性能(record-breaking performance)。该项目将会创建出开源版本的谷歌Dremel Hadoop 工具(谷歌使用该工具为Hadoop 数据分析工具的互联网应用提速),而“Drill”将有助于Hadoop 用户实现更快查询海量数据集的目的。

目前,Drill 已经完成的需求和架构设计,总共分为以下4 个组件。

Query language:类似谷歌BigQuery 的查询语言,支持嵌套模型,名为DrQL。

Low-lantency distribute execution engine:执行引擎,可以支持大规模扩展和容错,并运行在上万台机器上计算数以PB 的数据。

Nested data format:嵌套数据模型,和Dremel 类似,也支持CSV、JSON、YAML 之类的模型,这样执行引擎就可以支持更多的数据类型。

Scalable data source:支持多种数据源,现阶段以Hadoop 为数据源。

6. Elasticsearch

Elasticsearch(ES)是Elastic 公司推出的一个基于Lucene 的分布式搜索服务系统,它是一个高可靠、可扩展、分布式的全文搜索引擎,提供了方便的RESTful Web 接口。ES 采用Java语言开发,并作为Apache 许可条款下的开放源码发布,它是流行的企业搜索引擎。与之类似的软件还有Solr,两个软件有一定的相似性。

前几年,ES 的定位一直是文本的倒排索引引擎,用于文本搜索的场景。最近几年,Elastic公司将ES 用于日志分析和数据的可视化,慢慢转成一个数据分析平台。它能够提供类似于OLAP 的一些简单的Count、Group by 功能。另外,套件中内置的Kibana 可视化工具提供了出色的交互界面,可以对接常用的仪表盘(Dashboard)功能。因此,在一些数据量不大,需要文本搜索的场景下,直接使用ES 作为简单的数据分析平台也是快速的解决方案。Elastic 主推ELK 产品,它是一个提供数据分析功能的套装,包括LogStash 用于数据收集;ES 用于数据索引;Kibana 用于可视化表现。

ES 内部使用了Lucene 的倒排索引,每个Term 后面都关联了相关的文档ID 列表,这种结构比较适合基数较大的列,比如人名、单词等。ES 支持灵活的数据输入,支持无固定格式(schema-free)的数据输入,随时增加索引。

相比Druid,ES 对于基数大的列能够提供完美的索引方案,例如文本。ES 也提供了实时的数据摄入功能,但是性能比Druid 要慢很多,因为它的索引过程更加复杂。另外一个显著不同是,ES 是schema-free 的,也就是说,无须定义Schema,就可以直接插入JSON 数据,进行索引,而且数据结构也支持数组等灵活的数据类型。Druid 需要定义清楚维度和指标列。还有一个很大区别,就是ES 会保持元素的文档数据,而Druid 在按照时间粒度数据聚合后,原始数据将会丢弃,因此无法召回具体的某一数据行。

最近几年,ES 一直在增加数据分析的能力,包括各种聚合查询等,性能提升也很快。在数据规模不大的情况下,ES 也是非常不错的选择。Druid 更善于处理更大规模、实时性更强的数据。

2.3.5 SQL on Hadoop/Spark

Hadoop 生态发展了多年,越来越多的公司将重要的日志数据存入Hadoop 的HDFS 系统中,数据的持久化和可靠性得到了保证,但是如何快速挖掘出其中的价值却是很多公司的痛点。常用的分析过程有以下几种。
数据从HDFS 导入RDBMS/NoSQL。
基于HDFS,写代码通过MapReduce 进行数据分析。
基于HDFS,编写SQL 直接访问。
◇ SQL 访问内部转换为MapReduce 任务。
◇ 访问引擎直接访问HDFS 文件系统。

接下来,我们来看看简单的SQL 查询是如何访问HDFS 的。

1. Hive

Hive 是一个基于Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL 查询功能,可以将SQL 语句转换为MapReduce 任务运行。其优点是学习成本低,可以通过类SQL 语句快速实现简单的MapReduce 统计,不必开发专门的MapReduce 应用,十分适合数据仓库的统计分析。Hive 并不适合那些需要低延迟的应用,例如联机事务处理(OLTP)。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,整个查询过程也比较慢,不适合实时数据分析。

几乎所有的Hadoop 环境都会配置Hive 的应用,虽然Hive 易用,但内部的MapReduce操作还是会带来非常慢的查询体验。所有尝试Hive 的公司,几乎都会转型到Impala 的应用。

2. Impala

Impala 是Cloudera 受谷歌Dremel 启发开发的实时交互SQL 大数据查询工具,使用C++编写,通过使用与商用MPP 类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine 三部分组成),可以直接从HDFS 或HBase 中用SELECT、JOIN 和统计函数查询数据,从而大大降低了延迟。

Impala 使用的列存储格式是Parquet。Parquet 实现了Dremel 中的列存储,未来还将支持Hive 并添加字典编码、游程编码等功能。在Cloudera 的测试中,Impala 的查询效率比Hive 有数量级的提升,因为Impala 省去了MapReduce 的过程,减少了中间结果落盘的问题。Impala的数据流程图如图2-16 所示。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-16 Impala 的数据流程图

相比Druid,Impala 需要将数据格式转换成Parquet 格式才能进行查询,有时候数据转换也会花费不少时间。

3. Facebook Presto

Presto 出身名门,来自于Facebook,从出生起就受到关注。其主要采用Java 编写。Presto是一个分布式SQL 查询引擎,它被设计专门用于进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(Aggregation)、连接(Join)和窗口函数(Window function)。图2-17 展示了简化的Presto 系统架构示意图。

Presto 的运行模型和Hive 或MapReduce 有着本质的区别。Hive 将查询翻译成多阶段的MapReduce 任务,一个接着一个运行,每一个任务从磁盘读取输入数据并且将中间结果输出到磁盘上。然而,Presto 引擎没有使用MapReduce,它使用了一个定制的查询和执行引擎及响应的操作符来支持SQL 语法。除了改进的调度算法之外,所有的数据处理都是在内存中进行的。通过软件的优化,形成处理的流水线,以避免不必要的磁盘读写和额外的延迟。这种流水线式的执行模型会在同一时间运行多个数据处理段,一旦数据可用就会将数据从一个处理段传入下一个处理段。这样的方式会大大减少各种查询的端到端响应时间。

Druid实时大数据分析原理与实践:数据分析及相关软件

图2-17 简化的Presto 系统架构示意图

相比Druid,Presto 主要是解决SQL 查询引擎的问题,将SQL 查询转换成分布式任务,快速到数据存储区获得必要的数据,并且返回结果。它并不直接去优化存储结构,而是直接访问HDFS 或者其他数据存储层。

2.3.6 数据分析云服务

1. Redshift

Amazon Redshi 是一种快速的、完全托管的PB 级别数据仓库,可以方便用户使用现有的商业智能工具,以一种经济的方式轻松分析所有数据。Amazon Redshi 使用列存储技术改善I/O 效率并跨越多个节点平行放置查询,从而提供快速的查询性能。Amazon Redshi提供了定制的JDBC 和ODBC 驱动程序,可以从控制台的“连接客户端”选项卡中进行下载,以使用各种大量熟悉的SQL客户端。当然也可以使用标准的PostgreSQL JDBC 和ODBC驱动程序。数据加载速度与集群大小,与Amazon S3、Amazon DynamoDB、Amazon ElasticMapReduce、Amazon Kinesis 或任何启用SSH 的主机的集成呈线性扩展关系。

相比Druid,Redshi 是一种SaaS 服务。Redshi 内部使用了亚马逊已经取得授权的ParAccel技术。ParAccel 是一家专注提供数据分析服务的老牌技术公司,曾推出自己的列式存储的数据仓库产品。Druid 适合分析大数据量的流式数据,也能够实时加载和聚合数据。Druid 用索引来提高带过滤查询的速度,虽然索引结构简单,但是效率很高。

2. 阿里云数据仓库服务

分析型数据库(Analytic DB),是阿里巴巴自主研发的海量数据实时高并发在线分析(Realtime OLAP)云计算服务,使用户可以在毫秒级针对千亿级数据进行即时的多维分析透视和业务探索。分析型数据库对海量数据的自由计算和极速响应能力,能让用户在瞬息之间进行灵活的数据探索,快速发现数据价值,并可直接嵌入业务系统,为终端客户提供分析服务。

2.4 小结

数据分析的世界繁花似锦,虽然我们可以通过开源/商业、SaaS/私有部署等方式来分类,但是每种数据分析软件都有自己独特的定位。如果需要给Druid 几个标签的话,“开源”、“实时”、“高效”、“简洁”是合适的标签。与大部分系统相比,Druid 系统功能属于精简的,性能是出众的,实时支持也是超群的。

参考资料

  • http://www.yankay.com/google-dremel-rationale/
  • http://www.teradatawiki.net/2013/09/Teradata-Architecture.html
  • http://opentsdb.net/img/tsdb-architecture.png

——本文摘自《Druid实时大数据分析原理与实践》(腾讯、小米、优酷、云测等互联网公司的一线实践经验,为你解读海量实时OLAP平台!)

Druid实时大数据分析原理与实践:数据分析及相关软件

编辑推荐

精通实时大数据分析!

Druid项目主要创始人杨仿今、蚂蚁金服CTO鲁肃、饿了么CTO张雪峰、Testin云测总裁徐琨、 Druid中国用户组发起人陈冠诚、 TalkingData CTO肖文峰、 OneAPM创始人,董事长何晓阳、Cloudera大中华区技术总监刘隶放、神策数据公司创始人&CEO桑文锋、AdMaster(精硕科技)技术副总裁卢亿雷、微软中国研发中心,高级研发总监 Sherman Tong、AdHoc吆喝科技创始人CEO 王晔联合力荐!

内容提要

Druid 作为一款开源的实时大数据分析软件,最近几年快速风靡全球互联网公司,特别是对于海量数据和实时性要求高的场景,包括广告数据分析、用户行为分析、数据统计分析、运维监控分析等,在腾讯、阿里、优酷、小米等公司都有大量成功应用的案例。《Druid实时大数据分析原理与实践》的目的就是帮助技术人员更好地深入理解Druid 技术、大数据分析技术选型、Druid 的安装和使用、高级特性的使用,也包括一些源代码的解析,以及一些常见问题的快速回答。

Druid 的生态系统正在不断扩大和成熟,Druid 也正在解决越来越多的业务场景。希望本书能帮助技术人员做出更好的技术选型,深度了解Druid 的功能和原理,更好地解决大数据分析问题。《Druid实时大数据分析原理与实践》适合大数据分析的从业人员、IT 人员、互联网从业者阅读。

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
上一篇 2017-02-21 05:55
下一篇 2017-02-25 19:44

相关文章

关注我们
关注我们
分享本页
返回顶部