购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 大数据下的分析工具

大数据技术首先需要解决的问题是如何高效、安全地存储;其次是如何高效、及时地处理海量的数据,并返回有价值的信息;最后是如何通过机器学习算法,从海量数据中挖掘出潜在的价值,并构建模型,以用于预测预警。

可以说,当今大数据的基石,来源于谷歌公司的三篇论文,这三篇论文主要阐述了谷歌公司对于大数据问题的解决方案。这三篇论文分别是:

· Google File System

· Google MapReduce

· Google BigTable

其中, Google File System 主要解决大数据分布式存储的问题, Google MapReduce 主要解决大数据分布式计算的问题, Google Bigtable 主要解决大数据分布式查询的问题。

当前大数据工具的蓬勃发展,或多或少都受到上述论文的启发,不少社区根据论文的相关原理,实现了最早一批的开源大数据工具,如Hadoop和HBase。

但值得注意的是,当前每个大数据工具都专注于解决大数据领域的特定问题,很少有一种大数据工具可以一站式解决所有的大数据问题。因此,一般来说,大数据应用需要多种大数据工具相互配合,才能解决大数据相关的业务问题。

大数据工具非常多,据不完全统计,大约有一百多种,但常用的只有10多种,这些大数据工具重点解决的大数据领域各不相同,现列举如下:

· 分布式存储:主要包含Hadoop HDFS和Kafka等。

· 分布式计算:包括批处理和流计算,主要包含Hadoop MapReduce、Spark和Flink等。

· 分布式查询:主要包括Hive、HBase、Kylin、Impala等。

· 分布式挖掘:主要包括Spark ML和Alink等。

据中国信通院企业采购大数据软件调研报告来看,86.6%的企业选择基于开源软件构建自己的大数据处理业务,因此学习和掌握几种常用的开源大数据工具,对于大数据开发人员来说至关重要。下面重点介绍大数据常用的几种分析工具。

1.2.1 Hadoop

Hadoop是一个由Apache基金会开发的分布式系统基础架构,源于论文 Google File System 。Hadoop工具可以让用户在不了解分布式底层细节的情况下,开发分布式程序,从而大大降低大数据程序的开发难度。它可以充分利用计算机集群构建的大容量、高计算能力来对大数据进行存储和运算。

在大数据刚兴起之时,Hadoop可能是最早的大数据工具,它也是早期大数据技术的代名词。时至今日,虽然大数据工具种类繁多,但是不少工具的底层分布式文件系统还是基于Hadoop的HDFS(Hadoop Distributed File System)。

Hadoop框架前期最核心的组件有两个,即HDFS和MapReduce。后期又加入了YARN组件,用于资源调度。其中HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了分布式计算能力。

HDFS有高容错性的特点,且支持在低廉的硬件上进行部署,而且Hadoop访问数据的时候,具有很高的吞吐量,适合那些有着超大数据集的应用程序。

可以说,Hadoop工具是专为离线和大规模数据分析而设计的,但它并不适合对几个记录随机读写的在线事务处理模式。Hadoop软件是免费开源的,官网地址为http://hadoop.apache.org。

注意

目前来说,Hadoop工具不支持数据的部分update操作,因此不能像关系型数据库那样,可以用SQL来更新部分数据。

1.2.2 Hive

对于数据的查询和操作,一般开发人员熟悉的是SQL语句,但是Hadoop不支持SQL对数据的操作,而是需要用API来进行操作,这个对于很多开发人员来说并不友好。因此,很多开发人员期盼能用SQL语句来查询Hadoop中的分布式数据。

Hive工具基于Hadoop组件,可以看作是一个数据仓库分析系统,Hive提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据。

Hive可以将结构化的数据文件映射为一张数据表,这样就可以利用SQL来查询数据。本质上,Hive是一个翻译器,可以将SQL语句翻译为MapReduce任务运行。

Hive SQL使不熟悉MapReduce的开发人员可以很方便地利用SQL语言进行数据的查询、汇总和统计分析。但是Hive SQL与关系型数据库的SQL略有不同,虽然它能支持绝大多数的语句,如DDL、DML以及常见的聚合函数、连接查询和条件查询等。

