并行框架学习1:Pyspark介绍及安装(基于Python)

  Apache Spark 是一个开源集群运算框架,最初是由加州大学柏克莱分校 AMPLab 所开发。相对于 Hadoop 的 MapReduce 会在运行完工作后将中介数据存放到磁盘中,Spark 使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。Spark 在存储器内运行程序的运算速度能做到比 Hadoop MapReduce 的运算速度快上 100 倍,即便是运行程序于硬盘时,Spark 也能快上 10 倍速度。Spark 允许用户将数据加载至集群存储器,并多次对其进行查询,非常适合用于机器学习算法1

  为什么要学 Spark?基于 MapReduce 的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到 MapReduce 任务时,往往会产生多个 Stage,而这些串联的 Stage 又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。

  Spark 是 MapReduce 的替代方案,而且兼容 HDFS、Hive,可融入 Hadoop 的生态系统,以弥补 MapReduce 的不足。

Pyspark介绍及安装

Spark的组成

  Spark项目包含下列几项:

Spark 核心和弹性分布式数据集(RDDs)

  Spark 核心是整个项目的基础,提供了分布式任务调度,调度和基本的 I/O 功能。而其基础的程序抽象则称为弹性分布式数据集(RDDs),是一个可以并行操作、有容错机制的数据集合。RDDs 可以透过引用外部存储系统的数据集创建(例如:共享文件系统、HDFS、HBase 或其他 Hadoop 数据格式的数据源)。或者是通过在现有 RDDs 的转换而创建(比如:map、filter、reduce、join 等等)。

  RDD 抽象化是经由一个以 Scala、Java 和 Python 的语言集成 API 所呈现,简化了编程复杂性,应用程序操纵 RDDs 的方法类似于操纵本地端的数据集合。

Spark SQL

  Spark SQL 在 Spark 核心上带出一种名为 SchemaRDD 的数据抽象化概念,提供结构化和半结构化数据相关的支持。Spark SQL 提供了领域特定语言,可使用 Scala、Java 或 Python 来操纵 SchemaRDDs。它还支持使用使用命令行界面和 ODBC/JDBC 服务器操作SQL语言。在 Spark 1.3 版本,SchemaRDD 被重命名为 DataFrame。

Spark Streaming

  Spark Streaming 充分利用 Spark 核心的快速调度能力来运行流分析。它截取小批量的数据并对之运行 RDD 转换。这种设计使流分析可在同一个引擎内使用同一组为批量分析编写而撰写的应用程序代码。

MLlib

  MLlib 是 Spark 上分布式机器学习框架。Spark 分布式存储器式的架构比 Hadoop 磁盘式的 Apache Mahout 快上10倍,扩展性甚至比 Vowpal Wabbit 要好。 MLlib 可使用许多常见的机器学习和统计算法,简化大规模机器学习时间,其中包括:

  • 汇总统计、相关性、分层抽样、假设检定、随机数据生成
  • 分类与回归:支持向量机、回归、线性回归、逻辑回归、决策树、朴素贝叶斯
  • 协同过滤:ALS
  • 分群:k - 平均算法
  • 维度约减:奇异值分解(SVD),主成分分析(PCA)
  • 特征提取和转换:TF-IDF、Word2Vec、StandardScaler
  • 最优化:随机梯度下降法(SGD)、L-BFGS

GraphX

  GraphX 是 Spark 上的分布式图形处理框架。它提供了一组 API,可用于表达图表计算并可以模拟 Pregel 抽象化。GraphX 还对这种抽象化提供了优化运行。

  GraphX 最初为加州大学柏克莱分校 AMPLab 和 Databricks 的研究项目,后来捐赠给 Spark 项目。
并行框架学习1:Pyspark介绍及安装(基于Python)

Spark安装

  由于目前有现成的写 Spark 平台可以使用,所以暂时没有尝试 Spark 的安装,这里有个帖子可以用来参考:https://www.cnblogs.com/qingyunzong/p/8888080.html.

参考资料


  1. https://zh.wikipedia.org/wiki/Apache_Spark ↩︎