spark-submit
进入$SPARK_HOME目录,输入bin/spark-submit --help可以得到该命令的使用帮助。
spark-submit 提交参数
--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.
--deploy-mode DEPLOY_MODE driver运行之处,client运行在本机,cluster运行在集群
--class CLASS_NAME 应用程序包的要运行的class
--name NAME 应用程序名称
--jars JARS 用逗号隔开的driver本地jar包列表以及executor类路径
--py-files PY_FILES 用逗号隔开的放置在Python应用程序PYTHONPATH上的.zip, .egg, .py文件列表
--files FILES 用逗号隔开的要放置在每个executor工作目录的文件列表
--properties-file FILE 设置应用程序属性的文件放置位置,默认是conf/spark-defaults.conf
--driver-memory MEM driver内存大小,默认512M
--driver-java-options driver的java选项
--driver-library-path driver的库路径Extra library path entries to pass to the driver
--driver-class-path driver的类路径,用--jars 添加的jar包会自动包含在类路径里
--executor-memory MEM executor内存大小,默认1G
Spark standalone with cluster deploy mode only:
--driver-cores NUM driver使用内核数,默认为1
--supervise 如果设置了该参数,driver失败是会重启
Spark standalone and Mesos only:
--total-executor-cores NUM executor使用的总核数
YARN-only:
--executor-cores NUM 每个executor使用的内核数,默认为1
--queue QUEUE_NAME 提交应用程序给哪个YARN的队列,默认是default队列
--num-executors NUM 启动的executor数量,默认是2个
--archives ARCHIVES 被每个executor提取到工作目录的档案列表,用逗号隔开
关于以上spark-submit的help信息,有几点需要强调一下:
关于--master --deploy-mode,正常情况下,可以不需要配置--deploy-mode,使用下面的值配置--master就可以了,使用类似 --master spark://host:port --deploy-mode cluster会将driver提交给cluster,然后就将worker给kill的现象。
Master URL 含义
local 使用1个worker线程在本地运行Spark应用程序
local[K] 使用K个worker线程在本地运行Spark应用程序
local[*] 使用所有剩余worker线程在本地运行Spark应用程序
spark://HOST:PORT连接到Spark Standalone集群,以便在该集群上运行Spark应用程序
mesos://HOST:PORT连接到Mesos集群,以便在该集群上运行Spark应用程序
yarn-client 以client方式连接到YARN集群,集群的定位由环境变量HADOOP_CONF_DIR定义,该方式driver在client运行。
yarn-cluster 以cluster方式连接到YARN集群,集群的定位由环境变量HADOOP_CONF_DIR定义,该方式driver也在集群中运行。
如果要使用--properties-file的话,在--properties-file中定义的属性就不必要在spark-sumbit中再定义了,比如在conf/spark-defaults.conf 定义了spark.master,就可以不使用--master了。关于Spark属性的优先权为:SparkConf方式 > 命令行参数方式 >文件配置方式,具体参见Spark1.0.0属性配置。
和之前的版本不同,Spark1.0.0会将自身的jar包和--jars选项中的jar包自动传给集群。
Spark使用下面几种URI来处理文件的传播:
file:// 使用file://和绝对路径,是由driver的HTTP server来提供文件服务,各个executor从driver上拉回文件。
hdfs:, http:, https:, ftp: executor直接从URL拉回文件
local: executor本地本身存在的文件,不需要拉回;也可以是通过NFS网络共享的文件。
--jars参数,引用第三方依赖的jar 包
特别注意:将所需要的jar包放入自己指定的文件夹,将所依赖的jar包的绝对路径名字使用',' 进行拼接;
echo `ls ~/Document/software/hbase_jar/*.jar` | tr ' ' ','
参数名参数说明
--mastermaster 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
--deploy-mode 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
--class 应用程序的主类,仅针对 java 或 scala 应用
--name 应用程序的名称
--jars 用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下
--packages 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
--exclude-packages 为了避免冲突 而指定不包含的 package
--repositories 远程 repository
--conf PROP=VALUE 指定 spark 配置属性的值,
例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
--properties-file 加载的配置文件,默认为 conf/spark-defaults.conf
--driver-memory Driver内存,默认 1G
--driver-java-options 传给 driver 的额外的 Java 选项
--driver-library-path 传给 driver 的额外的库路径
--driver-class-path 传给 driver 的额外的类路径
--driver-cores Driver 的核数,默认是1。在 yarn 或者 standalone 下使用
--executor-memory 每个 executor 的内存,默认是1G
--total-executor-cores 所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用
--num-executors 启动的 executor 数量。默认为2。在 yarn 下使用
--executor-core 每个 executor 的核数。在yarn或者standalone下使用
示例:
yuanpei
#!/bin/bash
#=====================
#yarn-client
#=====================
export PYSPARK_PYTHON="./zhx/py3envzh/bin/python" && \
export PYSPARK_DRIVER_PYTHON=`which python3` && \
spark-submit \
--master yarn --deploy-mode client \
--driver-memory 2G --num-executors 5 \
--executor-cores 4 --executor-memory 4g \
--driver-java-options "-XX:MaxPermSize=1024M" \
--conf spark.sql.shuffle.partitions=200 \
--conf spark.sql.files.maxPartitionBytes=268435456 \
--conf spark.sql.files.openCostInBytes=2097152 \
--packages org.mongodb.spark:mongo-spark-connector_2.11:2.3.2 \
--archives /root/zhx/py3envzh.zip#zhx \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./zhx/py3envzh/bin/python \
--py-files /root/zhx/dist/yuanpei-0.1-py3.6.egg \
--queue kb_ai \
/root/zhx/yuanpei.py
xingzhi
#!/bin/bash
#=====================
#yarn-client
#=====================
export PYSPARK_PYTHON="./zsk/py3xzenv/bin/python" && \
export PYSPARK_DRIVER_PYTHON=`which python3` && \
spark-submit \
--master yarn --deploy-mode client \
--driver-memory 2G --num-executors 5 \
--executor-cores 4 --executor-memory 6g \
--driver-java-options "-XX:MaxPermSize=1024M" \
--jars $(echo /root/zsk/hbase_jar/*.jar | tr ' ' ',') \
--conf spark.sql.shuffle.partitions=200 \
--conf spark.sql.files.maxPartitionBytes=268435456 \
--conf spark.sql.files.openCostInBytes=2097152 \
--archives /root/zsk/py3xzenv.zip#zsk \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./zsk/py3xzenv/bin/python \
--py-files /root/zsk/xingzhi/dist/xingzhi-0.1-py3.6.egg \
--queue kb_ai \
/root/zsk/xingzhi/xingzhi.py \
debug
def init_static(LOGGING):
'''initialize static configuration'''
dictConfig(LOGGING)
os.environ['HADOOP_USER_NAME'] = 'hdfs'
conf = SparkConf()
#conf.addPyFile('/home/hdfs/zsk/site-packages.zip')
#conf.setMaster("local[2]")
#conf.setMaster("yarn")
conf.setAppName('xingzhi_student_stat')
#conf.set('spark.jars.packages', 'org.mongodb.spark:mongo-spark-connector_2.11:2.1.2')
#conf.set("spark.driver.host", "localhost")
conf.set('hive.metastore.uris', 'thrift://10.10.130.93:9083')
#这个是数据库连接语句
conf.set("spark.mongodb.input.uri", "mongodb://kb_dev:kb_dev@10.10.254.13:27017/test_kboe")
conf.set("spark.mongodb.output.uri", "mongodb://kb_dev:kb_dev@10.10.254.13:27017/test_kboe")
#ss = SparkSession.builder.getOrCreate()
sc = SparkContext(conf=conf)
#sc.setLogLevel('ALL')
hadoopConf = sc._jsc.hadoopConfiguration()
hadoopConf.set("fs.defaultFS", "hdfs://aiyunxiao")
hadoopConf.set("dfs.nameservices", "aiyunxiao")
hadoopConf.set("dfs.ha.namenodes.aiyunxiao", "nn1,nn2")
hadoopConf.set("dfs.namenode.rpc-address.aiyunxiao.nn1", "10.10.130.91:8020")
hadoopConf.set("dfs.namenode.rpc-address.aiyunxiao.nn2", "10.10.130.92:8020")
hadoopConf.set("dfs.client.failover.proxy.provider.aiyunxiao", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider")
return sc
anaconda 打包需要用到的python第三方包
例如:pymongo
如果在spark driver 端用到pymongo,需要在diver端安装pymongo
pip3 install pymongo
cluster模式
#!/bin/bash
#=====================
#yarn-client
#=====================
export PYSPARK_PYTHON="./zsk/py3xzenv/bin/python" && \
export PYSPARK_DRIVER_PYTHON=`which python3` && \
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 2G \
--num-executors 5 \
--executor-cores 4 \
--executor-memory 6g \
--driver-java-options "-XX:MaxPermSize=1024M" \
--jars $(echo /root/xingzhi/hbase_jar/*.jar | tr ' ' ',') \
--conf spark.sql.shuffle.partitions=300 \
--conf spark.sql.files.maxPartitionBytes=268435456 \
--conf spark.sql.files.openCostInBytes=2097152 \
--archives /root/xingzhi/py3zh.zip#zsk \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./zsk/py3zh/bin/python \
--py-files /root/xingzhi/conduct_bak/xingzhi/dist/xingzhi-0.1-py3.6.egg \
--queue kb_ai \
/root/xingzhi/conduct_bak/xingzhi/xingzhi.py \
debug