Hadoop与Spark大数据处理挑战

第11章 使用Hadoop和Spark存储与处理大数据的挑战

11.1 引言

对大数据进行分析的主要挑战在于缺乏标注数据,因为分类所需的训练需要领域专家参与。相比之下,获取未标注数据较为容易,但在情感分析和语音识别等应用中,需要进行深度训练才能使数据适用于分析。本章讨论在存储、处理以及对未标注数据进行分类方面所面临的挑战,这类数据很容易通过亚马逊和Twitter等众多评论网站获得。训练未标注大数据的两种传统模型是卷积神经网络(CNN)和深度置信网络(DBN)。当数据规模过大时,CNN的缺点在于容易陷入局部最小值并出现过拟合现象[1]。为了克服这一局限性,可以采用DBN模型,该模型包含两种类型的层:无监督层和有监督层,如图11.1所示。无监督层负责学习未标注数据的权重,而有监督层则基于前两个无监督层所确定的权重来训练数据。为了提高训练数据的性能,可以使用图形处理单元(GPU)。在GPU中,全局内存具有更高 bandwidth,可大幅节省机器间数据传输的时间。Tensor T‐DBN是一个能够在多个神经元之间并行化数据训练的平台,其中每个神经元负责处理(1/n)任务的十分之一。Spark的基本单元是弹性分布式数据集(RDD)。RDD适用于容错的数据元素获取,并可进行并行操作,同时支持共享或连接HBase、Hadoop、HDFS以及任何输入格式。随着时间快速推进,技术和应用日益发展,深度学习与大数据技术的结合正逐步形成一种有效的分布式计算框架,应用于集群环境中。行业需求已经发生变化,正在向更先进的方法演进。众所周知,深度学习(DL)在计算上非常繁重,当我们将其与大数据技术结合使用时,计算负担变得难以承受。我们可以通过分布式处理来克服这一计算难题,所有研究上述大数据技术的学者都在致力于提出更好的解决方案。目前,这种结合已经极大地改变了我们的工作方式。Databricks公司开发了基于Python API的深度学习(DL)和大数据技术框架,在发挥大数据技术和深度学习优势方面起到了关键作用。在大数据技术中,存在一种名为MLlib的模型,其API能够以较少的代码行数(LOC)轻松启用深度学习模块。两者的共同重点是在不牺牲性能的前提下实现集成。一些大数据技术可以通过Python API与其他平台集成,这些API已被用于开发,迄今为止几乎可以集成所有常用库,包括最强大的深度学习库TensorFlow和Keras。

稍后章节将介绍Apache大数据技术在深度学习方面的局限性和研究空白。

11.2 背景与主要焦点

重点在于构建一种新的分析架构,以满足当今各行各业的所有需求。分析架构包含三个层次[2]:首先是分析平台能力,即创建企业分析解决方案所需的一套构建模块,以满足组织内商业用例集合的功能需求;其次是分析平台软件,即用于实现分析平台能力的一组软件组件偏好;第三是分析平台硬件,即网络、服务器、存储和边缘设备规格,以确保分析平台软件能够满足可用性、可扩展性、性能及其他非商业用例的功能需求。分析平台架构的功能域分为[3]:数据供给域,负责流数据摄取、在关系型数据库管理系统、HDFS和非结构化来源之间移动数据;数据存储、分发和处理域,负责流处理、分析数据库、内存中分布式计算;数据分析域,负责社交媒体与文本分析、统计方法、机器学习、媒体与语音分析;嵌入式分析域,负责分布式流程控制、事件驱动的业务规则、复杂事件处理;信息交付域,负责可视分析、实时报告;企业信息管理域,负责分布式计算数据管理;开发、部署与解决方案维护域,负责设计工具、分析模型管理;基础设施交付域,负责分布式计算安全、管理与监控;以及最后的服务交付域,负责分析平台/解决方案。在[4,5]中,作者使用加权模糊逻辑为训练数据分配权重,以从标注的推文中提取情感,并取得了良好的F值,而在[6]中,作者对预测模型进行了详细比较,并对时间序列数据集进行了分析。在[7]中,作者对PIMA糖尿病数据集进行了分析,并基于胰岛素特征预测了糖尿病水平,而在[8]中,作者在确定推文情感所用术语的精确权重时采用了梯度上升算法,并采用提升方法来提高线性分类器的准确性。在[9]中,作者提出了一种对乳腺癌数据集进行预测的新方法。比较了三种不同特征选择算法的性能,并证明遗传算法在从所有可用特征中选择最佳特征方面效果最好。SVM算法在预测乳腺癌的确诊程度方面表现最佳。

11.2.1 大数据技术的挑战

在开发阶段,进行应用程序的开发。在部署时,可能会遇到各种挑战。在独立阶段部署应用程序时会使用不同的方法。大数据技术支持Mesos和YARN。构建依赖配置也有助于在集群节点上无异常地部署应用程序。

11.2.1.1 内存问题

大数据技术已准备好协助传输大量数据。解决内存相关问题对于监控与测量简单使用情况至关重要。

  • 适当的文档不会导致失败——每次操作的每一步都应被记录下来,以便将来在从单点故障中恢复系统时使用。
  • 频繁变更更加危险——设置后的版本变更可能会被推翻。
