引言

大数据是一个概括性的术语,指的是从大型数据集中收集、组织、处理和收集见解所需的非传统策略和技术。 虽然处理超过一台计算机的计算能力或存储容量的数据的问题并不新鲜,但近年来这种类型的计算的普及性、规模和价值已经大大扩展。

在本文中,我们将从基础层面讨论大数据,并定义在研究这个主题时可能遇到的常见概念。 我们还将对目前在这一领域使用的一些流程和技术进行高层次的审视。

什么是大数据?

“大数据”的确切定义很难确定,因为项目、供应商、从业人员和业务专业人员使用它的方式非常不同。 考虑到这一点,一般来说,大数据是:

  • 大型数据集
  • 用于处理大数据集的计算策略和技术的分类

在这个上下文中,“大数据集”意味着数据集过大,无法用传统工具或单台计算机合理处理或存储。 这意味着大数据集的共同规模是不断变化的,并且在不同组织之间可能存在显著差异。

为什么大数据系统与众不同?

处理大数据的基本要求与处理任何规模的数据集的要求是一样的。 然而,在设计解决方案时,大规模、摄取和处理的速度以及在过程的每个阶段必须处理的数据的特点都提出了重大的新挑战。 大多数大数据系统的目标是从大量的异构数据中获得表面的洞察力和连接,而这些是传统方法无法实现的。

2001年,Gartner 的道格•兰尼(Doug Laney)首次提出了后来被称为“大数据的三个 Vs”的概念,以描述使大数据不同于其它数据处理的一些特征:

音量

所处理信息的庞大规模有助于定义大数据系统。 这些数据集可以比传统的数据集数量级更大,传统的数据集在处理和存储生命周期的每个阶段都需要更多的思考。

通常,由于工作需求超出了单台计算机的能力,这就变成了从计算机组中汇集、分配和协调资源的挑战。 集群管理和能够将任务分解成更小块的算法变得越来越重要。

速度

大数据与其他数据系统的另一个显著区别是信息在系统中传输的速度。 数据经常从多个来源流入系统,通常需要实时处理,以获得洞察力和更新对系统的当前理解。

这种对近乎即时反馈的关注,使得许多大数据从业者远离了面向批处理的方法,而更接近于实时流系统。 数据不断地被添加、处理、处理和分析,以便跟上新信息的涌入,并在最相关的时候及早显示有价值的信息。 这些想法需要具有高可用组件的健壮系统,以防止沿着数据管道出现故障。

多样性

大数据问题往往是独一无二的,因为处理的数据来源范围很广,质量也相对较高。

数据可以从内部系统(如应用程序和服务器日志)、社交媒体 feed 和其他外部 api、物理设备传感器和其他供应商获取。 通过将所有信息整合到一个系统中,大数据试图处理潜在有用的数据,而不管这些数据来自何处。

媒体的格式和类型也会有很大的不同。 图像、视频文件和音频记录等富媒体与文本文件、结构化日志等一起被摄取。 虽然更多传统的数据处理系统可能期望数据进入已经标记、格式化和组织的管道,但大数据系统通常接受并存储更接近原始状态的数据。 理想情况下,对原始数据的任何转换或更改将在处理时在内存中发生。

其他特征

许多个人和组织都建议扩展最初的三个 v,尽管这些建议倾向于描述大数据的挑战而不是质量。 一些常见的附加条件是:

  • 准确性: 来源的多样性和处理的复杂性可能导致在评估数据质量(以及随之而来的结果分析的质量)方面的挑战
  • 变异性: 数据的变异导致质量的巨大差异。 可能需要额外的资源来识别、处理或过滤低质量的数据,使其更加有用。
  • 价值: 大数据的终极挑战是提供价值。 有时,现有的系统和流程非常复杂,以至于使用数据和提取实际值可能会变得非常困难。

大数据生命周期是什么样的?