Hive还支持UDF(User-Defined Function,用户定义函数),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。Hive不适合用于联机事务处理,也不适合实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。Hive的特点包括:可伸缩、可扩展、容错、输入格式的松散耦合。Hive最佳使用场合是大数据集的批处理作业,例如,网络日志分析。官网地址为http://hive.apache.org。

注意

目前来说,Hive中的SQL支持度有限,只支持部分常用的SQL语句,且不适合update操作去更新部分数据,即不适合基于行级的数据更新操作。

1.2.3 HBase

HBase工具是一个分布式的、面向列的开源数据库,该技术来源于 Google BigTable 的论文。它在Hadoop之上提供了类似于Google BigTable的能力。HBase不同于一般的关系数据库,它是一个适合存储非结构化数据的数据库,且采用了基于列而不是基于行的数据存储模式。

HBase在很多大型互联网公司得到应用,如阿里、京东、小米和Facebook等。Facebook用HBase存储在线消息,每天数据量近百亿;小米公司的米聊历史数据和消息推送等多个重要应用系统都建立在HBase之上。

HBase适用场景有:

· 密集型写应用:写入量巨大,而相对读数量较小的应用,比如消息系统的历史消息,游戏的日志等。

· 查询逻辑简单的应用:HBase只支持基于rowkey的查询,而像SQL中的join等查询语句,它并不支持。

· 对性能和可靠性要求非常高的应用:由于HBase本身没有单点故障,可用性非常高。它支持在线扩展节点,即使应用系统的数据在一段时间内呈井喷式增长,也可以通过横向扩展来满足功能要求。

HBase读取速度快得益于内部使用了LSM树型结构,而不是B或B+树。一般来说,磁盘的顺序读取速度很快,但相对而言,寻找磁道的速度就要慢很多。HBase的存储结构决定了读取任意数量的记录不会引发额外的寻道开销。官网地址为http://hbase.apache.org。

注意

目前来说,HBase不能基于SQL来查询数据,需要使用API。

1.2.4 Apache Phoenix

前面提到,Hive是构建在Hadoop之上,可以用SQL对Hadoop中的数据进行查询和统计分析。同样地,HBase原生也不支持用SQL进行数据查询,因此使用起来不方便,比较费力。

Apache Phoenix是构建在HBase数据库之上的一个SQL翻译层。它本身用Java语言开发,可作为HBase内嵌的JDBC驱动。Apache Phoenix引擎会将SQL语句翻译为一个或多个HBase扫描任务,并编排执行以生成标准的JDBC结果集。

Apache Phoenix提供了用SQL对HBase数据库进行查询操作的能力,并支持标准SQL中大部分特性,其中包括条件运算、分组、分页等语法,因此降低了开发人员操作HBase当中的数据的难度,提高了开发效率。官网地址为http://phoenix.apache.org。

1.2.5 Apache Drill

Apache Drill是一个开源的、低延迟的分布式海量数据查询引擎,使用ANSI SQL兼容语法,支持本地文件、HDFS、HBase、MongoDB等后端存储,支持Parquet、JSON和CSV等数据格式。本质上Apache Drill是一个分布式的大规模并行处理查询层。

它是Google Dremel工具的开源实现,而Dremel是Google的交互式数据分析系统,性能非常强悍,可以处理PB级别的数据。

Google开发的Dremel工具,在处理PB级数据时,可将处理时间缩短到秒级,从而作为MapReduce的有力补充。它作为Google BigQuery的报表引擎,获得了很大的成功。Apache Drill的官网地址为https://drill.apache.org。

1.2.6 Apache Hudi

Apache Hudi代表Hadoop Upserts and Incrementals,由Uber开发并开源。它基于HDFS数据存储系统之上,提供了两种流原语:插入更新和增量拉取。它可以很好地弥补Hadoop和Hive对部分数据更新的不足。