11.2.1.2 Apache大数据技术的局限性

在处理大量数据时,大数据技术与深度学习在小文件和重复数据管理方面更为适用。目前,业界正致力于向Apache Flink转向以应对大数据。深度学习的组合

11.3 HADOOP架构

Apache Hadoop提供了一个可扩展、灵活且可靠的分布式计算大数据框架,适用于由具有存储容量和本地计算能力的商用硬件组成的集群。Hadoop采用主从架构,如图11.2所示,其中名称节点包含HDFS中所有数据块的元数据,用于通过Hadoop MapReduce范式对大型数据集进行转换和分析[10]。在HADOOP架构中起关键作用的三个重要Hadoop组件是Hadoop分布式文件系统(HDFS)[11], Hadoop MapReduce以及资源管理框架YARN。

11.4 MAPREDUCE架构

MapReduce能够处理大规模数据,并且在一次写入,多次读取(WORM)[12]环境下无需互斥锁即可运行。MapReduce操作由同一个物理处理器执行。所有操作都需要本地数据(数据本地性)。运行时负责数据的分片和移动。MapReduce包含以下阶段:映射阶段从HDFS读取分配的输入分片,并将其解析为键值对;在分区阶段,每个映射器应确定其各个输出所发送到的归约器;混洗阶段可准备归约任务桶,合并阶段将所有映射输出排序为单个序列;然后归约阶段处理相应的值列表,并将其写入HDFS中的文件,如图11.3所示。图11.4展示了一个使用MapReduce开发的示例应用,其中说明了在给定文本中出现的词频。

以下数据集列表用于Hadoop实践:

示意图0

示意图1

示意图2

示意图3

  • Amazon. 众所周知,亚马逊在云计算领域处于市场领先地位。AWS正在大规模地与Hadoop一起使用。此外,亚马逊还提供了大量可用于Hadoop实践的数据集。您可以下载这些数据集。
  • Wikipedia. 是的!维基百科也提供用于Hadoop实践的数据集。您将获得更新且真实的可用数据。
  • Air traffic. 机场、航空公司和航线数据(全球共6977个机场、5888家航空公司和59,036条航线)。
  • UCI Machine Learning Repository. 一个包含数据库、领域理论和数据生成器的集合。
  • LinkedData. 您几乎可以在这里找到所有类别的数据集。

11.5 MapReduce中的连接

映射器在映射阶段的任务是“读取”连接表中的数据,并将“连接键”和“连接值”对写入中间文件[13]。随后,在洗牌阶段,该中间文件会被排序和合并。归约器在归约阶段的任务是将此排序结果作为输入,并完成连接操作,如图11.5所示。

示意图4

示意图5

顾名思义,在Reduce端连接中,归约器负责执行连接操作。与Map端连接相比,这种方法更简单且更容易实现,因为排序与洗牌阶段会将具有相同键的值发送到同一个归约器,因此数据默认已经为我们组织好了。现在,让我们详细了解一下当图11.6中的数据集作为输入时的Reduce端连接。

ZooKeeper的架构基于一个简单的客户端‐服务器模型[14]。客户端是向服务器请求服务的节点,而服务器是处理请求的节点。它提供了一个高可用性文件系统:没有文件和目录,而是采用统一的节点概念,称为Znode(临时的或持久的),它既是数据容器(类似于文件),也是其他znode的容器(类似于目录)[15]。对Znode执行的操作包括:通过指定主机名将Znode连接到主机;通过在路径名中指定组名以持久化模式创建Znode;通过指定路径和组名加入新成员;通过将路径作为参数传递给getChildren()来列出Znode的子节点;从现有路径中删除成员。

11.6 Apache Storm

它是一个分布式实时大数据处理系统,旨在以容错和水平可扩展的方式处理海量数据,并实现最高的摄入速率[16]。它通过Apache ZooKeeper管理分布式环境和集群状态。从一端读取实时数据的原始数据流,经过一系列小型处理单元进行处理,然后在另一端输出有用信息。图11.7中的组件代表了Apache Storm的核心概念。

Apache Storm的主要亮点之一是它具有容错性、快速,且没有“单点故障”。“单点故障”(SPOF)分布式应用[17]。每个Supervisor节点中包含的重要高层组件包括:拓扑,它在多个工作节点上的多个工作进程中分布式运行;数据源,它从消息框架读取元组并将其作为消息流发射,或者连接到Twitter API并发射推文流;处理单元,它是拓扑内最小的处理逻辑。处理单元的输出可以在拓扑中作为输入传递给另一个处理单元。

示意图6

第11章 使用Hadoop和Spark存储与处理大数据的挑战(续)

11.7 APACHE SPARK 环境

Apache Spark 非常适合数据工程,能够处理案例数据集而无需过多考虑基础设施。它有助于数据摄取、处理、机器学习和准确性,并提供了构建分布式系统的框架。大数据技术的最大优势在于数据访问和传输的速度,这促使了MapReduce的实施,将数据保存在内存中而非磁盘上。此外,大数据技术还为Java、Scala和Python等编程语言提供了大量库。

