Python文件提交spark
首先记录一下spark的四种运行模式:
local: 本地单进程模式,用于本地开发测试Spark代码
standalone: 分布式集群模式,Master-Worker架构,Master负责调度,Worker负责具 体Task的执行
on yarn/mesos: 运行在yarn/mesos等资源管理框架之上,yarn/mesos提供资源管理,spark 提供计算调度,并可与其他计算框架(如MapReduce/MPI/Storm)共同运行 在同一个集群之上 (使用cloudera搭建的集群就是这种情况)
local: 本地单进程模式,用于本地开发测试Spark代码
standalone: 分布式集群模式,Master-Worker架构,Master负责调度,Worker负责具 体Task的执行
on yarn/mesos: 运行在yarn/mesos等资源管理框架之上,yarn/mesos提供资源管理,spark 提供计算调度,并可与其他计算框架(如MapReduce/MPI/Storm)共同运行 在同一个集群之上 (使用cloudera搭建的集群就是这种情况)
on cloud(EC2): 运行在AWS的EC2之上。
下面用python的一个简单作业SimpleApp.py为例,记录下脚本的运行过程
SimpleApp.py内容:
from pyspark import SparkContext,SparkConf
conf=SparkConf()
conf.setMaster("spark://192.168.80.139:7077")
conf.setAppName("test application")
logFile="hdfs://hadoop01:8020/testfile"
sc=SparkContext(conf=conf)
logData=sc.textFile(logFile).cache()
numAs=logData.filter(lambda s: 'a' in s).count()
numBs=logData.filter(lambda s: 'b' in s).count()
print "Lines with a:%i,lines with b:%i" % (numAs,numBs)
关于这里的问题主要涉及到连接集群的配置问题,也就是上述代码的conf部分,首先要连接集群的master节点,注意这里的配置写法
spark://192.168.2.241:7077
前缀spark不可少,否则会报“could not parse master URL”的错误即无法解析URL的错误,至于端口号7077是默认,可以在/etc/spark/conf中查询$SPARK_MASTER_PORT这个环境变量,(具体安装方式配置文件位置也不同,根据具体情况来确定)
logFile=”hdfs://hadoop241:8020/testfile” 8020也是默认的
testfile内容:
a
ab
abc
把文件传到hdfs根目录
hadoop fs -put /testfile /
之后在spark的bin目录下执行
./spark-submit /test_pyspark.py
回到spark网址 http://192.168.80.139:8080/ 观察进程