Apache Hudi工具提供两个核心功能:首先支持行级别的数据更新,这样可以迅速地更新历史数据;其次是仅对增量数据的查询。Apache Hudi提供了对Hive、Presto和Spark的支持,可以直接使用这些组件对Hudi管理的数据进行查询。

Hudi的主要目的是高效减少数据摄取过程中的延迟。HDFS上的分析数据集通过两种类型的表提供服务:

· 读优化表(Read Optimized Table):通过列式存储提高查询性能。

· 近实时表(Near-Real-Time Table):基于行的存储和列式存储的组合提供近实时查询。

Hudi的官网地址为https://hudi.apache.org。

1.2.7 Apache Kylin

Apache Kylin是数据平台上的一个开源OLAP引擎。它采用多维立方体预计算技术,可以将某些场景下的大数据SQL查询速度提升到亚秒级别。值得一提的是,Apache Kylin是国人主导的第一个Apache顶级开源项目,在开源社区有较大的影响力。

它的查询速度如此之快,是基于预先计算尽量多的聚合结果,在查询时应该尽量利用预先计算的结果得出查询结果,从而避免直接扫描超大的原始记录。

使用Apache Kylin主要分为三步:

(1)首先,定义数据集上的一个星形或雪花形模型。

(2)其次,在定义的数据表上构建多维立方。

(3)最后,使用SQL进行查询。

Apache Kylin的官网地址为http://kylin.apache.org。

1.2.8 Apache Presto

Apache Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。它的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。

Presto支持多种数据存储系统,包括Hive、Cassandra和各类关系数据库。Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。

国内的京东和国外的Facebook都使用Presto进行交互式查询。Apache Presto的官网地址为https://prestodb.io。

1.2.9 ClickHouse

Yandex在2016年6月15日开源了一个用于数据分析的数据库,名字叫作ClickHouse,这个列式存储数据库的性能要超过很多流行的商业MPP数据库软件,例如Vertica。目前国内社区火热,各个大厂纷纷使用。

今日头条用ClickHouse做用户行为分析,内部一共几千个ClickHouse节点,单集群最大1200节点,总数据量几十PB,日增原始数据300TB左右。腾讯用ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。

携程从2018年7月份开始接入试用,目前80%的业务都跑在ClickHouse上。每天数据增量十多亿,近百万次查询请求。快手也在使用ClickHouse,每天新增200TB,90%查询低于3秒。

Clickhouse的具体特点如下;

· 面向列的DBMS。

· 数据高效压缩。

· 磁盘存储的数据。

· 多核并行处理。

· 在多个服务器上分布式处理。

· SQL语法支持。

· 向量化引擎。

· 实时数据更新。

· 索引支持。

· 适合在线查询。

· 支持近似预估计算。

· 支持嵌套的数据结构。

· 数据复制和对数据完整性的支持。

ClickHouse的官网地址为https://clickhouse.tech。

1.2.10 Apache Spark

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。它是加州大学伯克利分校的AMP实验室开源的通用并行框架。它不同于Hadoop MapReduce,计算任务中间输出结果可以保存在内存中,而不再需要读写HDFS,因此Spark计算速度更快,也能更好地适用于机器学习等需要迭代的算法。

Apache Spark是由Scala语言开发的,可以与Java程序一起使用。它能够像操作本地集合对象一样轻松地操作分布式数据集。它具有运行速度快、易用性好、通用性强和随处运行等特点。

Apache Spark提供了Java、Scala、Python以及R语言的API。还支持更高级的工具,如Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等。

Apache Spark主要有如下几个特点:

· 非常快的计算速度:它主要在内存中计算,因此在需要反复迭代的算法上,优势非常明显,比Hadoop快100倍。

· 易用性:它大概提供了80多个高级运算符,包括各种转换、聚合等操作。这相对于Hadoop组件中提供的map和reduce两大类操作来说,丰富了很多,因此可以更好地适应复杂数据的逻辑处理。

· 通用性:它除了自身不带数据存储外,其他大数据常见的业务需求,比如批处理、流计算、图计算和机器学习等都有对应的组件。因此,开发者通过Spark提供的各类组件,如Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等,可以在同一个应用程序中无缝组合使用这些库。