11.7.1 大数据技术的用例

  • 分析 。它可用于对流式传输的数据进行实时分析。它能够从不同源传输海量数据。大数据技术支持Kafka、ZeroMQ、HDFS、Plume和Twitter。
  • 趋势数据 。对于在线流,大数据技术将更适合处理数据,其中趋势数据可以轻松存储,并在运行时进行分析。
  • 物联网 。物联网通过安装在各地的传感器产生大量数据。生成的数据被推送至存储并进行处理。大数据技术已被应用于定期(每秒、分钟、小时)的数据处理与传输。
  • 机器学习 。Spark可用于离放处理,并可使用机器学习算法。由于ML包含不同的算法,因此可以轻松地在数据集上部署机器学习。我们可以将其应用于数据集以实现实时机器学习系统。我们还可以将MLlib与Spark结合使用。

在编程上下文中,创建了Spark上下文,它提供了加载和保存不同类型数据文件的方法[18],从而也可以从Spark上下文中创建SQL上下文,以隐式地将弹性分布式数据集(RDD)转换为数据框。使用Spark上下文,它可以使用textFile()方法将文本文件加载到弹性分布式数据集(RDD)中,从而创建一个数据框。接下来定义一个配置对象,用于创建Spark上下文。然后创建一个模式字符串,该字符串包含数据列名称,并通过按空格分割该字符串,使用StructType()和StructField()方法将每个模式列定义为字符串值来创建模式。随后,通过使用逗号作为行分隔符对原始数据进行分割,从原始数据创建每一行数据,并将元素添加到Row()结构中。根据模式创建数据框,并使用saveAsTextFile()将其保存到HDFS。Apache Parquet是另一种基于列的数据格式,通过高效压缩和编码例程来提升性能。

11.8 使用GraphX进行图分析

图处理是分析中的一个重要方面,适用于许多用例[19]。从根本上讲,图论和处理关注的是定义不同节点和边之间的关系。节点或顶点是基本单元,而边则定义了图中节点之间的关系,如图11.8所示。

示意图7

算法2 构建图的算法。
1. 开始。
2. 导入数据。
3. 使用顶点(或节点)结构和边结构构建图。
4. 执行一些连接操作,以确保数据集中的数据项相互关联。
5. 创建一组顶点,并为每个顶点附加元数据。
6. 通过为所有单独的行添加一个值为1的虚拟值来创建边。
7. 为不指向任何顶点的边考虑一个默认站点。
8. 现在使用顶点、边和默认信息创建了图实例。
9. 可以使用该实例访问如 numVertices、numEdges等属性。
10. 停止。

11.9 流式数据 analytics

流式数据基本上是由传感器、服务器流量和在线搜索等源生成的连续的数据记录组。流式数据的来源包括通常是网站上的用户活动。流式数据有助于创建实时仪表板。在构建用于实时收集、处理和分析流式数据的应用程序时,与处理静态批处理数据相比,我们需要考虑不同的设计因素。不同的流式数据处理框架[20]在市场上可用,例如 Apache Samza、Storm 和 Spark Streaming,如图11.9所示。Spark Streaming

示意图8

示意图9

将数据流转换为称为离散流的X秒批处理,其内部是弹性分布式数据集(RDD)的序列。随后,使用Spark处理这些弹性分布式数据集(RDD),并且RDD操作的结果以批处理形式返回,如图11.10所示。Spark Streaming的批处理通过Spark引擎进行处理,该引擎返回一个pro‐

算法3 使用Spark进行基于TCP的流处理。
1. 启动
2. 从 Apache.org导入Spark流处理上下文
3. 使用sparkconf()创建一个配置实例,指定本地主机为主节点
4. 创建一个批次大小为5秒的流处理上下文实例
5. 创建一个可连接到主机名和端口的离散流实例,使用sockettextstream()
6. 对离散流执行转换
7. 使用MapReduce逻辑组织上下文
8. 使用 start()启动捕获流处理上下文
9. 等待计算终止
10. 运行nc ‐lk 端口号以激活网络猫作为数据服务器
11. 停止

经过处理的批处理流可以存储到文件系统中,最小批次大小为0.5秒,导致端到端延迟为一秒。

11.10 未来研究方向

在未来,我们希望通过提出一种新的分析平台来满足行业需求,该平台能够以更少的人力和基础设施满足所有实时需求。

11.11 结论

从本章我们可以得出结论:大数据分析领域存在许多且各种各样的挑战。研究人员通过理解本章讨论的所有概念,可以在选择该领域的研究课题时节省宝贵的时间。大数据框架适用于数据工程,能够处理案例数据集而无需过多考虑基础设施。它们有助于数据摄取、处理、机器学习和准确性,为构建分布式系统提供框架。大数据技术的最大优势在于数据访问和传输的速度,这促使MapReduce的实现将数据保存在内存中而非磁盘上。此外,大数据技术还为Java、Scala和Python等编程语言提供了大量库。

当前研究工作的局限性在于仅在小规模数据集上进行了实验。未来,我们的目标是针对数据量考虑实时大数据集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值