介绍
大数据是一个总称,用于描述从大型数据集中收集、组织、处理和获取见解所需的非传统策略和技术。虽然处理超出单台计算机的计算能力或存储容量的数据并不是一个新问题,但近年来,这种类型的计算的普及性、规模和价值大大扩展。
在本文中,我们将从基本层面讨论大数据,并定义您在研究该主题时可能遇到的常见概念。我们还将高层次地审视当前在这一领域使用的一些流程和技术。
什么是大数据?
“大数据”的确切定义很难确定,因为项目、供应商、从业者和业务专业人士使用它的方式各不相同。考虑到这一点,一般来说,大数据是指:
- 大型数据集
- 用于处理大型数据集的计算策略和技术类别
在这种情况下,“大型数据集”意味着使用传统工具或单台计算机无法合理处理或存储的数据集。这意味着大数据集的常见规模不断变化,可能在组织之间有很大差异。
为什么大数据系统不同?
处理大数据的基本要求与处理任何大小的数据集的要求相同。然而,在设计解决方案时,大规模、数据摄取和处理速度以及必须在每个阶段处理的数据特征等方面的巨大规模带来了重大挑战。大多数大数据系统的目标是从异构数据的大量数据中挖掘见解和联系,这是使用传统方法无法实现的。
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文件系统这样的解决方案允许大量数据被写入到集群中的多个节点。这确保了数据可以被计算资源访问,可以被加载到集群的内存中进行内存操作,并且可以优雅地处理组件故障。除了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。
大数据术语表
虽然我们在整个指南中尝试在使用时定义概念,但有时将专业术语集中在一个地方会很有帮助:
- 大数据:大数据是指由于其数据量、速度和多样性而无法通过传统计算机或工具合理处理的数据集的总称。这个术语通常也适用于处理这种类型数据的技术和策略。
- 批处理:批处理是一种涉及以大批量处理数据的计算策略。这通常适用于非时间敏感的工作,适用于非常大的数据集。该过程在系统中启动,稍后系统返回结果。
- 集群计算:集群计算是将多台计算机的资源汇集起来,管理它们的集体能力以完成任务的实践。计算机集群需要一个集群管理层,该层处理单个节点之间的通信并协调工作分配。
- 数据湖:数据湖是指相对原始状态下收集的大型数据存储库的术语。这经常用于指代大数据系统中收集的可能是非结构化且经常变化的数据。这与数据仓库(下文定义)的精神不同。
- 数据挖掘:数据挖掘是试图在大型数据集中找到模式的广义术语。这是将大量数据精炼为更可理解和连贯的信息集的过程。
- 数据仓库:数据仓库是可用于分析和报告的大型有序数据存储库。与 数据湖 相反,数据仓库由已经清理、与其他来源集成并且通常有序的数据组成。数据仓库通常与大数据相关,但通常是更传统系统的组成部分。
- ETL:ETL 指的是抽取、转换和加载。它指的是将原始数据准备为系统使用的过程。传统上,这是与数据仓库相关的过程,但这个过程的特征也在大数据系统的摄取管道中找到。
- Hadoop:Hadoop 是大数据早期的开源成功项目。它由一个名为 HDFS 的分布式文件系统组成,上面有一个名为 YARN(Yet Another Resource Negotiator)的集群管理和资源调度器。MapReduce 计算引擎提供了批处理能力。在现代 Hadoop 部署中,MapReduce 旁边可以运行其他计算和分析系统。
- 内存计算:内存计算是一种策略,它涉及将工作数据集完全移动到集群的集体内存中。中间计算不会写入磁盘,而是保存在内存中。这使得像 Apache Spark 这样的内存计算系统在速度上比像 Hadoop 的 MapReduce 这样的 I/O 限制系统具有巨大优势。
- 机器学习:机器学习是设计能够根据输入的数据学习、调整和改进的系统的研究和实践。这通常涉及实施可以不断聚焦于“正确”行为和见解的预测和统计算法,随着更多数据流经系统。
- Map reduce(大数据算法):Map reduce(大数据算法,而不是 Hadoop 的 MapReduce 计算引擎)是一种用于在计算集群上调度工作的算法。该过程涉及将问题集拆分(映射到不同节点)并在其上计算以生成中间结果,通过整理结果以对齐相似集,然后通过输出单个值来减少结果。
- NoSQL:NoSQL 是一个广义术语,指的是在传统关系模型之外设计的数据库。与关系数据库相比,NoSQL 数据库有不同的权衡,但由于其灵活性和频繁的分布式优先架构,通常非常适合大数据系统。
- 流处理:流处理是在数据项通过系统时对其进行计算的实践。这允许对馈送到系统的数据进行实时分析,并且对使用高速度指标进行时间敏感操作非常有用。
结论
大数据是一个广泛而快速发展的主题。虽然它并不适合所有类型的计算,但许多组织正在将大数据用于某些工作负载,并用它来补充其现有的分析和业务工具。大数据系统非常适合发现难以检测的模式,并提供对通过常规手段无法发现的行为的洞察。通过正确实施处理大数据的系统,组织可以从已有的数据中获得令人难以置信的价值。