original:http://ift.tt/1OfjECg Spark编程指南 译者说在前面:最近在学习Spark相关的知识,在网上没有找到比较详细的中文教程,只找到了官网的教程。出于自己学习同时也造福其他初学者的目的,把这篇指南翻译成了中文,笔者水平有限,文章中难免有许多谬误,请高手不吝赐教。 本文翻译自Spark Programming Guide,由于笔者比较喜欢Python,在日常中使用也比较多,所以只翻译了Python部分,不过Java和Scala大同小异。 概述 从高层次上来看,每一个Spark应用都包含一个驱动程序,用于执行用户的main函数以及在集群上运行各种并行操作。Spark提供的主要抽象是弹性分布式数据集(RDD),这是一个包含诸多元素、被划分到不同节点上进行并行处理的数据集合。RDD通过打开HDFS(或其他hadoop支持的文件系统)上的一个文件、在驱动程序中打开一个已有的Scala集合或由其他RDD转换操作得到。用户可以要求Spark将RDD持久化到内存中,这样就可以有效地在并行操作中复用。另外,在节点发生错误时RDD可以自动恢复。 Spark提供的另一个抽象是可以在并行操作中使用的共享变量。在默认情况下,当Spark将一个函数转化成许多任务在不同的节点上运行的时候,对于所有在函数中使用的变量,每一个任务都会得到一个副本。有时,某一个变量需要在任务之间或任务与驱动程序之间共享。Spark支持两种共享变量:广播变量,用来将一个值缓存到所有节点的内存中;累加器,只能用于累加,比如计数器和求和。 这篇指南将展示这些特性在Spark支持的语言中是如何使用的(本文只翻译了Python部分)。如果你打开了Spark的交互命令行 — — bin/spark-shell的Scala命令行或bin/pyspark的Python命令行都可以 — — 那么这篇文章你学习起来将是很容易的。 连接Spark Spark1.3.0只支持Python2.6或更高的版本(但不支持Python3)。它使用了标准的CPython解释器,所以诸如NumPy一类的C库也是可以使用的。 通过Spark目录下的bin/spark-submit脚本你可以在Python中运行Spark应用。这个脚本会载入Spark的Java/Scala库然后让你将应用提交到集群中。你可以执行bin/pyspark来打开Python的交互命令行。 如果你希望访问HDFS上的数据,你需要为你使用的HDFS版本建立一个PySpark连接。常见的HDFS版本标签都已经列在了这个第三方发行版页面。 最后,你需要将一些Spark的类import到你的程序中。加入如下这行: 1 from pyspark import SparkContext, SparkConf 初始化Spark 在一个Spark程序中要做的第一件事就是创建一个SparkContext对象来告诉Spark如何连接一个集群。为了创建SparkContext,你首先需要创建一个SparkConf对象,这个对象会包含你的应用的一些相关信息。 1 2 conf = SparkConf().setAppName(appName).setMaster(master) sc = SparkContext(conf=conf) appName参数是在集群UI上显示的你的应用的名称。master是一个Spark、Mesos或YARN集群的URL,如果你在本地运行那么这个参数应该是特殊的”local”字符串。在实际使用中,当你在集群中运行你的程序,你一般不会把master参数写死在代码中,而是通过用spark-submit运行程序来获得这个参数。但是,在本地测试以及单元测试时,你仍需要自行传入”local”来运行Spark程序。 使用命令行 在PySpark命令行中,一个特殊的集成在解释器里的SparkContext变量已经建立好了,变量名叫做sc。创建你自己的SparkContext不会起作用。你可以通过使用 — master命令行参数来设置这个上下文连接的master主机,你也可以通过 — py-files参数传递一个用逗号隔开的列表来将Python的.zip、.egg或.py文件添加到运行时路径中。你还可以通过 — package参数传递一个用逗号隔开的maven列表来给这个命令行会话添加依赖(比如Spark的包)。任何额外的包含依赖包的仓库(比如SonaType)都可以通过传给 — repositorys参数来添加进去。Spark包的所有Python依赖(列在这个包的requirements.txt文件中)在必要时都必须通过pip手动安装。 比如,使用四核来运行bin/pyspark应当输入这个命令: 1 $ ./bin/pyspark –master local[4] 又比如,把code.py文件添加到搜索路径中(为了能够import在程序中),应当使用这条命令: 1 $ ./bin/pyspark –master local[4] –py-files code.py 想要了解命令行选项的完整信息请执行pyspark — help命令。在这些场景下,pyspark会触发一个更通用的spark-submit脚本 在IPython这个加强的Python解释器中运行PySpark也是可行的。PySpark可以在1.0.0或更高版本的IPython上运行。为了使用IPython,必须在运行bin/pyspark时将PYSPARK_DRIVER_PYTHON变量设置为ipython,就像这样: 1 $ PYSPARK_DRIVER_PYTHON=ipython ./bin/pyspark […]
via WordPress http://ift.tt/1OfjCtU