可扩展机器学习——Spark分布式处理

时间:2022-05-04
本文章向大家介绍可扩展机器学习——Spark分布式处理,主要内容包括二、Spark分布式处理、2、分布式处理概述、3、Map-Reduce的工作原理、4、Spark工作原理、5、RDD、6、Spark的工具、7、Spark与MapReduce之间的差异、8、Spark实践、参考文献、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。

可扩展机器学习系列主要包括以下几个部分:

  • 概述
  • Spark分布式处理
  • 线性回归(linear Regression)
  • 梯度下降(Gradient Descent)
  • 分类——点击率预测(Click-through Rate Prediction)
  • 神经科学

二、Spark分布式处理

Spark图标:

1、大数据问题

在传统的数据处理问题中,通常是使用单机处理,随着时代的发展,信息技术也在不断发展,但是数据的增长速度已经远远超过了计算机计算速度。数据的增长如下图所示:

在这样的情况下,单机的环境就很难处理和存储如此庞大的数据,唯一的解决方法就是利用庞大的集群,分布式的存储和处理这些数据。

2、分布式处理概述

下面以统计一篇文章中出现的单词的次数为例,来介绍如何使用分布式的计算方法处理大数据。对于如下的一篇文章的单词统计:

其中,一种方法是使用Hash表,在Hash表中,key为每一个单词,Value为每个单词出现的次数,如:

在上述的方法中,若数据集较好,则可以在单机的条件下很容易的得到处理,但是当数据量变得很大的时候,单机环境下不能处理所有的数据,此时,可以使用不同的机器对不同的文章进行统计,使用的依旧是Hash表的存储形式,最后使用一台机器对最终的结果进行汇总,具体过程如下图所示:

在这样的情况下也会存在问题,即最终的结果需要在一台机器上完成,要是数据量很大,那么第一需要的计算量比较大,第二,存储空间会受到限制。为了解决第一个问题,可以在中间再增加一些计算层,如下图所示:

但是依旧在最后需要在一台机器上进行汇总,为了彻底解决上述的两个问题,可以使用下述的分布式的计算方法:

其中,第一阶段称为Map,第二阶段称为Reduce,如下图所示:

3、Map-Reduce的工作原理

上述的分布式计算便是Google的Map-Reduce的基本原理,这样的基于集群的计算模式需要解决两个问题:

  • 如何在不同的机器上划分工作。
  • 如何处理失败的问题。

对于第一个问题,通常考虑网络,数据所在的位置,因为在不同的机器之间移动数据是一个很昂贵的工作。对于第二个问题,通常是重启一个新的任务,如下图所示:

对于比较慢的工作,通常也是重启一个新的任务,如下图所示:

综上,可以看到分布式计算中的两阶段模式,即Map阶段和Reduce阶段,具体的处理流程如下图所示:

如果任务较为复杂或者是需要迭代的过程,可以通过组合多个Map和Reduce过程来处理,如下图:

但是Map-Reduce在处理数据的过程中时,需要大量的I/O操作,I/O操作需要占据大量的处理时间。

4、Spark工作原理

随着内存价格的下降,同时为了解决Map-Reduce在计算过程中的大量I/O操作,Spark的原则是将数据尽可能存储在内存中(in-memory),因为内存的操作速度要快于外存的I/O速度。

如在Map-Reduce过程中的操作为:

而在Spark中,操作的图为:

在过程中,将中间过程的数据存储在内存中,这样便会大大降低了I/O的时间。

5、RDD

RDD(Resilient Distributed Dataset)称为弹性分布式数据集,是Spark的核心概念。一个RDD代表一系列的“记录”。这些记录被分配或被分区到一个集群的多个节点上。Spark中的RDD具有容错性,即当某个节点或任务失败时,RDD会在余下的节点上自动重建,以便任务能最终完成。

6、Spark的工具

Spark的工具主要包括:

  • Spark SQL
  • Spark Streaming
  • MLlib
  • GraphX

7、Spark与MapReduce之间的差异

8、Spark实践

Spark的安装可见《Spark机器学习》,单机版的只需要下载与解压缩即可。在课程中,使用的是Python的接口:pyspark

对于Spark的使用,可以参见Spark编程指南——Python版

若需要PDF版本,请关注我的新浪博客@赵_志_勇,私信你的邮箱地址给我。

参考文献

scalable-machine-learning