那么,在处理大数据系统时,数据实际上是如何处理的呢? 虽然实现的方法不同,但在策略和软件中有一些共同点,我们可以大致讨论。 虽然下面介绍的步骤可能不是在所有情况下都正确,但它们被广泛使用。

与大数据处理有关的一般活动类别如下:

  • 将数据输入系统
  • 在存储中保存数据
  • 计算和分析数据
  • 可视化结果

在我们详细研究这四个工作流类别之前,我们将花一点时间讨论一下集群计算,这是大多数大数据解决方案所采用的一种重要策略。 建立计算集群通常是生命周期各个阶段所使用的技术的基础。

集群计算

由于大数据的特性,在大多数阶段,单个计算机往往不足以处理数据。 为了更好地解决大数据的高存储和计算需求,计算机集群是一个更好的选择。

大数据集群软件结合了许多小机器的资源,试图提供一些好处:

  • 资源池: 合并可用的存储空间来保存数据是一个明显的好处,但是 CPU 和内存池也非常重要。 处理大型数据集需要大量这三种资源。
  • 高可用性: 集群可以提供不同级别的容错和可用性保证,以防止硬件或软件故障影响数据访问和处理。 随着我们继续强调实时分析的重要性,这一点变得越来越重要。
  • 简单的可伸缩性: 通过向组中添加额外的机器,集群可以方便地进行水平伸缩。 这意味着系统可以对资源需求的变化做出反应,而不需要扩展机器上的物理资源。

使用集群需要一个解决方案来管理集群成员关系、协调资源共享和调度单个节点上的实际工作。 集群成员关系和资源分配可以通过 Hadoop 的 YARN (代表 Yet Another Resource Negotiator)或 Apache Mesos 之类的软件来处理。

组合计算集群经常作为其他软件接口处理数据的基础。 计算集群中涉及的机器通常还涉及分布式存储系统的管理,我们在讨论数据持久性时将讨论这一点。

将数据输入系统

数据摄入是获取原始数据并将其添加到系统中的过程。 这种操作的复杂性在很大程度上取决于数据源的格式和质量,以及数据在处理之前与所需状态的距离。

将数据添加到大数据系统的一种方式是专门的摄入工具。 诸如 Apache Sqoop 之类的技术可以从关系数据库中获取现有数据并将其添加到大数据系统中。 类似地,apacheflume 和 apachechukwa 是用于聚合和导入应用程序和服务器日志的项目。 排队系统,如 Apache Kafka,也可以用作各种数据生成器和大数据系统之间的接口。 摄入框架(如 Gobblin)可以帮助聚合这些工具在摄入管道的末尾的输出并使其正常化。

在摄入过程中,通常会进行某种程度的分析、分类和标记。 这个过程有时称为 ETL,它代表提取、转换和加载。 虽然这个术语通常指的是遗留的数据仓库过程,但有些相同的概念也适用于进入大数据系统的数据。 典型的操作可能包括修改传入的数据以格式化它,对数据进行分类和标记,过滤掉不需要的或坏的数据,或者潜在地验证它是否符合某些要求。

考虑到这些功能,理想情况下,捕获的数据应该尽可能保持原始,以便在管道下方获得更大的灵活性。

在存储中保存数据

摄入过程通常将数据交给管理存储的组件,以便可以可靠地将数据持久化到磁盘。 虽然这看起来是一个简单的操作,但是传入数据的数量、对可用性的要求以及分布式计算层使得更复杂的存储系统成为必要。

这通常意味着利用分散式档案系统存储原始数据。 像 Apache Hadoop 的 HDFS 文件系统这样的解决方案允许跨集群中的多个节点写入大量数据。 这确保了可以通过计算资源访问数据,可以将数据加载到集群的 RAM 中进行内存操作,并且可以优雅地处理组件故障。 其他分布式文件系统可以用来代替 HDFS,包括 Ceph 和 GlusterFS。

