pythonspark集群模式运行_Spark之运行模式

一、local

(一)spark-submit

在之前的WordCount实例中使用了spark-submit命令提交运行脚本:

[root@hadoop-master bin]#./spark-submit --master local[2] --name wordcount /root/hadoopdata/WordCount.py file:root/hadoopdata/wordcount.txt

spark-submit和pyspark命令是一样的:

./bin/spark-submit \--class \--master \--deploy-mode \--conf =\

...#other options

\

[application-arguments]

--class:应用程序的入口

--master:集群master的url(e.g. spark://23.195.26.187:7077)

--deploy-mode:部署模式,是将你的driver部署在集群的节点上,还是将本地作为一个外部的客户端

--conf::spark的配置,通过key-value的形式输入参数

application-jar::程序依赖的jar包

application-arguments: 传递参数到main class中

我们主要用spark跑python的应用程序:

For Python applications, simply pass a .py file in the place of instead of a JAR, and add Python .zip, .egg or .py files to the search path with --py-files.

如果是python的应用,就不需要通过的方式,可以通过增加py file的方式。

(二)local

在上面提交py脚本到spark环境中,通过了--master,其后的参数是local[2],这就是local模式。

Master URL

Meaning

local

Run Spark locally with one worker thread (i.e. no parallelism at all).

local[K]

Run Spark locally with K worker threads (ideally, set this to the number of cores on your machine).

local[*]

Run Spark locally with as many worker threads as logical cores on your machine.

local模式是单机的模式。

二、Standalone

(一)安装Standalone模式

1、启动集群

(1)启动master

./sbin/start-master.sh

(2)启动slave

./sbin/start-slave.sh

启动完成后,spark中就有两个进程一个是master,一个是worker。这是主从关系。

(3)启动参数

(4)搭建集群

slaves

local模式中不需要修改spark中的任何东西,但是在Standalone模式中需要修改spark中的conf,即进入/root/app/spark-2.0.2-bin-hadoop2.6/conf:

[root@hadoop-master conf]#cp slaves.template slaves

vim slaves

#A Spark Worker will be started on each of the machines listed below.#localhost

hadoop-master #修改为机器的地址localhost也是可行的

注意的是如果是多台机器的话,此时这个文件中应该加入多台机器的地址:

#A Spark Worker will be started on each of the machines listed below.#localhost

hadoop-master #修改为机器的地址localhost也是可行的

hadoop-slave1

hadoop-slave2

hadoop-slave3

View Code

然后在每台机器的相同路径下部署spark即可。

spark-env.sh

进入/root/app/spark-2.0.2-bin-hadoop2.6/conf:

[root@hadoop-master conf]#cp spark-env.sh.template spark-env.sh

vim spark-env.sh

#See the License for the specific language governing permissions and#limitations under the License.#JAVA_HOME=/root/app/jdk1.8.0_74 #设置JAVA_HOME,可通过echo $JAVA_HOME查看路径

#This file is sourced when running various Spark programs.#Copy it as spark-env.sh and edit that to configure Spark for your site.

启动

进入到spark中的sbin目录,即:/root/app/spark-2.0.2-bin-hadoop2.6/sbin

[root@hadoop-master sbin]#./start-all.sh

查看进程:

[root@hadoop-master sbin]#jps

85569Master86161Jps85788 Worker

如果有Master和Worker进程说明启动成功了。

另外一点就是master日志中的描述:

...

20/04/11 13:22:39 INFO Utils: Successfully started service 'sparkMaster' on port 7077.

20/04/11 13:22:39 INFO Master: Starting Spark master at spark://hadoop-master:7077

20/04/11 13:22:39 INFO Master: Running Spark version 2.0.2

20/04/11 13:22:40 INFO Utils: Successfully started service 'MasterUI' on port 8080.

20/04/11 13:22:40 INFO MasterWebUI: Bound MasterWebUI to 0.0.0.0, and started at http://192.168.0.110:8080

...

7077端口时spark集群的url端口,用于提交作业使用,另外一个8080是管理spark的web界面的url端口:

(二)提交作业

1、pyspark shell

此时Standalone模式的集群搭建完毕了,那么应该怎么提交你的作业呢?进入到:/root/app/spark-2.0.2-bin-hadoop2.6/bin

[root@hadoop-master bin]#./pyspark --master spark://hadoop-master:7077

注意:此时--master参数就不是local了,而是启动的master地址:spark://hadoop-master:7077

此时你刷新一下页面就会出现运行的application。

此时就可以在pyspark shell上进行工作了,比如:

Using Python version 3.5.2 (default, Mar 30 2020 22:25:54)

SparkSession available as'spark'.>>> data = [1,2,3]>>>sc.parallelize(data).collect()

[1, 2, 3]>>>

对应的在这个页面中也会有对应的变化。

2、spark-submit

上面是在shell上写的代码进行测试,但是如果通过spark-submit提交文件进行测试,应该怎么做呢?值得注意的是,如果你的Standalone模式不止一个节点,那么你就需要在每一个节点上都需要有测试文件,因为此时是分布式的运行。那么我们可以把文件放到hdfs上,然后从hdfs上读取文件。

(1)准备文件

[root@hadoop-master sbin]#hadoop fs -put ~/hadoopdata/wordcount.txt /[root@hadoop-master sbin]#hadoop fs -ls /

Found 1items-rw-r--r-- 1 root supergroup 33 2020-04-11 15:28 /wordcount.txt

(2)进行测试

[root@hadoop-master bin]#./spark-submit --master spark://hadoop-master:7077 --name wordcount /root/hadoopdata/WordCount.py

hdfs://hadoop-master:8020/wordcount.txt

注意:py文件还是在本地,wordcount.txt是在hdfs上;--master连接的是Standalone模式下的集群。

上面执行如果出现类似这种错误:Exception: Randomness of hash of string should be disabled via PYTHONHASHSEED,请在命令中加入--conf参数:

[root@hadoop-master bin]#./spark-submit --master spark://hadoop-master:7077 --conf spark.executorEnv.PYTHONHASHSEED=321 --name wordcount

/root/hadoopdata/WordCount.py hdfs://hadoop-master:8020/wordcount.txt

三、yarn

yarn的运行模式与Standalone模式有什么区别呢?在这个运行模式下,spark只是作为一个客户端,它需要做的事情就是将作业提交到yarn上进行运行即可。

Standalone模式下,你的spark集群下每一个节点上都需要部署spark,然后需要启动spark集群(即启动master与slaves)

yarn模式下,你只需要一个节点,然后提交作业即可,这个是不需要spark集群的(不需要启动master与slaves)

(一)启动准备

在yarn上启动spark前需要弄清一些概念和进行一些配置。

1、HADOOP_CONF_DIR or YARN_CONF_DIR

确定HADOOP_CONF_DIR or YARN_CONF_DIR这两个参数其中之一指定的是hadoop集群配置文件的目录,这样读取到的配置文件,保证一致性,进入到/root/app/spark-2.0.2-bin-hadoop2.6/conf下:

vim spark-env.sh

#limitations under the License.#HADOOP_CONF_DIR=/root/app/hadoop-2.6.1/etc/hadoop #配置该参数

JAVA_HOME=/root/app/jdk1.8.0_74#This file is sourced when running various Spark programs.

2、--deploy-mode

另外还有一个重要的参数是--deploy-mode,yarn支持client和cluster模式,spark driver运行在什么地方就是什么模式,如果运行在本地local就是client模式。如果运行在cluster里就是cluster模式,对于交互式shell只能运行client模式,不能运行cluster模式。那么这两种模式有什么区别呢?

client 提交作业的进程不能停止,否则作业就会提交失败

cluster 提交完作业就可以断开,因为driver运行在am里面

(二)进行测试

首先应该确保你的hadoop和yarn是运行状态:

[root@hadoop-master bin]#jps

118305 ExecutorLauncher

110707 NodeManager

114277 SparkSubmit

107908 DataNode

110260 ResourceManager4727Master4890Worker107389 NameNode

108750 SecondaryNameNode118334 Jps

1、spark sehll

spark shell是只能使用client模式的:

[root@hadoop-master bin]#./pyspark --master yarn

然后可以输入命令进行操作。此时就去hadoop的web界面进行查看任务的执行情况:

2、spark-submit

对于提交文件进行操作,与上面的模式基本相同,只是需要修改--master参数即可:

[root@hadoop-master bin]#./spark-submit --master yarn --conf spark.executorEnv.PYTHONHASHSEED=321 --name wordcount

/root/hadoopdata/WordCount.py hdfs://hadoop-master:8020/wordcount.txt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值