大数据是收集,组织,处理和收集大型数据集洞察所需的非传统策略和技术的总称。虽然处理超过单个计算机的计算能力或存储的数据的问题并不新鲜,但近年来这种类型的计算的普遍性,规模和价值已经大大扩展。
什么是大数据?
“大数据”的确切定义很难确定,因为项目,供应商,从业者和商业专业人士使用它的方式完全不同。考虑到这一点,一般来说,大数据是:
- 大数据集
- 用于处理大型数据集的计算策略和技术的类别
在此上下文中,“大数据集”表示数据集太大而无法使用传统工具或在单个计算机上合理地处理或存储。这意味着大数据集的共同规模不断变化,并且可能因组织而异。
为什么大数据系统不同?
使用大数据的基本要求与使用任何大小的数据集的要求相同。然而,在设计解决方案时,大规模,摄取和处理的速度以及在过程的每个阶段必须处理的数据的特征提出了重大的新挑战。大多数大数据系统的目标是从大量异构数据中获得使用传统方法无法实现的洞察力和连接。
2001 年,Gartner 的 Doug Laney 首次提出了所谓的“大数据的三个 V”来描述使大数据与其他数据处理不同的一些特征:
处理的信息规模很大,有助于定义大数据系统。这些数据集可以比传统数据集大几个数量级,这需要在处理和存储生命周期的每个阶段进行更多思考。
通常,由于工作要求超出了单台计算机的功能,因此这成为了从计算机组中汇集,分配和协调资源的挑战。能够将任务分解成更小部分的集群管理和算法变得越来越重要。
大数据与其他数据系统显着不同的另一种方式是信息在系统中移动的速度。数据经常从多个来源流入系统,并且通常需要实时处理以获得见解并更新当前对系统的理解。
这种对近乎即时反馈的关注促使许多大数据从业者远离面向批处理的方法,更接近实时流媒体系统。数据不断被添加,按摩,处理和分析,以便跟上新信息的涌入,并在最相关时及早发现有价值的信息。这些想法需要具有高可用组件的强大系统,以防止数据管道中的故障。
大数据问题通常是独特的,因为处理的来源和它们的相对质量都很广泛。
数据可以从内部系统(如应用程序和服务器日志),社交媒体源和其他外部 API,物理设备传感器以及其他提供商处获取。大数据旨在通过将所有信息整合到单个系统中来处理潜在有用的数据,而不管它来自何处。
媒体的格式和类型也可能有很大差异。图像,视频文件和录音等富媒体与文本文件,结构化日志等一起被摄取。虽然更传统的数据处理系统可能希望数据进入已标记,格式化和组织的管道,但大数据系统通常接受和存储数据更接近其原始状态。理想情况下,原始数据的任何转换或更改都将在处理时在内存中进行。
不同的个人和组织建议扩大原有的三个 V,尽管这些提议倾向于描述挑战而不是大数据的质量。一些常见的补充是:
- 准确性:各种来源和处理的复杂性可能会导致评估数据质量的挑战(从而导致分析的质量)
- 可变性:数据的变化导致质量的广泛变化。可能需要额外的资源来识别,处理或过滤低质量数据以使其更有用。
- 价值:大数据的最终挑战是提供价值。有时,现有的系统和流程足够复杂,使用数据和提取实际值可能变得困难。
大数据生命周期是什么样的?
那么在处理大数据系统时如何实际处理数据呢?虽然实施方法不同,但我们可以谈论的策略和软件有一些共性。虽然下面列出的步骤可能并非在所有情况下都适用,但它们被广泛使用。
涉及大数据处理的一般活动类别是:
- 将数据提取到系统中
- 将数据保存在存储中
- 计算和分析数据
- 可视化结果
在详细介绍这四个工作流程类别之前,我们将花点时间讨论集群计算,这是大多数大数据解决方案采用的重要策略。建立计算集群通常是每个生命周期阶段使用的技术的基础。
由于大数据的质量,个人计算机通常不足以在大多数阶段处理数据。为了更好地满足大数据的高存储和计算需求,计算机集群更适合。
大数据集群软件结合了许多小型机器的资源,力求提供许多好处:
- 资源池:结合可用的存储空间来保存数据是一个明显的好处,但 CPU 和内存池也非常重要。处理大型数据集需要大量所有这三种资源。
- 高可用性:群集可以提供不同级别的容错和可用性保证,以防止硬件或软件故障影响对数据和处理的访问。随着我们继续强调实时分析的重要性,这变得越来越重要。
- 易于扩展:通过向组中添加其他计算机,集群可以轻松地进行水平扩展。这意味着系统可以对资源需求的变化做出反应,而无需扩展计算机上的物理资源。
使用群集需要一个解决方案来管理群集成员资格,协调资源共享以及在各个节点上安排实际工作。集群成员资格和资源分配可以由 Hadoop 的 YARN(代表 Yet Another Resource Negotiator)或 Apache Mesos 等软件处理。
组装的计算集群通常充当其他软件与处理数据接口的基础。计算集群中涉及的机器通常也涉及分布式存储系统的管理,我们将在讨论数据持久性时讨论这些问题。
数据摄取是获取原始数据并将其添加到系统的过程。此操作的复杂性在很大程度上取决于数据源的格式和质量以及数据在处理之前与期望状态的距离。
可以将数据添加到大数据系统的一种方法是专用摄取工具。Apache Sqoop 等技术可以从关系数据库中获取现有数据,并将其添加到大数据系统中。同样,Apache Flume 和 Apache Chukwa 是旨在聚合和导入应用程序和服务器日志的项目。像 Apache Kafka 这样的排队系统也可以用作各种数据生成器和大数据系统之间的接口。像 Gobblin 这样的摄取框架可以帮助在摄取管道的末尾聚合和规范化这些工具的输出。
在摄取过程中,通常会进行一定程度的分析,分类和标记。此过程有时称为 ETL,表示提取,转换和加载。虽然该术语通常是指遗留数据仓库过程,但是一些相同的概念适用于进入大数据系统的数据。典型的操作可能包括修改传入数据以对其进行格式化,对数据进行分类和标记,过滤掉不需要的或不良的数据,或者可能验证它是否符合某些要求。
考虑到这些功能,理想情况下,捕获的数据应尽可能保持原始状态,以便在管道上进一步提高灵活性。
摄取过程通常将数据交给管理存储的组件,以便可以可靠地持久保存到磁盘。虽然这似乎是一个简单的操作,但是传入数据量,可用性要求和分布式计算层使得更复杂的存储系统成为必需。
这通常意味着利用分布式文件系统进行原始数据存储。像 Apache Hadoop 的 HDFS 文件系统这样的解决方案允许在群集中的多个节点上写入大量数据。这确保了计算资源可以访问数据,可以将数据加载到集群的 RAM 中以进行内存操作,并且可以优雅地处理组件故障。可以使用其他分布式文件系统代替 HDFS,包括 Ceph 和 GlusterFS。
还可以将数据导入其他分布式系统,以实现更加结构化的访问。分布式数据库,尤其是 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 堆栈。由用于数据收集的 Logstash,用于索引数据的 Elasticsearch 和用于可视化的 Kibana 组成,Elastic 堆栈可以与大数据系统一起使用,以便与计算结果或原始指标进行可视化交互。使用 Apache Solr 进行索引并使用名为 Banana 的 Kibana fork 进行可视化,可以实现类似的堆栈。由这些创建的堆栈称为 Silk。
通常用于交互式数据科学工作的另一种可视化技术是数据“笔记本”。这些项目允许以有助于共享,呈现或协作的格式进行数据的交互式探索和可视化。这种可视化界面的流行示例是 Jupyter Notebook 和 Apache Zeppelin。
大数据词汇表
虽然我们在整个指南中尝试定义概念,但有时在一个地方提供专业术语是有帮助的:
- 大数据:大数据是数据集的总称,由于其数量,速度和种类,传统计算机或工具无法合理处理这些数据集。该术语通常也适用于使用此类数据的技术和策略。
- 批处理:批处理是一种涉及处理大型数据集的计算策略。这通常适用于对非常大的数据集进行操作的非时间敏感型工作。该过程开始,稍后,系统返回结果。
- 集群计算:集群计算是汇集多台计算机资源并管理其集合功能以完成任务的实践。计算机集群需要一个集群管理层来处理各个节点之间的通信并协调工作分配。
- 数据湖:数据湖是一个相对原始状态的大型收集数据存储库的术语。这通常用于指在大数据系统中收集的数据,这些数据可能是非结构化的并且经常发生变化。这与数据仓库(下面定义)的精神不同。
- 数据挖掘:数据挖掘是尝试在大型数据集中查找模式的实践的一个广义术语。这是一个尝试将大量数据细化为更易理解和更有凝聚力的信息的过程。
- 数据仓库:数据仓库是大型有序的数据存储库,可用于分析和报告。与数据湖相比,数据仓库由已清理,与其他来源集成的数据组成,并且通常是有序的。数据仓库通常与大数据有关,但通常是更传统系统的组件。
- ETL:ETL 代表提取,转换和加载。它指的是获取原始数据并为系统使用做好准备的过程。传统上这是与数据仓库相关的过程,但是这个过程的特征也可以在大数据系统的摄取管道中找到。
- Hadoop:Hadoop 是一个 Apache 项目,是大数据的早期开源成功。它由一个名为 HDFS 的分布式文件系统组成,顶部有一个集群管理和资源调度程序,称为 YARN(Yet Another Resource Negotiator)。批处理功能由 MapReduce 计算引擎提供。其他计算和分析系统可以与现代 Hadoop 部署中的 MapReduce 一起运行。
- 内存计算:内存计算是一种涉及将工作数据集完全移动到集群的集体内存中的策略。中间计算不会写入磁盘,而是保存在内存中。这使像 Apache Spark 这样的内存计算系统在速度上超过了 I / O 绑定系统(如 Hadoop 的 MapReduce)的巨大优势。
- 机器学习:机器学习是设计系统的研究和实践,可以根据提供给他们的数据来学习,调整和改进。这通常涉及预测和统计算法的实现,当更多数据流过系统时,预测和统计算法可以不断地将“正确”行为和见解归为零。
- Map reduce(大数据算法):Map reduce(大数据算法,而不是 Hadoop 的 MapReduce 计算引擎)是一种用于在计算集群上调度工作的算法。该过程涉及拆分问题设置(将其映射到不同的节点)并对它们进行计算以产生中间结果,将结果混洗以对齐类似的集合,然后通过为每个集合输出单个值来减少结果。
- NoSQL:NoSQL 是一个广义术语,指的是在传统关系模型之外设计的数据库。与关系数据库相比,NoSQL 数据库具有不同的权衡,但由于其灵活性和频繁的分布式优先架构,它们通常非常适合大数据系统。
- 流处理:流处理是在单个数据项在系统中移动时计算的实践。这允许对馈送到系统的数据进行实时分析,并且对于使用高速度量的时间敏感操作是有用的。
结论
大数据是一个广泛,快速发展的主题。虽然它并不适合所有类型的计算,但许多组织正在转向某些类型的工作负载的大数据,并使用它来补充现有的分析和业务工具。大数据系统非常适合于表现难以检测的模式,并提供对通过传统方法无法找到的行为的洞察力。通过正确实施处理大数据的系统,组织可以从已有的数据中获得令人难以置信的价值。