还可以将数据导入其他分布式系统,以实现更加结构化的访问。 分布式数据库,尤其是 NoSQL 数据库,非常适合这种角色,因为它们通常都是基于相同的容错考虑而设计的,并且可以处理异构数据。 有许多不同类型的分布式数据库可供选择,这取决于您希望如何组织和显示数据。 要了解更多关于这些选项的信息以及它们最好的用途,请阅读我们的 NoSQL 比较指南。

计算和分析数据

一旦数据可用,系统就可以开始处理数据以显示实际信息。 计算层可能是系统中最多样化的部分,因为需求和最佳方法可能根据所需的洞察类型而有很大的不同。 数据经常被重复处理,或者由一个工具迭代地处理,或者使用一些工具来表现不同类型的洞察力。

批处理是对大数据集进行计算的一种方法。 这个过程包括将工作分解成更小的部分,在单个机器上安排每个部分,根据中间结果重新排列数据,然后计算和装配最终结果。 这些步骤通常分别称为拆分、映射、洗牌、缩小和装配,或者统称为分布式 map reduce 算法。 这是 Apache Hadoop 的 MapReduce 使用的策略。 批处理在处理需要大量计算的大型数据集时最为有用。

虽然批处理非常适合某些类型的数据和计算,但其他工作负载需要更多的实时处理。 实时处理要求立即处理和准备信息,并要求系统在获得新信息时作出反应。 实现这一点的一种方法是流处理,它操作于由单个项组成的连续数据流。 实时处理器的另一个常见特征是内存计算,它与集群内存中的数据表示一起工作,以避免必须写回磁盘。

Apachestorm、 apacheflick 和 apachespark 提供了实现实时或接近实时处理的不同方法。 这些技术中的每一种都存在权衡,这可能会影响到哪种方法对于任何单个问题都是最佳的。 一般来说,实时处理最适合于分析正在变化或快速添加到系统中的较小数据块。

上面的例子代表了计算框架。 然而,在一个大数据系统中,还有许多其他的计算或分析数据的方法。 这些工具经常插入上述框架,并为与底层层交互提供额外的接口。 例如,Apache Hive 为 Hadoop 提供了一个数据仓库接口,Apache Pig 提供了一个高级查询接口,而类似 SQL 的数据交互可以通过诸如 Apache Drill、 Apache Impala、 Apache Spark SQL 和 Presto 等项目实现。 对于机器学习,诸如 Apache SystemML、 Apache Mahout 和 Apache Spark 的 MLlib 这样的项目可能很有用。 对于在大数据生态系统中得到广泛支持的直接分析编程,r 和 Python 都是流行的选择。

可视化结果

由于在大数据系统中处理的信息类型,随着时间的推移,识别数据的趋势或变化往往比数值本身更为重要。 可视化数据是发现趋势和理解大量数据点最有用的方法之一。

实时处理经常用于可视化应用程序和服务器度量。 数据变化频繁,度量指标中的大三角区通常表明对系统或组织的健康状况有重大影响。 在这些情况下,像普罗米修斯这样的项目可以作为一个时间序列数据库来处理数据流,并可视化这些信息。

一种流行的数据可视化方式是使用 elasticstack (以前称为 ELK 堆栈)。 由数据收集的 Logstash、索引数据的 Elasticsearch 和可视化的 Kibana 组成,Elastic 堆栈可以用于大数据系统,与计算结果或原始指标进行可视化交互。 类似的堆栈可以使用 Apache Solr 进行索引,使用 Kibana fork Banana 进行可视化。 这个堆栈被称为西尔克。

另一种用于交互式数据科学工作的可视化技术是数据“笔记本”。 这些项目允许以有利于分享、呈现或合作的格式对数据进行交互式探索和可视化。 这种类型的可视化界面的流行例子是 Jupyter Notebook 和 Apache Zeppelin。

大数据词汇表

