介绍
大数据是收集,整理,处理和收集来自大型数据集的见解所需的非传统的战略和技术毯子项。 虽然使用超过单个计算机的计算能力或存储的数据的问题不是新的,但近年来这种类型的计算的普遍性,规模和价值已经大大扩展。
在本文中,我们将从基础层面讨论大数据,并定义在研究主题时可能遇到的常见概念。 我们还将高度评价目前在这一领域使用的一些过程和技术。
什么是大数据?
“大数据”的确切定义很难确定,因为项目,供应商,从业者和商业专业人士使用它是完全不同的。 考虑到这一点,一般来讲, 大数据是:
- 大数据集
- 用于处理大型数据集的计算策略和技术的类别
在这种情况下,“大数据集”是指数据集太大,无法使用传统工具或在单个计算机上进行合理处理或存储。 这意味着大数据集的共同规模不断变化,并且可能因组织而异。
为什么大数据系统不同?
处理大数据的基本要求与处理任何大小的数据集的要求相同。 然而,在设计解决方案时,大规模,摄取和处理的速度以及必须在该过程的每个阶段处理的数据的特性都提出了重大的新挑战。 大多数大数据系统的目标是从大量的异构数据中获得洞察力和连接,而使用传统方法是不可能的。
2001年,Gartner的Doug Laney首次提出了所谓的“三维大数据”来描述一些使大数据与其他数据处理不同的特性:
卷
处理的信息的规模有助于定义大数据系统。 这些数据集可以比传统数据集大几个数量级,这需要在处理和存储生命周期的每个阶段更多的思考。
通常,因为工作需求超过单个计算机的能力,这成为集合,分配和协调来自计算机组的资源的挑战。 集群管理和能够将任务分解成更小的部分的算法变得越来越重要。
速度
大数据与其他数据系统显着不同的另一种方式是信息通过系统的速度。 数据经常从多个源流入系统,并且通常期望实时处理以获得见解并更新对系统的当前理解。
这种对近乎即时反馈的关注已经驱使许多大数据实践者远离批处理方法并且更接近实时流系统。 数据不断被添加,按摩,处理和分析,以跟上新信息的涌入,并在最重要的时候尽早提供有价值的信息。 这些想法需要具有高可用性组件的健壮系统,以防止沿着数据管道的故障。
品种
大数据问题通常是独特的,因为所处理的源的范围广泛,并且它们的相对质量。
数据可以从内部系统(如应用程序和服务器日志),社交媒体Feed和其他外部API,物理设备传感器和其他提供程序中提取。 大数据旨在通过将所有信息合并到单个系统中来处理潜在有用的数据,而不管它来自哪里。
介质的格式和类型也可以显着变化。 图像,视频文件和音频录制等富媒体与文本文件,结构化日志等一起摄取。虽然更传统的数据处理系统可能期望数据进入已标记,格式化和组织的管道,但大数据系统通常接受并存储数据更接近其原始状态。 理想地,对原始数据的任何变换或改变将在处理时在存储器中发生。
其他特点
各种个人和组织建议扩大原来的三个Vs,虽然这些建议倾向于描述挑战,而不是大数据的质量。 一些常见的添加是:
- 准确性 :该多种来源和处理的复杂性可以导致挑战在评价数据的质量(因而,所得到的分析的质量)
- 变异性 :变化在数据导致质量很大的差异。 可能需要额外的资源来识别,处理或过滤低质量数据,使其更有用。
- 价值 :大数据的最终挑战是创造价值。 有时,现场的系统和过程是复杂的,使用数据和提取实际值可能变得困难。
大数据生命周期是什么样的?
那么在处理大数据系统时,数据是如何实际处理的呢? 虽然实施方法不同,但在我们可以一般性讨论的策略和软件中有一些共同点。 虽然下面提出的步骤在所有情况下可能不是真实的,但是它们被广泛使用。
大数据处理涉及的活动的一般类别有:
- 将数据摄入系统
- 将数据保存在存储中
- 计算和分析数据
- 可视化结果
我们来看看这四个类别的工作流程中的细节,我们会花点时间来谈谈集群计算 ,大多数的大数据解决方案采用的重要策略。 设置计算集群通常是每个生命周期阶段中使用的技术的基础。
集群计算
由于大数据的质量,单个计算机通常不足以处理大多数阶段的数据。 为了更好地满足大数据的高存储和计算需要,计算机集群是更好的适合。
大数据集群软件结合了许多较小机器的资源,寻求提供许多好处:
- 资源池 :结合可用存储空间来保存数据是一个明显的好处,但CPU和内存池也是极为重要的。 处理大型数据集需要大量的这三种资源。
- 高可用性 :集群可以提供容错和可用性保证的不同级别,以防止硬件或软件故障而影响对数据的访问和处理。 随着我们继续强调实时分析的重要性,这变得越来越重要。
- 易扩展性 :集群可以很容易地通过添加额外的机器到组横向扩展。 这意味着系统可以对资源需求的变化做出反应,而不扩展机器上的物理资源。
使用集群需要一个解决方案来管理集群成员资格,协调资源共享,以及调度单个节点上的实际工作。 群集成员和资源配置都可以用Hadoop的纱软件(代表又一资源谈判代表)或Apache Mesos处理。
组装的计算集群通常充当其他软件与之接口以处理数据的基础。 计算集群中涉及的机器通常还涉及分布式存储系统的管理,我们将在讨论数据持久性时讨论它。
将数据摄入系统
数据摄取是获取原始数据并将其添加到系统的过程。 该操作的复杂性在很大程度上取决于数据源的格式和质量以及数据在处理之前与期望状态的距离。
可以将数据添加到大数据系统的一种方式是专用摄取工具。 如Apache Sqoop技术可以从关系数据库利用现有的数据,并把它添加到一个大的数据系统。 同样,Apache的水槽和Apache Chukwa旨在汇聚和进口的应用程序和服务器日志的项目。 如Apache Kafka排队系统也可以用作各种数据发生器和一个大的数据系统之间的接口。 像Gobblin摄取框架可以帮助聚集,并在摄取管道的端部归这些工具的输出。
在摄取过程中,通常会发生某种程度的分析,分类和标记。 这个过程有时被称为ETL,它代表提取,转换和加载。 尽管该术语通常指的是传统数据仓库过程,但是一些相同的概念适用于进入大数据系统的数据。 典型的操作可能包括修改传入数据以对其进行格式化,对数据进行分类和标记,过滤掉不需要的或坏的数据,或潜在地验证它符合某些要求。
考虑到这些能力,理想情况下,捕获的数据应尽可能保持原始,以便在管道上进一步提供更大的灵活性。
将数据保存在存储器中
提取过程通常将数据交给管理存储的组件,以便它可以可靠地持久保存到磁盘。 虽然这看起来像是一个简单的操作,传入数据量,可用性要求和分布式计算层使得更复杂的存储系统是必要的。
这通常意味着利用分布式文件系统进行原始数据存储。 如Apache Hadoop的HDFS文件系统解决方案,允许大量的数据跨多个节点的集群中的编写。 这确保了数据可以由计算资源访问,可以加载到集群的RAM中进行内存操作,并且可以优雅地处理组件故障。 其它分布式文件系统可以代替HDFS的包括头孢和GlusterFS使用。
数据还可以导入到其他分布式系统中,以实现更加结构化的访问。 分布式数据库(尤其是NoSQL数据库)非常适合这种角色,因为它们通常设计为具有相同的容错注意事项,并且可以处理异构数据。 有许多不同类型的分布式数据库可供选择,具体取决于您想要如何组织和呈现数据。 要了解更多关于一些选择和什么样的目的,他们最好的服务,请阅读我们的NoSQL比较指南 。
计算和分析数据
一旦数据可用,系统可以开始处理数据以表达实际信息。 计算层可能是系统中最不同的部分,因为需求和最佳方法可以根据所需的洞察类型而显着变化。 数据经常被反复处理,或者通过单个工具迭代地处理,或者通过使用多个工具来表达不同类型的见解。
批量处理是在大的数据集计算的一种方法。 该过程包括将工作分解成更小的块,在单个机器上安排每个块,基于中间结果重新安排数据,然后计算和组合最终结果。 这些步骤通常单独称为分割,映射,混排,缩减和组合,或者统称为分布式映射缩减算法。 这是Apache的Hadoop的MapReduce使用的策略。 当处理需要相当多的计算的非常大的数据集时,批处理是最有用的。
虽然批量处理是一个非常适合某些类型的数据和计算的,其它工作负载需要更多的实时处理 。 实时处理要求立即处理信息并使其准备就绪,并要求系统在新信息可用时做出反应。 实现这一点的方法之一是流处理 ,其中对个别项目组成的数据的连续流进行操作。 实时处理器的另一个常见特性是内存计算,它与集群内存中的数据表示一起工作,以避免写回磁盘。
Apache的风暴 , Apache弗林克和Apache星火提供实现实时或近实时处理的不同方式。 这些技术各有利弊,这可以影响哪种方法最适合任何个别问题。 通常,实时处理最适合于分析正在改变或正在被快速添加到系统中的较小数据块。
上述示例表示计算框架。 然而,存在许多其他在大数据系统内计算或分析数据的方式。 这些工具经常插入上述框架并提供用于与底层交互的附加接口。 例如,Apache蜂巢提供一个数据仓库接口Hadoop的, Apache猪提供高电平查询界面,而具有数据的SQL状相互作用可以与如Apache电钻 , Apache帕拉 , Apache火花SQL和的Presto项目来实现。 机器学习,比如Apache SystemML,Mahout 的Apache和Apache星火的MLlib项目可能是有用的。 对于直编程分析中具有大数据生态系统的广泛支持,R和Python的是流行的选择。
可视化结果
由于在大数据系统中处理的信息的类型,识别趋势或数据随时间的变化通常比值本身更重要。 可视化数据是发现趋势和了解大量数据点的最有用的方法之一。
实时处理经常用于可视化应用程序和服务器度量。 数据经常变化,度量中的大三角形通常表示对系统或组织的健康的显着影响。 在这些情况下,像Prometheus项目可以是用于处理数据流作为一个时间序列数据库和可视化该信息是有用的。
可视化数据的一种流行的方式是与弹性 ,原名ELK。 由用于数据收集的Logstash,用于索引数据的Elasticsearch和用于可视化的Kibana组成,Elastic可以与大数据系统一起使用,以可视化地与计算结果或原始度量接口。 可使用Apache Solr实现索引和Kibana叉叫香蕉可视化来实现类似的。 这些创建的称为丝绸 。
通常用于交互式数据科学工作的另一种可视化技术是数据“笔记本”。 这些项目允许以有助于共享,呈现或协作的格式进行对数据的交互式探索和可视化。 这种类型的可视化界面的最典型的例子是Jupyter笔记本电脑和Apache飞艇 。
大数据词汇表
虽然我们已经尝试定义概念,因为我们在整个指南中使用它们,有时在一个地方有专门的术语是有帮助的:
- 大数据 :大数据是不能合理地由传统的电脑或工具,由于其体积,速度和处理各种数据集的总称。 该术语通常也适用于使用此类数据的技术和策略。
- 批处理 :批处理是涉及大型成套处理数据的计算策略。 这通常适用于对非常大的数据集进行操作的非时间敏感型工作。 该过程开始,并在稍后的时间,系统返回结果。
- 集群计算 :集群计算是集中多台机器的资源和管理他们的能力来完成任务的做法。 计算机集群需要一个集群管理层来处理各个节点之间的通信并协调工作分配。
- 数据湖 :数据湖是在相对原始状态的大型资料库收集的数据的一个术语。 这常常用于指在大数据系统中收集的数据,这些数据可能是非结构化的并且经常改变。 这在精神上与数据仓库(下面定义)不同。
- 数据挖掘 :数据挖掘是试图找到在大型数据集模式的实践一个广义的术语。 它是试图将大量数据改进为更易理解和一致的信息集的过程。
- 数据仓库 :数据仓库很大,下令可用于分析和报告数据的存储库。 在对比数据湖 ,数据仓库是由已被清洗,与其他来源的整合,并且通常秩序井然的数据。 数据仓库通常涉及大数据,但通常是更常规系统的组件。
- ETL:ETL代表提取,转换和加载。 它指的是获取原始数据并为系统使用做准备的过程。 这通常是与数据仓库相关联的过程,但是该过程的特征也在大数据系统的摄取管道中找到。
- Hadoop的 :Hadoop是一个Apache项目,这是在大数据早期的开源成功。 它由称为HDFS的分布式文件系统组成,在顶层称为YARN(又一资源协商器)上具有集群管理和资源调度器。 批处理能力由MapReduce计算引擎提供。 其他计算和分析系统可以在现代Hadoop部署中与MapReduce一起运行。
- 内存计算 :在内存计算是涉及移动完全在一个集群的集体记忆工作数据集的策略。 中间计算不会写入磁盘,而是保存在内存中。 这使得内存计算系统(如Apache Spark)在速度上超过I / O绑定系统(如Hadoop的MapReduce)的巨大优势。
- 机器学习 :机器学习是研究和设计,可以学习,调整,完善的基础上提供给他们的数据系统的做法。 这通常涉及预测和统计算法的实现,其可以在更多数据流过系统时连续地在“正确”行为和见解上归零。
- 地图减少(大数据的算法):减少地图(大数据的算法,不Hadoop的MapReduce计算引擎)是一个计算集群上调度工作的算法。 该过程涉及分割问题设置(将其映射到不同的节点),并对它们进行计算以产生中间结果,对结果进行重排以对齐相似的集合,然后通过为每个集合输出单个值来减少结果。
- NoSQL的 :NoSQL的是一个广义的术语,指设计传统的关系模型之外的数据库。 与关系数据库相比,NoSQL数据库具有不同的权衡,但由于其灵活性和频繁的分布式第一架构,它们通常非常适合大数据系统。
- 流处理 :流处理是计算对个别数据项的做法,因为他们通过系统移动。 这允许对馈送到系统的数据的实时分析,并且对于使用高速度量的时间敏感操作是有用的。
结论
大数据是一个广泛,迅速演变的话题。 虽然它不是很适合所有类型的计算,但许多组织正在转向大数据的某些类型的工作负载,并使用它来补充其现有的分析和业务工具。 大数据系统独特地适用于呈现难以检测的模式并提供对通过常规手段不可能找到的行为的洞察。 通过正确实现处理大数据的系统,组织可以从已经可用的数据获得令人难以置信的价值。