开发手册 欢迎您!
软件开发者资料库

Apache Spark - 部署

Apache Spark部署 - 从简介,RDD,安装,核心编程,部署,高级Spark编程开始,简单易学地学习Apache Spark。

Spark应用程序,使用spark-submit,是一个shell命令,用于在集群上部署Spark应用程序.它通过统一接口使用所有相应的集群管理器.因此,您不必为每个应用程序配置应用程序.

示例

让我们采用相同的字数计算示例,我们之前使用过,使用shell命令.在这里,我们考虑与spark应用程序相同的示例.

示例输入

以下文本是输入数据,名为

people are not as beautiful as they look, as they walk or as they talk. they are only as beautiful  as they love, as they care as they share.

查看以下程序 :

SparkWordCount.scala

import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark._  object SparkWordCount {    def main(args: Array[String]) {       val sc = new SparkContext( "local", "Word Count", "/usr/local/spark", Nil, Map(), Map())       /* local = master URL; Word Count = application name; */        /* /usr/local/spark = Spark Home; Nil = jars; Map = environment */       /* Map = variables to work nodes */       /*creating an inputRDD to read text file (in.txt) through Spark context*/       val input = sc.textFile("in.txt")       /* Transform the inputRDD into countRDD */       val count = input.flatMap(line ⇒ line.split(" "))       .map(word ⇒ (word, 1))       .reduceByKey(_ + _)              /* saveAsTextFile method is an action that effects on the RDD */        count.saveAsTextFile("outfile")       System.out.println("OK");    } }

将上述程序保存到名为 SparkWordCount.scala 的文件中并将其放入用户定义的名为 spark-application 的目录.

注意 : 在将inputRDD转换为countRDD时,我们使用flatMap()将行(从文本文件)标记为单词,使用map()方法计算单词频率,使用reduceByKey()方法计算每个单词重复.

使用以下步骤提交此应用程序.通过终端执行 spark-application 目录中的所有步骤.

步骤1:下载Spark Ja

Spark核心编译时需要jar,因此,请从以下链接下载spark-core_2.10-1.3.0.jar  Spark核心jar 并将jar文件从下载目录移动到 spark-application 目录.

步骤2:编译程序

使用下面给出的命令编译上述程序.该命令应该从spark-application目录执行.在这里,/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar 是一个来自Spark库的Hadoop支持jar.

$ scalac -classpath "spark-core_2.10-1.3.0.jar:/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar" SparkPi.scala

步骤3:创建JAR

使用以下命令创建spark应用程序的jar文件以下命令.这里, wordcount 是jar文件的文件名.

jar -cvf wordcount.jar SparkWordCount*.class spark-core_2.10-1.3.0.jar/usr/local/spark/lib/spark-assembly-1.4.0-hadoop2.6.0.jar

第4步:提交火花应用程序

使用以下命令提交spark应用程序 :

spark-submit --class SparkWordCount --master local wordcount.jar

如果成功执行,则会找到下面给出的输出.出现以下输出的确定用于用户识别,这是程序的最后一行.如果你仔细阅读以下输出,你会发现不同的东西,例如 :

  • 在端口42954上成功启动服务'sparkDriver'

  • MemoryStore以容量267.3 MB开始

  • 在http://192.168.1.217:4040启动SparkUI

  • 添加了JAR文件:/home/hadoop/piapplication/count.jar

  • ResultStage 1(SparkPi.scala中的saveAsTextFile:11)以0.566秒结束

  • 停止Spark Web UI在http://192.168.1.217:4040

  • MemoryStore已清除