· 支持多种资源管理器:它支持Hadoop YARN、Apache Mesos,以及Spark自带的Standalone集群管理器。

Spark的官网地址为http://spark.apache.org。

1.2.11 Apache Flink

Apache Flink是一个计算框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算,该框架完全由Java语言开发,也是国内阿里巴巴主推的一款大数据工具。其针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能。基于流执行引擎,Flink提供了诸多更高抽象层的API,以便用户编写分布式任务。

· DataSet API:对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,用户可以方便地使用Flink提供的各种操作符,对分布式数据集进行处理。

· DataStream API:对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作。

· Table API:对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的语句对关系表进行各种查询操作。

Apache Flink的官网地址为http://flink.apache.org。

1.2.12 Apache Storm

Apache Storm是开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理。Hadoop或者Hive是大数据中进行批处理使用较为广泛的工具,这也是Hadoop或者Hive的强项。但是Hadoop MapReduce并不擅长实时计算,这也是业界一致的共识。

当前很多业务对于实时计算的需求越来越强烈,这也是Storm推出的一个重要原因。Apache Storm的官网地址为http://storm.apache.org。

注意

随着Spark和Flink对于流数据的处理能力的增强,目前不少实时大数据处理分析都从Storm迁移到Spark和Flink上,从而降低了维护成本。

1.2.13 Apache Druid

Apache Druid是一个分布式的、支持实时多维OLAP分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持实时且灵活的多维数据分析查询。因此它最常用的大数据场景就是灵活快速的多维OLAP分析。

另外,它支持根据时间戳对数据进行预聚合摄入和聚合分析,因此也经常用于对时序数据进行处理分析。

Apache Druid的主要特性如下:

· 亚秒响应的交互式查询,支持较高并发。

· 支持实时导入,导入即可被查询,支持高并发导入。

· 采用分布式shared-nothing的架构,可以扩展到PB级。

· 数据查询支持SQL。

Apache Druid的官网地址为http://druid.apache.org。

注意

目前Apache Druid不支持精确去重,不支持Join和根据主键进行单条记录更新。同时,需要与阿里开源的Druid数据库连接池区别开来。

1.2.14 Apache Kafka

Apache Kafka是一个开源流处理平台,它的目标是为处理实时数据提供一个统一、高通量、低等待的平台。Apache Kafka最初由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。在非常多的实时大数据项目中,都能见到Apache Kafka的身影。

Apache Kafka不仅仅是一个消息系统,主要用于如下场景:

· 发布和订阅:类似一个消息系统,可以读写流式数据。

· 流数据处理:编写可扩展的流处理应用程序,可用于实时事件响应的场景。

· 数据存储:安全地将流式的数据存储在一个分布式、有副本备份且容错的集群。

它的一个重要特点是可以作为连接各个子系统的数据管道,从而构建实时的数据管道和流式应用。它支持水平扩展,且具有高可用、速度快的优点,已经运行在成千上万家公司的生产环境中。Apache Kafka的官网地址为http://kafka.apache.org。

注意

某种程度上来说,很多实时大数据系统已经离不开Kafka,它充当一个内存数据库,可以快速地读写流数据。

1.2.15 TensorFlow

TensorFlow最初由谷歌公司开发,用于机器学习和深度神经网络方面的研究,它是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,包含各种工具、库和社区资源,可助力研究人员推动先进的机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。

TensorFlow的特征如下:

· 轻松地构建模型:它可以使用API轻松地构建和训练机器学习模型,这使得我们能够快速迭代模型并轻松地调试模型。

· 随时随地进行可靠的机器学习生产:它可以在CPU和GPU上运行,可以运行在台式机、服务器和手机移动端等设备上。无论使用哪种语言,都可以在云端、本地、浏览器中或设备上轻松地训练和部署模型。

· 强大的研究实验:现在科学家可以用它尝试新的算法,产品团队则用它来训练和使用计算模型,并直接提供给在线用户。

TensorFlow的官网地址为https://tensorflow.google.cn。

1.2.16 PyTorch

PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且还提供了Python接口。