虽然我们已经尝试在整个指南中使用这些概念来定义它们,但有时在一个地方使用专门的术语是有帮助的:

  • 大数据: 大数据是数据集的总称,由于其数量、速度和多样性,传统的计算机或工具无法合理地处理这些数据集。 这个术语通常也适用于处理此类数据的技术和策略。
  • 批处理: 批处理是一种在大型集合中处理数据的计算策略。 这对于处理非常大的数据集的非时间敏感性工作非常理想。 这个过程是启动的,在稍后的时间,结果由系统返回。
  • 集群计算: 集群计算是将多台计算机的资源汇集起来,并管理它们完成任务的集体能力的实践。 计算机集群需要一个集群管理层来处理各个节点之间的通信并协调工作分配。
  • 数据湖: 数据湖是一个术语,指在相对原始状态下收集的大量数据存储库。 这常常用于指在大数据系统中收集的数据,这些数据可能是非结构化的并且经常变化。 这在精神上与数据仓库不同(在下面定义)。
  • 数据挖掘: 数据挖掘是一个宽泛的术语,用于尝试在大型数据集中找到模式。 这是一个试图将大量数据提炼为更易于理解和更有凝聚力的信息集的过程。
  • 数据仓库: 数据仓库是可用于分析和报告的大型、有序的数据仓库。 与数据湖相比,数据仓库由经过清理的数据组成,这些数据与其他数据源集成在一起,并且通常排序良好。 数据仓库通常与大数据有关,但通常是更传统系统的组成部分。
  • Etl: ETL 代表提取、转换和加载。 它指的是获取原始数据并将其准备供系统使用的过程。 这传统上是一个与数据仓库相关的过程,但是这个过程的特点也可以在大数据系统的摄入管道中找到。
  • Hadoop: Hadoop 是一个 Apache 项目,是早期开源在大数据领域的成功。 它由一个分布式文件系统 HDFS 组成,顶部有一个集群管理和资源调度程序 YARN (Yet Another Resource Negotiator)。 Mapreduce 计算引擎提供了批处理功能。 其他计算和分析系统可以在现代 Hadoop 部署中与 MapReduce 并行运行。
  • 内存计算: 内存计算是一种将工作数据集完全移动到集群集体内存中的策略。 中间计算不写入磁盘,而是保存在内存中。 这使得像 Apache Spark 这样的内存计算系统在速度上比 Hadoop 的 MapReduce 这样的 i / o 绑定系统具有巨大的优势。
  • 机器学习: 机器学习是研究和实践设计系统,可以学习,调整和改进的基础上的数据提供给他们。 这通常涉及预测和统计算法的实现,随着越来越多的数据流经系统,这些算法可以不断地瞄准“正确”的行为和洞察力。
  • Map reduce (大数据算法) : Map reduce (大数据算法,而不是 Hadoop 的 MapReduce 计算引擎)是在计算集群上调度工作的算法。 这个过程包括拆分问题集(将其映射到不同的节点)并对其进行计算以产生中间结果,将结果重新排列以对齐类似的集合,然后通过为每个集合输出单个值来减少结果。
  • 是一个宽泛的术语,指的是在传统关系模型之外设计的数据库。 Nosql 数据库与关系数据库有不同的权衡,但由于其灵活性和频繁的分布式优先架构,通常非常适合于大数据系统。
  • 流处理: 流处理是在单个数据项通过系统时对其进行计算的实践。 这允许实时分析提供给系统的数据,并且对于使用高速度度量的时间敏感的操作非常有用。

总结

大数据是一个广泛的、迅速发展的话题。 虽然它并不适合于所有类型的计算,但许多组织正在将大数据用于某些类型的工作负载,并使用它来补充现有的分析和业务工具。 大数据系统特别适合表面难以检测的模式,并提供洞察行为是不可能找到通过传统的手段。 通过正确实施处理大数据的系统,组织可以从已有的数据中获得难以置信的价值。