15/07/08 13:56:04 INFO Slf4jLogger: Slf4jLogger started 15/07/08 13:56:04 INFO Utils: Successfully started service 'sparkDriver' on port 42954. 15/07/08 13:56:04 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.217:42954] 15/07/08 13:56:04 INFO MemoryStore: MemoryStore started with capacity 267.3 MB 15/07/08 13:56:05 INFO HttpServer: Starting HTTP Server 15/07/08 13:56:05 INFO Utils: Successfully started service 'HTTP file server' on port 56707. 15/07/08 13:56:06 INFO SparkUI: Started SparkUI at http://192.168.1.217:4040 15/07/08 13:56:07 INFO SparkContext: Added JAR file:/home/hadoop/piapplication/count.jar at http://192.168.1.217:56707/jars/count.jar with timestamp 1436343967029 15/07/08 13:56:11 INFO Executor: Adding file:/tmp/spark-45a07b83-42ed-42b3b2c2-823d8d99c5af/userFiles-df4f4c20-a368-4cdd-a2a7-39ed45eb30cf/count.jar to class loader 15/07/08 13:56:11 INFO HadoopRDD: Input split: file:/home/hadoop/piapplication/in.txt:0+54 15/07/08 13:56:12 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 2001 bytes result sent to driver  (MapPartitionsRDD[5] at saveAsTextFile at SparkPi.scala:11), which is now runnable 15/07/08 13:56:12 INFO DAGScheduler: Submitting 1 missing tasks from ResultStage 1 (MapPartitionsRDD[5] at saveAsTextFile at SparkPi.scala:11) 15/07/08 13:56:13 INFO DAGScheduler: ResultStage 1 (saveAsTextFile at SparkPi.scala:11) finished in 0.566 s 15/07/08 13:56:13 INFO DAGScheduler: Job 0 finished: saveAsTextFile at SparkPi.scala:11, took 2.892996 sOK 15/07/08 13:56:13 INFO SparkContext: Invoking stop() from shutdown hook 15/07/08 13:56:13 INFO SparkUI: Stopped Spark web UI at http://192.168.1.217:4040 15/07/08 13:56:13 INFO DAGScheduler: Stopping DAGScheduler 15/07/08 13:56:14 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped! 15/07/08 13:56:14 INFO Utils: path = /tmp/spark-45a07b83-42ed-42b3-b2c2823d8d99c5af/blockmgr-ccdda9e3-24f6-491b-b509-3d15a9e05818, already present as root for deletion. 15/07/08 13:56:14 INFO MemoryStore: MemoryStore cleared 15/07/08 13:56:14 INFO BlockManager: BlockManager stopped 15/07/08 13:56:14 INFO BlockManagerMaster: BlockManagerMaster stopped 15/07/08 13:56:14 INFO SparkContext: Successfully stopped SparkContext 15/07/08 13:56:14 INFO Utils: Shutdown hook called 15/07/08 13:56:14 INFO Utils: Deleting directory /tmp/spark-45a07b83-42ed-42b3b2c2-823d8d99c5af 15/07/08 13:56:14 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!

步骤5:检查输出

成功执行程序后,您将找到名为的目录spark-application目录中的outfile .

以下命令用于打开和检查outfile目录中的文件列表.

$ cd outfile $ ls Part-00000 part-00001 _SUCCESS

检查 part-00000 文件中输出的命令是 :

$ cat part-00000 (people,1) (are,2) (not,1) (as,8) (beautiful,2) (they, 7) (look,1)

检查part-00001文件中输出的命令是 :

$ cat part-00001 (walk, 1) (or, 1) (talk, 1) (only, 1) (love, 1) (care, 1) (share, 1)

通过以下部分了解更多关于'spark-submit'命令.

Spark-submit语法

spark-submit [options]  [app arguments]

选项

S.No选项描述
1-  masterspark://host:port,mesos://host:port,yarn或local.
2- deploy-mode是在本地启动驱动程序("客户端")还是在集群内的一台工作机器上启动("集群")(默认值:客户端).
3- class您的应用程序的主类(适用于Java/Scala应用程序).
4- -name您的申请名称.
5-  jars包含在内的以逗号分隔的本地罐子列表驱动程序和执行程序类路径.
6-  packages包含在驱动程序和执行程序类路径上的jar的maven坐标的逗号分隔列表.
7- repositories用逗号分隔的其他远程存储库列表,用于搜索用--packages给出的maven坐标.
8-  py-files逗号分隔的.zip,.egg或.py文件列表,放在Python应用程序的PYTHON PATH上.
9-  files要放在每个执行程序的工作目录中的以逗号分隔的文件列表.
10-  conf(prop = val)任意Spark配置属性.
11- properties - file从中加载额外属性的文件的路径.如果没有指定,这将查找conf/spark-defaults.
12-  driver-memory驱动程序内存(例如1000M,2G)(默认值:512M).
13-  driver-java-options传递给驱动程序的额外Java选项.
14-  driver-library-path要传递给驱动程序的额外库路径条目.
15-  driver-class-path

要传递给驱动程序的额外类路径条目.

请注意,jars添加了 - -jars自动包含在类路径中.

16-  executor-memory每个执行程序的内存(例如1000M,2G)(默认值:1G).
17-  proxy-user提交申请时模拟的用户.
18-  help,-h显示此帮助信息并退出.
19- verbose,-v打印其他调试输出.
20- version打印当前Spark版本.
21- driver-cores NUM司机核心(默认值:1).
22- supervise如果给定,则在失败时重新启动驱动程序.
23-  kill如果给定,则杀死指定的驱动程序.
24- status如果给定,请求指定的驱动程序的状态.
25-  total-executor-cores所有执行人的核心总数.
26- -executor-cores每个执行程序的核心数. (默认值:YARN模式下为1,或独立模式下工作线程上的所有可用内核).