它是一个以Python优先的深度学习框架,能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如TensorFlow等都不支持的。

PyTorch是相当简洁且高效的框架,从操作上来说,非常符合我们的使用习惯,这能让用户尽可能地专注于实现自己的想法,而不是算法本身。PyTorch是基于Python的,因此入门也更加简单。PyTorch的官网地址为https://pytorch.org。

1.2.17 Apache Superset

前面介绍的大数据工具,主要涉及大数据的存储、计算和查询,也涉及大数据的机器学习。但是这些数据的查询和挖掘结果如何直观地通过图表展现到UI上,以辅助更多的业务人员进行决策使用,这也是一个非常重要的课题。

没有可视化工具,再好的数据分析也不完美,可以说,数据可视化是大数据的最后一公里,因此至关重要。

Apache Superset是由Airbnb开源的数据可视化工具,目前属于Apache孵化器项目,主要用于数据可视化工作。分析人员可以不用直接写SQL语句,而是通过选择指标、分组条件和过滤条件,即可绘制图表,这无疑降低了它的使用难度。它在可视化方面做得很出色,是开源领域中的佼佼者,即使与很多商用的数据分析工具相比,也毫不逊色。

Apache Superset的官网地址为http://superset.apache.org。

注意

与Apache Superset类似的还有开源的Metabase,官网地址为https://www.metabase.com。

1.2.18 Elasticsearch

Elasticsearch是一个开源的、分布式的、提供Restful API的搜索和数据分析引擎,它的底层是开源库Apache Lucene。它使用Java编写,内部采用Lucene做索引与搜索。它的目标是使全文检索变得更加简单。

Elasticsearch具有如下特征:

· 一个分布式的实时文档存储。

· 一个分布式实时分析搜索引擎。

· 能横向扩展,支持PB级别的数据。

由于Elasticsearch的功能强大和使用简单,维基百科、卫报、Stack Overflow、GitHub等都纷纷采用它来做搜索。现在,Elasticsearch已成为全文搜索领域的主流软件之一。Elasticsearch的官网地址为https://www.elastic.co/cn/。

注意

Elasticsearch中涉及的数据可以用Kibana实现数据可视化分析。

1.2.19 Jupyter Notebook

Jupyter Notebook是一个功能非常强大的Web工具,不仅仅用于大数据分析。它的前身是IPython Notebook,是一个基于Web的交互式笔记本,支持40多种编程语言。

它的本质是一个Web应用程序,便于创建和共享程序文档,支持实时代码、数学方程、可视化和Markdown。它主要用于数据清理和转换、数值模拟、统计建模、机器学习等。Jupyter Notebook的官网地址为https://jupyter.org,官网界面如图1.1所示。

图1.1 Jupyter Notebook官网界面

1.2.20 Apache Zeppelin

Apache Zeppelin和Jupyter Notebook类似,是一个提供交互式数据分析且基于Web的笔记本。它基于Web的开源框架,使交互式数据分析变得可行的。Zeppelin提供了数据分析、数据可视化等功能。

借助Apache Zeppelin,开发人员可以构建数据驱动的、可交互且可协作的精美的在线文档,并且支持多种语言,包括Apache Spark、PySpark、Spark SQL、Hive、Markdown、Shell等。Apache Zeppelin主要功能有:

· 数据提取。

· 数据挖掘。

· 数据分析。

· 数据可视化展示。

Apache Zeppelin的官网地址为http://zeppelin.apache.org。

大数据工具发展非常快,有很多工具可能都没有听说过。就当前的行情来看,Apache Spark基本上已经成为批处理领域的佼佼者,且最新版本在流处理上也做得不错,是实现流批一体化数据处理很好的框架。

需要大数据分析与处理的公司,应该根据自身的人员技能结构和业务需求,选择合适的大数据工具。虽然大数据工具非常之多,但是Hadoop、HBase、Kafka、Spark或Flink几乎是必备的大数据工具。 /uSTM5lh35d9qAsk4wzARnkABUeo1Rf5Nc/QG2ZqDzMrcsXKqiIoCMpl6NI2YlBF

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开