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