大数据是收集,组织,处理和收集大型数据集洞察所需的非传统策略和技术的总称。虽然处理超过单个计算机的计算能力或存储的数据的问题并不新鲜,但近年来这种类型的计算的普遍性,规模和价值已经大大扩展。
什么是大数据?“大数据”的确切定义很难确定,因为项目,供应商,从业者和商业专业人士使用它的方式完全不同。考虑到这一点,一般来说,大数据是:
大数据集用于处理大型数据集的计算策略和技术的类别在此上下文中,“大数据集”表示数据集太大而无法使用传统工具或在单个计算机上合理地处理或存储。这意味着大数据集的共同规模不断变化,并且可能因组织而异。
为什么大数据系统不同?使用大数据的基本要求与使用任何大小的数据集的要求相同。然而,在设计解决方案时,大规模,摄取和处理的速度以及在过程的每个阶段必须处理的数据的特征提出了重大的新挑战。大多数大数据系统的目标是从大量异构数据中获得使用传统方法无法实现的洞察力和连接。
2001年,Gartner的DougLaney首次提出了所谓的“大数据的三个V”来描述使大数据与其他数据处理不同的一些特征:
体积处理的信息规模很大,有助于定义大数据系统。这些数据集可以比传统数据集大几个数量级,这需要在处理和存储生命周期的每个阶段进行更多思考。
通常,由于工作要求超出了单台计算机的功能,因此这成为了从计算机组中汇集,分配和协调资源的挑战。能够将任务分解成更小部分的集群管理和算法变得越来越重要。
数据可以从内部系统(如应用程序和服务器日志),社交媒体源和其他外部API,物理设备传感器以及其他提供商处获取。大数据旨在通过将所有信息整合到单个系统中来处理潜在有用的数据,而不管它来自何处。
媒体的格式和类型也可能有很大差异。图像,视频文件和录音等富媒体与文本文件,结构化日志等一起被摄取。虽然更传统的数据处理系统可能希望数据进入已标记,格式化和组织的管道,但大数据系统通常接受和存储数据更接近其原始状态。理想情况下,原始数据的任何转换或更改都将在处理时在内存中进行。
其他特点不同的个人和组织建议扩大原有的三个V,尽管这些提议倾向于描述挑战而不是大数据的质量。一些常见的补充是:
涉及大数据处理的一般活动类别是:
集群计算由于大数据的质量,个人计算机通常不足以在大多数阶段处理数据。为了更好地满足大数据的高存储和计算需求,计算机集群更适合。
大数据集群软件结合了许多小型机器的资源,力求提供许多好处:
资源池:结合可用的存储空间来保存数据是一个明显的好处,但CPU和内存池也非常重要。处理大型数据集需要大量所有这三种资源。高可用性:群集可以提供不同级别的容错和可用性保证,以防止硬件或软件故障影响对数据和处理的访问。随着我们继续强调实时分析的重要性,这变得越来越重要。易于扩展:通过向组中添加其他计算机,集群可以轻松地进行水平扩展。这意味着系统可以对资源需求的变化做出反应,而无需扩展计算机上的物理资源。使用群集需要一个解决方案来管理群集成员资格,协调资源共享以及在各个节点上安排实际工作。集群成员资格和资源分配可以由Hadoop的YARN(代表YetAnotherResourceNegotiator)或ApacheMesos等软件处理。
组装的计算集群通常充当其他软件与处理数据接口的基础。计算集群中涉及的机器通常也涉及分布式存储系统的管理,我们将在讨论数据持久性时讨论这些问题。
将数据提取到系统中数据摄取是获取原始数据并将其添加到系统的过程。此操作的复杂性在很大程度上取决于数据源的格式和质量以及数据在处理之前与期望状态的距离。
可以将数据添加到大数据系统的一种方法是专用摄取工具。ApacheSqoop等技术可以从关系数据库中获取现有数据,并将其添加到大数据系统中。同样,ApacheFlume和ApacheChukwa是旨在聚合和导入应用程序和服务器日志的项目。像ApacheKafka这样的排队系统也可以用作各种数据生成器和大数据系统之间的接口。像Gobblin这样的摄取框架可以帮助在摄取管道的末尾聚合和规范化这些工具的输出。
在摄取过程中,通常会进行一定程度的分析,分类和标记。此过程有时称为ETL,表示提取,转换和加载。虽然该术语通常是指遗留数据仓库过程,但是一些相同的概念适用于进入大数据系统的数据。典型的操作可能包括修改传入数据以对其进行格式化,对数据进行分类和标记,过滤掉不需要的或不良的数据,或者可能验证它是否符合某些要求。
考虑到这些功能,理想情况下,捕获的数据应尽可能保持原始状态,以便在管道上进一步提高灵活性。
保持存储中的数据摄取过程通常将数据交给管理存储的组件,以便可以可靠地持久保存到磁盘。虽然这似乎是一个简单的操作,但是传入数据量,可用性要求和分布式计算层使得更复杂的存储系统成为必需。
这通常意味着利用分布式文件系统进行原始数据存储。像ApacheHadoop的HDFS文件系统这样的解决方案允许在群集中的多个节点上写入大量数据。这确保了计算资源可以访问数据,可以将数据加载到集群的RAM中以进行内存操作,并且可以优雅地处理组件故障。可以使用其他分布式文件系统代替HDFS,包括Ceph和GlusterFS。
还可以将数据导入其他分布式系统,以实现更加结构化的访问。分布式数据库,尤其是NoSQL数据库,非常适合此角色,因为它们通常设计有相同的容错考虑因素,并且可以处理异构数据。有许多不同类型的分布式数据库可供选择,具体取决于您希望如何组织和呈现数据。
计算和分析数据一旦数据可用,系统就可以开始处理数据以显示实际信息。计算层可能是系统中最多样化的部分,因为需求和最佳方法可能会根据所需的洞察类型而有很大差异。数据通常由一个工具迭代地重复处理,或者通过使用许多工具来表示不同类型的见解。
批处理是一种计算大型数据集的方法。该过程包括将工作分成更小的部分,在单个机器上安排每个部件,根据中间结果重新调整数据,然后计算和组装最终结果。这些步骤通常分别称为分裂,映射,改组,缩减和组装,或统称为分布式地图缩减算法。这是ApacheHadoop的MapReduce使用的策略。在处理需要大量计算的非常大的数据集时,批处理最有用。
虽然批处理非常适合某些类型的数据和计算,但其他工作负载需要更多的实时处理。实时处理要求立即处理和准备信息,并要求系统在新信息可用时作出反应。实现此目的的一种方式是流处理,其对由各个项组成的连续数据流进行操作。实时处理器的另一个共同特征是内存计算,它与集群内存中数据的表示一起使用,以避免必须写回磁盘。
ApacheStorm,ApacheFlink和ApacheSpark提供了实现实时或近实时处理的不同方法。这些技术中的每一种都存在权衡,这可能会影响哪种方法最适合任何个别问题。通常,实时处理最适合分析正在快速更改或添加到系统的较小数据块。
以上示例表示计算框架。但是,在大数据系统中还有许多其他计算或分析数据的方法。这些工具经常插入上述框架,并提供额外的接口以与底层进行交互。例如,ApacheHive为Hadoop提供了一个数据仓库接口,ApachePig提供了一个高级查询接口,而与数据类似的SQL交互可以通过ApacheDrill,ApacheImpala,ApacheSparkSQL和Presto等项目实现。对于机器学习,ApacheSystemML,ApacheMahout和ApacheSpark的MLlib非常有用。对于在大数据生态系统中得到广泛支持的直接分析编程,R和Python都是受欢迎的选择。
一种流行的数据可视化方法是使用ElasticStack,以前称为ELK堆栈。由用于数据收集的Logstash,用于索引数据的Elasticsearch和用于可视化的Kibana组成,Elastic堆栈可以与大数据系统一起使用,以便与计算结果或原始指标进行可视化交互。使用ApacheSolr进行索引并使用名为Banana的Kibanafork进行可视化,可以实现类似的堆栈。由这些创建的堆栈称为Silk。
通常用于交互式数据科学工作的另一种可视化技术是数据“笔记本”。这些项目允许以有助于共享,呈现或协作的格式进行数据的交互式探索和可视化。这种可视化界面的流行示例是JupyterNotebook和ApacheZeppelin。
大数据词汇表虽然我们在整个指南中尝试定义概念,但有时在一个地方提供专业术语是有帮助的: