《SPARK官方教程系列》(标贝科技)

1-概述

Apache Spark是一个用于大规模数据处理的统一分析引擎,它在Java、Scala、Python和R中的提供了高级api,以及一个支持通用执行图[general execution graphs]的优化引擎。它还支持一组丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL、用于机器学习的MLlib、用于图形处理的GraphX以及用于增量计算和流处理的结构化流。

在Spark 2.0之前,Spark的主要编程接口是弹性分布式数据集(RDD)。在Spark 2.0之后,RDDs被Dataset/DateFrame取代,它是像RDD一样的强类型,但在内部进行了更丰富的优化。RDD接口仍然受到支持,您可以在RDD编程指南中获得更详细的参考资料。但是,强烈建议您切换到使用Dataset/DataFrame,它比RDD具有更好的性能。有关Dataset/DataFrame的更多信息,请参阅SQL编程指南。

默认情况下,Spark中的安全性是关闭的。这可能意味着您在默认情况下容易受到攻击。运行Spark前请参阅Spark安全。

组件【Components】

Spark应用【applications】在集群中作为独立的一组进程集运行,由主程序中的SparkContext对象进行协调,主程序被称为driver program,即驱动程序。

Spark应用是在集群中运行的,SparkContext可以连接几种类型的集群管理器【cluster managers】,比如spark自己的集群管理器standalone,Mesos,YARN,K8S等。集群管理器可以跨应用程序分配资源。一旦连接上集群管理器后,Spark在集群的节点上获得执行器【executors】,执行器是运行计算和存储数据的进程。下一步,Spark发送你的应用代码(在jar包或python文件中定义的,传递给SparkContext),最后SparkContext把任务【tasks】发送到执行器中运行。

https://note.youdao.com/yws/public/resource/5ddd2f7db7e5be5ff8039c53401888ab/xmlnote/WEBRESOURCE5cc95575bb9e9184422e6ce1eb9d1bd1/3963

关于这个架构有几点需要注意:
每个应用程序都有自己的执行器进程。执行器在整个应用程序期间保持运行,并在多个线程中运行tasks。这样做的好处是可以将应用程序彼此隔离,不管是在调度方面(每个driver调度它自己的tasks)还是执行器方面(不同应用的tasks运行在不同的JVM)。这也意味着如果不将数据写入外部存储系统,就不能在不同的Spark应用(SparkContext实例)中共享数据。
Spark与底层集群管理器无关,只要集群管理器能够获得executor,且executor进程之间相互通信,即使在支持其他应用程序(如Mesos/YARN)的集群管理器上运行也是相对容易的。
驱动程序必须在其整个生命周期中侦听并接受来自执行器的连接(参考spark.driver.port in the network config section)。因此驱动程序必须能被工作结点【worker nodes】访问到。
因为驱动程序在集群上调度任务,它应该在靠近工作节点的地方运行,最好在同一局域网络上。如果想远程发送请求到集群,最好是打开一个RPC,让驱动程序从附近提交操作,而不是在离工作节点很远的地方运行驱动程序。

集群管理器类型

Spark目前支持下面几个集群管理器:
Standalone - spark自带的一个简单的集群管理器,可以很容易的部署。
Apache Mesos - 一个通用的集群管理器,此管理器也可以运行Hadoop MapReduce和服务应用。
Hadoop YARN - Hadoop2的资源管理器
Kubernetes - 用于自动化部署、扩展和管理容器化应用程序的开源系统

提交应用程序【Submitting Applications】

使用spark-submit脚本可以把应用提交到集群,详情参考应用提交指南。

监控

每个驱动程序【driver program】都有一个Web UI,默认使用4040端口,界面会展示一些信息包括正在运行的tasks,executors,storage usage。在浏览器打开 http://:4040访问此监控界面,详情参考监控指南。

Job Scheduling

Spark提供了跨应用程序(在集群管理器级别)和应用程序内部(同一个SparkContext上发生多个计算)的资源分配的控制。详情参考Job调度指南。

术语

下表总结了集群概念的术语:

