数据分析是对数据进行摄取、转换和可视化的过程,用来发掘对业务决策有用的洞见。
在过去的十年中,越来越多的数据被收集,客户希望从数据中获得更有价值的洞见。他们还希望能在最短的时间内(甚至实时地)获得这种洞见。他们希望有更多的临时查询以便回答更多的业务问题。为了回答这些问题,客户需要更强大、更高效的系统。
批处理通常涉及查询大量的冷数据。在批处理中,可能需要几个小时才能获得业务问题的答案。例如,你可能会使用批处理在月底生成账单报告。
实时的流处理通常涉及查询少量的热数据,只需要很短的时间就可以得到答案。例如,基于MapReduce的系统(如Hadoop)就是支持批处理作业类型的平台。数据仓库是支持查询引擎类型的平台。
流数据处理需要摄取数据序列,并根据每条数据记录进行增量更新。通常,它们摄取连续产生的数据流,如计量数据、监控数据、审计日志、调试日志、网站点击流以及设备、人员和商品的位置跟踪事件。
图13-6展示了使用AWS云技术栈处理、转换并可视化数据的数据湖流水线。
▲图13-6 使用数据湖ETL流水线处理数据
在这里,ETL流水线使用Amazon Athena对存储在Amazon S3中的数据进行临时查询。从各种数据源(例如,Web应用服务器)摄取的数据会生成日志文件,并持久保存在S3。然后,这些文件将被Amazon Elastic MapReduce(EMR)转换和清洗成产生洞见所需的形式并加载到Amazon S3。
用COPY命令将这些转换后的文件加载到Amazon Redshift,并使用Amazon QuickSight进行可视化。使用Amazon Athena,你可以在数据存储时直接从Amazon S3中查询,也可以在数据转换后查询(从聚合后的数据集)。你可以在Amazon QuickSight中对数据进行可视化,也可以在不改变现有数据流程的情况下轻松查询这些文件。
以下是一些最流行的可以帮助你对海量数据进行转换和处理的数据处理技术:
01 Apache Hadoop
Apache Hadoop使用分布式处理架构,将任务分发到服务器集群上进行处理。分发到集群服务器上的每一项任务都可以在任意一台服务器上运行或重新运行。集群服务器通常使用HDFS将数据存储到本地进行处理。
在Hadoop框架中,Hadoop将大的作业分割成离散的任务,并行处理。它能在数量庞大的Hadoop集群中实现大规模的伸缩性。它还设计了容错功能,每个工作节点都会定期向主节点报告自己的状态,主节点可以将工作负载从没有积极响应的集群重新分配出去。
Hadoop最常用的框架有Hive、Presto、Pig和Spark。
02 Apache Spark
Apache Spark是一个内存处理框架。Apache Spark是一个大规模并行处理系统,它有不同的执行器,可以将Spark作业拆分,并行执行任务。为了提高作业的并行度,可以在集群中增加节点。Spark支持批处理、交互式和流式数据源。
Spark在作业执行过程中的所有阶段都使用有向无环图(Directed Acyclic Graph,DAG)。DAG可以跟踪作业过程中数据的转换或数据沿袭情况,并将DataFrames存储在内存中,有效地最小化I/O。Spark还具有分区感知功能,以避免网络密集型的数据改组。
03 Hadoop用户体验
Hadoop用户体验(Hadoop User Experience,HUE)使你能够通过基于浏览器的用户界面而不是命令行在集群上进行查询并运行脚本。
HUE在用户界面中提供了最常见的Hadoop组件。它可以基于浏览器查看和跟踪Hadoop操作。多个用户可以登录HUE的门户访问集群,管理员可以手动或通过LDAP、PAM、SPNEGO、OpenID、OAuth和SAML2认证管理访问。HUE允许你实时查看日志,并提供一个元存储管理器来操作Hive元存储内容。
04 Pig
Pig通常用于处理大量的原始数据,然后再以结构化格式(SQL表)存储。Pig适用于ETL操作,如数据验证、数据加载、数据转换,以及以多种格式组合来自多个来源的数据。除了ETL,Pig还支持关系操作,如嵌套数据、连接和分组。
Pig脚本可以使用非结构化和半结构化数据(如Web服务器日志或点击流日志)作为输入。相比之下,Hive总是要求输入数据满足一定模式。Pig的Latin脚本包含关于如何过滤、分组和连接数据的指令,但Pig并不打算成为一种查询语言。Hive更适合查询数据。Pig脚本根据Pig Latin语言的指令,编译并运行以转换数据。
05 Hive
Hive是一个开源的数据仓库和查询包,运行在Hadoop集群之上。SQL是一项非常常见的技能,它可以帮助团队轻松过渡到大数据世界。
Hive使用了一种类似于SQL的语言,叫作Hive Query语言(Hive Query Language,HQL),这使得在Hadoop系统中查询和处理数据变得非常容易。Hive抽象了用Java等编码语言编写程序来执行分析作业的复杂性。
06 Presto
Presto是一个类似Hive的查询引擎,但它的速度更快。它支持ANSI SQL标准,该标准很容易学习,也是最流行的技能集。Presto支持复杂的查询、连接和聚合功能。
与Hive或MapReduce不同,Presto在内存中执行查询,减少了延迟,提高了查询性能。在选择Presto的服务器容量时需要小心,因为它需要有足够的内存。内存溢出时,Presto作业将重新启动。
07 HBase
HBase是作为开源Hadoop项目的一部分开发的NoSQL数据库。HBase运行在HDFS上,为Hadoop生态系统提供非关系型数据库。HBase有助于将大量数据压缩并以列式格式存储。同时,它还提供了快速查找功能,因为其中很大一部分数据被缓存在内存中,集群实例存储也同时在使用。
08 Apache Zeppelin
Apache Zeppelin是一个建立在Hadoop系统之上的用于数据分析的基于Web的编辑器,又被称为Zeppelin Notebook。它的后台语言使用了解释器的概念,允许任何语言接入Zeppelin。Apache Zeppelin包括一些基本的图表和透视图。它非常灵活,任何语言后台的任何输出结果都可以被识别和可视化。
09 Ganglia
Ganglia是一个Hadoop集群监控工具。但是,你需要在启动时在集群上安装Ganglia。Ganglia UI运行在主节点上,你可以通过SSH访问主节点。Ganglia是一个开源项目,旨在监控集群而不影响其性能。Ganglia可以帮助检查集群中各个服务器的性能以及集群整体的性能。
10 JupyterHub
JupyterHub是一个多用户的Jupyter Notebook。Jupyter Notebook是数据科学家进行数据工程和ML的最流行的工具之一。JupyterHub服务器为每个用户提供基于Web的Jupyter Notebook IDE。多个用户可以同时使用他们的Jupyter Notebook来编写和执行代码,从而进行探索性数据分析。
11 Amazon Athena
Amazon Athena是一个交互式查询服务,它使用标准ANSI SQL语法在Amazon S3对象存储上运行查询。Amazon Athena建立在Presto之上,并扩展了作为托管服务的临时查询功能。Amazon Athena元数据存储与Hive元数据存储的工作方式相同,因此你可以在Amazon Athena中使用与Hive元数据存储相同的DDL语句。
Athena是一个无服务器的托管服务,这意味着所有的基础设施和软件运维都由AWS负责,你可以直接在Athena的基于Web的编辑器中执行查询。
12 Amazon Elastic MapReduce
Amazon Elastic MapReduce(EMR)本质上是云上的Hadoop。你可以使用EMR来发挥Hadoop框架与AWS云的强大功能。EMR支持所有最流行的开源框架,包括Apache Spark、Hive、Pig、Presto、Impala、HBase等。
EMR提供了解耦的计算和存储,这意味着不必让大型的Hadoop集群持续运转,你可以执行数据转换并将结果加载到持久化的Amazon S3存储中,然后关闭服务器。EMR提供了自动伸缩功能,为你节省了安装和更新服务器的各种软件的管理开销。
13 AWS Glue
AWS Glue是一个托管的ETL服务,它有助于实现数据处理、登记和机器学习转换以查找重复记录。AWS Glue数据目录与Hive数据目录兼容,并在各种数据源(包括关系型数据库、NoSQL和文件)间提供集中的元数据存储库。
AWS Glue建立在Spark集群之上,并将ETL作为一项托管服务提供。AWS Glue可为常见的用例生成PySpark和Scala代码,因此不需要从头开始编写ETL代码。
Glue作业授权功能可处理作业中的任何错误,并提供日志以了解底层权限或数据格式问题。Glue提供了工作流,通过简单的拖放功能帮助你建立自动化的数据流水线。
小结
数据分析和处理是一个庞大的主题,值得单独写一本书。本文概括地介绍了数据处理的流行工具。还有更多的专有和开源工具可供选择。