pythonspark集群模式运行_spark在集群上运行

1.spark在集群上运行应用的详细过程

(1)用户通过spark-submit脚本提交应用

(2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法

(3)驱动器程序与集群管理器通信,申请资源以启动执行器节点

(4)集群管理器为驱动器程序启动执行器节点

(5)驱动器进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程

(6)任务在执行器程序中进行计算并保存结果

(7)如果驱动器程序的main()方法退出,或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源

2.集群上运行的app和本地运行的区别

集群上运行的app,还没有指定master,而本地运行的app,指定了运行的主机master是“local”,即本地主机。以下是spark WordCount的程序实例,我们没有指定master,需要提交到集群上运行。

importscala.Tuple2;importorg.apache.spark.SparkConf;importorg.apache.spark.api.java.JavaPairRDD;importorg.apache.spark.api.java.JavaRDD;importorg.apache.spark.api.java.JavaSparkContext;importorg.apache.spark.api.java.function.FlatMapFunction;importorg.apache.spark.api.java.function.Function2;importorg.apache.spark.api.java.function.PairFunction;importjava.util.Arrays;importjava.util.List;importjava.util.regex.Pattern;public final classWordCount {private static final Pattern SPACE = Pattern.compile(" ");public static void main(String[] args) throwsException {

SparkConf sparkConf= new SparkConf().setAppName("JavaWordCount");//关键是没有指定master,需要提交到集群上运行

JavaSparkContext ctx = newJavaSparkContext(sparkConf);

JavaRDD lines = ctx.textFile("C:\\test.txt", 1);

JavaRDD words = lines.flatMap(new FlatMapFunction() {public Iterablecall(String s) {returnArrays.asList(SPACE.split(s));

}

});

JavaPairRDD ones = words.mapToPair(new PairFunction() {public Tuple2call(String s) {return new Tuple2(s, 1);

}

});

JavaPairRDD counts = ones.reduceByKey(new Function2() {publicInteger call(Integer i1, Integer i2) {return i1 +i2;

}

});

List> output =counts.collect();for (Tuple2,?>tuple : output) {

System.out.println(tuple._1()+ ": " +tuple._2());

}

ctx.stop();

}

}

3.使用spark-submit部署应用

(1)spark-submit的一般形式

bin/spark-submit [options] [app options]

 表示包含应用入口的JAR包或者Python脚本

[app options]  是传给你的应用的选项

spark-submit的一些常见标记

标记

描述

--master

表示要连接的集群管理器

--deploy-mode

选择在本地启动驱动器程序,还是在集群中的一台工作节点机器上启动。在客户端模式下,spark-submit会将驱动器程序运行在spark-submit被调用的这台机器上。在集群模式下,驱动器程序会被传输并被执行于集群的一个工作节点上,默认是本地模式。

--class

运行Java或者Scala程序应用的主类

--name

应用的显示名,会显示在spark的网页用户界面中

--jars

需要上传并放在应用的CLASSPATH中的JAR包的雷彪。如果应用依赖于少量第三方的jar包,可以把它们放在这个参数中

--files

需要放在应用工作目录中的文件雷彪。这个参数一般用来放需要分发到各节点的数据文件

--py-files

需添加到PYTHONPATH中的文件的雷彪。其中可以包含.py /.egg以及.zip文件

--executor-memory

执行器进程使用的内存量,以字节为单位,可以使用后缀指定更大的单位,比如512M或者15g

--driver-memory

驱动器进程使用的内存量,以字节为单位。可以使用后缀指定更大的单位,比如512m或者15g

使用各种选项调用spark-submit

./bin/spark-submit

--master spark:// hostname:7077

--deploy-mode cluster

--class com.databricks.examples.SparkExample

--name "Example program"

--jars dep1.jar,dep2.jar,dep3.jar

--total-executor-core 300

--executor-memory 10g

4.选择合适的集群管理器

(1)如果是从零开始,可以先选择独立集群管理器。独立模式安装起来最简单,而且如果你只是使用spark的话,独立集群管理器提供与其他集群管理器完全一样的全部功能。

(2)如果你要在使用spark的同时使用其他应用,或者是要用到更丰富的资源调度功能(例如队列),那么YARN和Mesos都能满足你的需求。而在这两者中,对于大多数的hadoop发行版来说,一般YARN已经预装好了。

(3)Mesos相对于YARN和独立模式的一大优点在于其细粒度共享的选项,该选项可以将类似Spark shell这样的交互式应用中的不同命令分配到不同的CPU上。因此这对于多用户同时运行交互式shell的用例更有用处。

(4)在任何时候,最好把Spark运行在运行HDFS的节点还是那个,这样能快速访问存储。你可以自行在同样的节点上安装Mesos或独立集群管理器。如果使用YARN的话,大多数发行版已经把YARN和HDFS安装在了一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值