Term Meaning
Application 在spark上构建的应用程序,包含driver program和在集群上的executors。
Application jar 包含用户的Spark应用程序的jar, 在某些情况下,用户希望创建一个“uber jar”,其中包含他们的应用程序及其依赖项。用户的jar不应该包含Hadoop或Spark库,这些库将在运行时自动添加。
Driver program 驱动程序:运行main函数和创建SparkContext的程序。
Cluster manager 集群管理器:获取集群上资源的外部服务 (e.g. standalone manager, Mesos, YARN)
Deploy mode 部署模式:区分驱动程序运行的位置. “cluster” 模式在集群内部启动驱动程序,"client"模式,在集群外部启动驱动程序。
Worker node 工作节点:集群中可以运行应用的节点。
Executor 执行器:在工作节点上为应用程序启动的进程,用于运行tasks并跨task在内存或磁盘存储中保存数据,每个应用都有自己的执行器。
Task 任务:发送到执行器上的工作单元
Job 由多个任务组成的并行计算,这些Job在响应Spark action时产生,比如save或collect等。
Stage 每个作业被分成更小的任务集,称为阶段,Stage相互依赖(类似于MapRerduce中的Map和Reduce)

2-RDD编程指南

概述

从高层次上讲,每个Spark应用程序都由一个驱动程序【driver progarm】和若干执行器【executors】组成,驱动程序运行用户的main方法,执行器集群上并行执行各种操作。

Spark提供的主要抽象是弹性分布式数据集resilient distributed dataset。它是跨集群节点划分的元素集合,可以并行操作。RDDs通过从Hadoop文件系统(或任何其他Hadoop支持的文件系统)中的文件创建,或者通过驱动程序中的现有集合创建,并可以对其进行转换。用户还可以要求Spark将RDD持久化到内存中,从而允许在并行操作中有效地重用它。RDDs还会自动从节点故障中恢复。

Spark中的第二个抽象是可在并行操作中使用的共享变量。默认情况下,当Spark在不同节点上作为一组任务[tasks]并行运行一个函数时,它会将函数中使用的每个变量的副本发送给每个任务。有时候,一个变量需要在任务[tasks]之间共享,或者在任务[tasks]和驱动程序[driver program]之间共享。Spark支持两种类型的共享变量:
广播变量【broadcast variables】,可以在所有节点上的内存中缓存一个值。
累加器【accumulators】,变量只会被累加,比如计数器和汇总求和等。

连接到spark

Spark 3.0.0适用于Python 2.7+或Python 3.4+。它可以使用标准的CPython解释器,所以可以使用像NumPy这样的C库。它也适用于pypy2.3 +。
注意,从Spark 3.0.0开始不再支持Python 2。
Python中的Spark应用程序可以通过bin/ Spark -submit脚本运行,该脚本在运行时包含Spark,也可以把它包含在setup.py中:

install_requires=[
        'pyspark=={site.SPARK_VERSION}'
    ]

在没有使用pip安装pySpark的情况下,要在python中运行Spark应用,使用位于Spark目录中的bin/ Spark -submit脚本。这个脚本将加载Spark的Java/Scala库,并允许您向集群提交应用程序。还可以使用bin/pyspark启动交互式Python shell。

如果希望访问HDFS数据,则需要使用连接到你的HDFS版本的PySpark。对于常用的HDFS版本,Spark主页上也有预先构建的包。
最后,需要将一些Spark类导入到程序中。添加以下行

from pyspark import SparkContext, SparkConf

PySpark在driver和worker中都需要使用相同的Python版本。它默认使用PATH中python版本,你可以通过PYSPARK_PYTHON指定你想使用的python版本,例如:

$ PYSPARK_PYTHON=python3.4 bin/pyspark
$ PYSPARK_PYTHON=/opt/pypy-2.5/bin/pypy bin/spark-submit examples/src/main/python/pi.py

初始化spark

Spark程序必须做的第一件事是创建SparkContext对象,该对象告诉Spark如何访问集群。要创建SparkContext,首先需要构

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值