大数据是一个总称,用于描述从大型数据集中收集、组织、处理和获取见解所需的非传统策略和技术。虽然处理超出单台计算机的计算能力或存储容量的数据并不是一个新问题,但近年来,这种类型的计算的普及性、规模和价值大大扩展。
在本文中,我们将从基本层面讨论大数据,并定义您在研究该主题时可能遇到的常见概念。我们还将高层次地审视当前在这一领域使用的一些流程和技术。
“大数据”的确切定义很难确定,因为项目、供应商、从业者和业务专业人士使用它的方式各不相同。考虑到这一点,一般来说,大数据是指:
在这种情况下,“大型数据集”意味着使用传统工具或单台计算机无法合理处理或存储的数据集。这意味着大数据集的常见规模不断变化,可能在组织之间有很大差异。
处理大数据的基本要求与处理任何大小的数据集的要求相同。然而,在设计解决方案时,大规模、数据摄取和处理速度以及必须在每个阶段处理的数据特征等方面的巨大规模带来了重大挑战。大多数大数据系统的目标是从异构数据的大量数据中挖掘见解和联系,这是使用传统方法无法实现的。
2001年,Gartner的Doug Laney首次提出了后来被称为“大数据的三个V”的概念,以描述大数据与其他数据处理方式不同的一些特征:
所处理信息的规模之巨帮助定义了大数据系统。这些数据集的规模可能比传统数据集大几个数量级,这要求在处理和存储生命周期的每个阶段都需要更多的思考。
通常,由于工作需求超出了单台计算机的能力,这就成为了从一组计算机中汇集、分配和协调资源的挑战。集群管理和能够将任务分解为较小部分的算法变得越来越重要。
大数据与其他数据系统显著不同的另一方面是信息在系统中传输的速度。数据经常从多个来源流入系统,并且通常期望实时处理数据以获取见解并更新对系统的当前理解。
这种对近乎即时反馈的关注已经使许多大数据从业者远离了批处理方法,更靠近实时流处理系统。数据不断被添加、整理、处理和分析,以跟上新信息的涌入,并在最相关时尽早呈现有价值的信息。这些想法需要具有高可用组件的强大系统,以防止数据管道中的故障。
由于正在处理的来源和它们的相对质量的广泛范围,大数据问题通常是独特的。
数据可以从内部系统(如应用程序和服务器日志)、社交媒体源和其他外部API、物理设备传感器以及其他提供者那里摄取。大数据试图处理潜在有用的数据,无论其来源如何,通过将所有信息整合到一个系统中。
媒体的格式和类型也可能有很大的变化。图像、视频文件和音频记录等丰富媒体与文本文件、结构化日志等一起被摄取。而传统的数据处理系统可能期望数据进入管道时已经被标记、格式化和组织,大数据系统通常接受并存储接近其原始状态的数据。理想情况下,任何对原始数据的转换或更改将在处理时在内存中进行。
各种个人和组织已经提出扩展最初的三个V的建议,尽管这些提议往往描述的是大数据的挑战而不是特性。一些常见的补充包括:
那么,在处理大数据系统时,数据实际上是如何处理的呢?虽然实施方法有所不同,但在我们可以一般性地讨论的策略和软件中存在一些共同点。虽然下面提出的步骤可能并非在所有情况下都成立,但它们被广泛使用。
大数据处理涉及的一般活动类别包括:
在我们详细讨论这四个工作流类别之前,我们将花一点时间谈谈集群计算,这是大多数大数据解决方案采用的重要策略。设置计算集群通常是每个生命周期阶段使用的技术的基础。
由于大数据的特性,单个计算机在大多数阶段处理数据时往往是不够的。为了更好地满足大数据的高存储和计算需求,计算机集群是更合适的选择。
大数据集群软件结合了许多较小机器的资源,旨在提供一些好处:
使用集群需要解决管理集群成员资格、协调资源共享以及在单个节点上调度实际工作的解决方案。集群成员资格和资源分配可以由诸如Hadoop的YARN(代表Yet Another Resource Negotiator)或Apache Mesos等软件来处理。
组装的计算集群通常作为其他软件与之交互以处理数据的基础。参与计算集群的机器通常也涉及分布式存储系统的管理,我们将在讨论数据持久性时详细介绍。
数据摄取是将原始数据添加到系统的过程。这个操作的复杂性在很大程度上取决于数据源的格式和质量,以及数据在处理之前离所需状态的距离。
将数据添加到大数据系统的一种方式是使用专用的摄取工具。像Apache Sqoop这样的技术可以从关系数据库中获取现有数据并将其添加到大数据系统中。同样,Apache Flume和Apache Chukwa是旨在聚合和导入应用程序和服务器日志的项目。队列系统如Apache Kafka也可以用作各种数据生成器和大数据系统之间的接口。摄取框架如Gobblin可以帮助聚合和规范化摄取管道末端的这些工具的输出。
在摄取过程中,通常会进行一定程度的分析、排序和标记。这个过程有时被称为ETL,即提取、转换和加载。虽然这个术语传统上是指传统数据仓库处理过程,但其中一些概念也适用于进入大数据系统的数据。典型的操作可能包括修改传入数据的格式、对数据进行分类和标记、过滤掉不需要的或不良的数据,或者验证其是否符合某些要求。
考虑到这些能力,理想情况下,捕获的数据应尽可能保持原始,以便在管道的后续阶段具有更大的灵活性。
摄取过程通常将数据交给管理存储的组件,以便可靠地将其持久化到磁盘。虽然这似乎是一个简单的操作,但是大量的传入数据、可用性要求和分布式计算层使得更复杂的存储系统是必要的。
这通常意味着利用分布式文件系统进行原始数据存储。像Apache Hadoop的HDFS文件系统这样的解决方案允许大量数据被写入到集群中的多个节点。这确保了数据可以被计算资源访问,可以被加载到集群的内存中进行内存操作,并且可以优雅地处理组件故障。除了HDFS,还可以使用其他分布式文件系统,包括Ceph和GlusterFS。
数据也可以被导入到其他分布式系统以获得更结构化的访问。分布式数据库,特别是NoSQL数据库,非常适合这个角色,因为它们通常考虑了相同的容错考虑因素,并且可以处理异构数据。根据您想要组织和呈现数据的方式,可以选择许多不同类型的分布式数据库。要了解更多关于一些选项以及它们最适合的用途,请阅读我们的NoSQL比较指南。
一旦数据可用,系统就可以开始处理数据以呈现实际信息。计算层可能是系统中最多样化的部分,因为所需的要求和最佳方法可能会因所需的洞察类型而有很大差异。数据通常会被重复处理,要么是由单个工具进行迭代处理,要么是通过使用多个工具来呈现不同类型的洞察。
批处理是一种处理大型数据集的方法。该过程涉及将工作分解为较小的部分,在每个机器上调度每个部分,根据中间结果重新排列数据,然后计算和组装最终结果。这些步骤通常分别被称为拆分、映射、洗牌、减少和组装,或者统称为分布式映射减少算法。这是Apache Hadoop的MapReduce所使用的策略。批处理在处理需要大量计算的非常大型数据集时最有用。
虽然批处理适用于某些类型的数据和计算,但其他工作负载需要更多的实时处理。实时处理要求信息被立即处理并准备就绪,并要求系统在新信息可用时做出反应。实现这一点的一种方式是流处理,它在由单个项目组成的连续数据流上运行。实时处理器的另一个常见特征是内存计算,它使用集群内存中的数据表示,以避免必须写回磁盘。
Apache Storm、Apache Flink和Apache Spark提供了实现实时或准实时处理的不同方式。每种技术都有其权衡,这可能会影响哪种方法最适合任何个体问题。一般来说,实时处理最适合分析变化或快速添加到系统中的较小数据块。
上述示例代表了计算框架。然而,在大数据系统中,还有许多其他计算或分析数据的方式。这些工具经常插入到上述框架中,并提供与底层层交互的附加接口。例如,Apache Hive提供了Hadoop的数据仓库接口,Apache Pig提供了高级查询接口,而可以使用类似SQL的方式与数据进行交互的项目包括Apache Drill、Apache Impala、Apache Spark SQL和Presto。对于机器学习,像Apache SystemML、Apache Mahout和Apache Spark的MLlib这样的项目可能会很有用。对于在大数据生态系统中得到广泛支持的直接分析编程,R和Python都是受欢迎的选择。
由于大数据系统中处理的信息类型,识别数据随时间变化的趋势或变化通常比数值本身更重要。可视化数据是发现趋势并理解大量数据点的最有用的方法之一。
实时处理经常用于可视化应用程序和服务器指标。数据经常变化,指标中的大变化通常表明对系统或组织的健康产生重大影响。在这些情况下,像 Prometheus 这样的项目可以用于处理数据流作为时间序列数据库,并可视化该信息。
一种常用的数据可视化方式是使用 Elastic Stack,以前被称为 ELK stack。由 Logstash 用于数据收集,Elasticsearch 用于索引数据,以及 Kibana 用于可视化组成,Elastic stack 可以与大数据系统一起用于直观地查看计算结果或原始指标。使用 Apache Solr 进行索引和名为 Banana 的 Kibana 分支进行可视化可以实现类似的堆栈。由此创建的堆栈称为 Silk。
通常用于交互式数据科学工作的另一种可视化技术是数据“笔记本”。这些项目允许以交互方式探索和可视化数据,以便分享、展示或协作。这类可视化界面的常见示例包括 Jupyter Notebook 和 Apache Zeppelin。
虽然我们在整个指南中尝试在使用时定义概念,但有时将专业术语集中在一个地方会很有帮助:
大数据是一个广泛而快速发展的主题。虽然它并不适合所有类型的计算,但许多组织正在将大数据用于某些工作负载,并用它来补充其现有的分析和业务工具。大数据系统非常适合发现难以检测的模式,并提供对通过常规手段无法发现的行为的洞察。通过正确实施处理大数据的系统,组织可以从已有的数据中获得令人难以置信的价值。