python提交spark

2020-05-26 15:44:42 Fhonour 阅读数 115

1、提交python文件,遇到的难点是python文件缺乏运行所需要的依赖模块。

python3 -m pip install xx

我使用的是将anaconda打包放在HDFS上。

基础是已经有同事在linux服务器上安装好了anaconda2,很方便。

首先是将文件夹,打包成zip格式: zip -r  anaconda2.zip anaconda2。然后上传文件至HDFS服务器。

对于缺乏的模块,可以使用conda 或者pip进行添加。

最后是运行命令

spark-submit  \
--master yarn \
--deploy-mode client \
--num-executors 4 \
--executor-memory 5G \
--archives hdfs:///anaconda2.zip#anaconda2 \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./anaconda2/anaconda2/bin/python2 \
test.py

spark-submit使用指定的python环境

参考spark Configuration,有如下描述:

配置                                           描述
spark.pyspark.driver.python    Python binary executable to use for PySpark in driver. (default is spark.pyspark.python)
spark.pyspark.python    Python binary executable to use for PySpark in both driver and executors.
使用--conf指定python环境:


--conf "spark.pyspark.driver.python=/path/to/envs/bin/python3.7" \
--conf "spark.pyspark.python=/path/to/envs/bin/python3.7" \


根据描述,为了保证驱动器和执行器的python环境一致,只指定 spark.pyspark.python即可。
 

2、python脚本编写注意事项
写python脚本时,有两点需要注意一下(我目前就知道这两点,实际需要注意的地方可能更多)

脚本中需要创建SparkContext环境

from pyspark import SparkContext
sc=SparkContext(appName='first app')


SparkContext()函数有很多参数可以设置,详情参考这里,我这里只是添加应用名称说明

在python脚本中,有时需要添加库依赖、使用import导入,所有的这些导入操作都必须在SparkContext环境创建完成之后
下面贴一下我测试时写的简单的demo,这个代码的作用是计算text.txt中包含字符“i”的行数

# -*- coding:utf-8 -*-
#firstApp.py
if __name__=="__main__":
    from pyspark import SparkContext
    sc=SparkContext(appName='firt app')
    word=sc.textFile('file:///home/hadoop/Download/test/test.txt')
    num_i=word.filter(lambda s:'i' in s).count()
    print(num_i)
这段代码中没有依赖额外的库,所以也就没有导入

提交python脚本,在提交firstApp.py脚本时,使用如下指令

$ spark-submit \
--master local[2] \
--num-executors 2 \
--executor-memory 1G \
/home/hadoop/Download/test/firstApp.py

 

 
2018-12-04 16:37:22 qwezhaohaihong 阅读数 350

首先,python提交spark的命令 比较复杂的版本如下:

spark-submit --master yarn-client --driver-memory 4g --executor-cores 4 --executor-memory 8g --conf spark.dynamicAllocation.minExecutors=10 --queue queue_cem  /home/test/test_pyspark.py(测试文件目录)

此时是配置了spark-submit命令的

非路径方法有:/bin/spark-submit xxxx.py直接就可以提交python文件(最简单的方法)

 

其次,有时候集群里的python版本不适合更新或者无法联网进行导包的时候,我们可以采用如下方法进行解决:

我对python提交sparkd的初步理解是,spark平台和一个python环境进行绑定,利用pyspark进行交互,因此我们导入的本地包需要导入只pyspark的lib目录下面,并且得是.zip的格式!pyspark的包目录怎么找呢,首先进入pyspark编译器,执行如下代码

import os
import sys
spark_name = os.environ.get('SPARK_HOME',None)
if not spark_name:
    raise ValueErrorError('spark环境没有配置好')
print spark_name

 

spark_name会给出一个路径,我们只需要在路径后添加上 /lib,这就是我们要存放包的路径了,在终端下将本地的.zip格式的第三方包(从github下载最合适)利用mv命令移动至pyspark环境的包目录,此时包已经进入pyspark环境中了,接下来执行一串代码进行配置即可(在pyspark编译环境下)

import os
import sys
spark_name = os.environ.get('SPARK_HOME',None)
if not spark_name:
    raise ValueErrorError('spark环境没有配置好')
sys.path.insert(0,os.path.join(spark_name,'python'))
sys.path.insert(0,os.path.join(spark_name,'python/lib/py4j-0.10.4-src.zip'))
exec(open(os.path.join(spark_name,'python/pyspark/shell.py')).read())

最后一行的代码有可能报错,因为我是学习的别人的方法,不过没关系,这个时候py4j包已经可以使用,并且通过spark-submit提交的py文件也可以import

 

以上内容为个人理解,如有不对请指正

2018-08-17 10:21:10 Yuan_CSDF 阅读数 5439

提交python文件,遇到的难点是python文件缺乏运行所需要的依赖模块。

python3 -m pip install xx

我使用的是将anaconda打包放在HDFS上。

基础是已经有同事在linux服务器上安装好了anaconda2,很方便。

首先是将文件夹,打包成zip格式: zip -r  anaconda2.zip anaconda2。然后上传文件至HDFS服务器。

对于缺乏的模块,可以使用conda 或者pip进行添加。

最后是运行命令

spark2-submit  \
--master yarn \
--deploy-mode client \
--num-executors 4 \
--executor-memory 5G \
--archives hdfs:///anaconda2.zip#anaconda2 \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./anaconda2/anaconda2/bin/python2 \
test.py

注意路径。

 

2019-07-23 16:27:22 huguozhiengr 阅读数 3283

        最近刚学习spark,用spark-submit命令提交一个python脚本,一开始老报错,所以打算好好整理一下用spark-submit命令提交python脚本的过程。先看一下spark-submit的可选参数

1.spark-submit参数

--master MASTER_URL:设置集群的主URL,用于决定任务提交到何处执行。常见的选项有

             local:提交到本地服务器执行,并分配单个线程

             local[k]:提交到本地服务器执行,并分配k个线程

             spark://HOST:PORT:提交到standalone模式部署的spark集群中,并指定主节点的IP与端口

             mesos://HOST:PORT:提交到mesos模式部署的集群中,并指定主节点的IP与端口

             yarn:提交到yarn模式部署的集群中

--deploy-mode DEPLOY_MODE:设置driver启动的未知,可选项如下,默认为client

             client:在客户端上启动driver,这样逻辑运算在client上执行,任务执行在cluster上

             cluster:逻辑运算与任务执行均在cluster上,cluster模式暂时不支持于Mesos集群或Python应用程序

--class CLASS_NAME :指定应用程序的类入口,即主类,仅针对java、scala程序,不作用于python程序

--name NAME :应用程序的名称

--jars JARS:用逗号隔开的driver本地jar包列表以及executor类路径,将程序代码及依赖资源打包成jar包

--packages:包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标

--exclude-packages:为了避免冲突 ,指定的参数--package中不包含的jars包

--repository:附加的远程资源库(包含jars包)等,可以通过maven坐标进行搜索

--py-files PY_FILES:逗号隔开的的.zip、.egg、.py文件,这些文件会放置在PYTHONPATH下,该参数仅针对python应用程序

--files FILES:逗号隔开的文件列表,这些文件将存放于每一个工作节点进程目录下

--conf PROP=VALUE:指定spark配置属性的值,格式为PROP=VALUE, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"

--properties-file FILE:指定需要额外加载的配置文件,用逗号分隔,如果不指定,默认为 conf/spark-defaults.conf

--driver-memory MEM :配置driver内存,默认为1G

--driver-java-options:传递给driver的额外选项

--driver-library-path:传递给driver的额外的库路径

--driver-class-path:传递给driver 的额外的类路径,用--jars 添加的jar包会自动包含在类路径里

--executor-memory MEM :每个 executor 的内存,默认是1G

当'--master'参数设置为Standalone,‘--deploy-mode’参数设置为cluster时,如下选项可以设置:

--driver-cores NUM:driver使用的内核数,默认为1

当'--master'参数设置为Standalone或者Mesos,‘--deploy-mode’参数设置为cluster时,如下选项可以设置:

--supervise:如果设置了该参数,driver失败是会重启

--kill SUBMISSION_ID:如果设置了该参数,则会杀死指定SUBMISSION_ID的driver进程

--status SUBMISSION_ID:如果设置了该参数,则请求返回指定SUBMISSION_ID的driver的状态

当'--master'参数设置为Standalone或者Mesos时,如下选项可以设置:

 --total-executor-cores NUM:设置集群中所有工作节点上executor使用的内核总数

当'--master'参数设置为Standalone或者YARN时,如下选项可以设置:

--executor-cores NUM:每个executor使用的核数

当'--master'参数设置为YARN时,如下选项可以设置:

 --driver-cores NUM :当--deploy-mode为cluster时,driver使用的内核数,默认为1

 --queue QUEUE_NAME :将任务提交给哪个YARN队列,默认为YARN的默认队列

--num-executors NUM:设置启动的executor数量,默认为2

--archives ARCHIVES :被每个executor提取到工作目录的档案列表,用逗号隔开

2.python脚本编写注意事项

写python脚本时,有两点需要注意一下(我目前就知道这两点,实际需要注意的地方可能更多)

  • 脚本中需要创建SparkContext环境
from pyspark import SparkContext
sc=SparkContext(appName='first app')

SparkContext()函数有很多参数可以设置,详情参考这里,我这里只是添加应用名称说明

  • 在python脚本中,有时需要添加库依赖、使用import导入,所有的这些导入操作都必须在SparkContext环境创建完成之后

下面贴一下我测试时写的简单的demo,这个代码的作用是计算text.txt中包含字符“i”的行数

# -*- coding:utf-8 -*-
#firstApp.py
if __name__=="__main__":
    from pyspark import SparkContext
    sc=SparkContext(appName='firt app')
    word=sc.textFile('file:///home/hadoop/Download/test/test.txt')
    num_i=word.filter(lambda s:'i' in s).count()
    print(num_i)

这段代码中没有依赖额外的库,所以也就没有导入

3.提交python脚本

在提交firstApp.py脚本时,使用如下指令

$ spark-submit \
--master local[2] \
--num-executors 2 \
--executor-memory 1G \
--py-files /home/hadoop/Download/test/firstApp.py

结果报如下错误“Error: Cannot load main class from JAR file:/home/hadoop/Download/spark-2.1.1-bin-hadoop2.7/bin/master”,其中:/home/hadoop/Download/spark-2.1.1-bin-hadoop2.7/bin/master与hadoop安装路径相关,虽然python脚本没有主类这一说,但是可以猜测到该错误是由于找不到函数入口导致,我在这里找打了一些答案,--py-fiels参数是用来添加应用程序所依赖的python文件的,我们要提交的应用程序可以直接采用如下方式提交,这样就没有报错了

$ spark-submit \
--master local[2] \
--num-executors 2 \
--executor-memory 1G \
 /home/hadoop/Download/test/firstApp.py

 

 

2018-09-30 15:38:19 weixin_39347054 阅读数 2805

一、启动thrift

因为用到了happybase,需要先在服务器上上启动thrift服务,
关闭终端thrift继续运行命令如下:

nohup hbase thrift -p 9090 start

二、linux从本地安装python库

以thriftpy为例

解压 tar zxvf thriftpy-0.3.9.tar.gz

回到当前目录 cd thriftpy-0.3.9

编译 python setup.py build

安装 python setup.py install

然而报错表示权限不够,切换到root账户命名为sudo su
重新执行上述操作。

对于集群上其他机器

在一台机器上将所有需要用到的库都装好后,这里默认安装在/usr/local/lib/python2.7/dist-packages文件夹里,其他机器可以直接将dist-packages文件夹复制到相应位置,即可直接import装好的python库

下面代码实现将10.1.140.11:/usr/local/lib/python2.7/dist-packages 目录或文件 复制到本地(目前操作的节点机器上)/home/hadoop/AA-packages,并将原dist-packages重新命名为AA-packages

scp -r hadoop@10.1.140.11:/usr/local/lib/python2.7/dist-packages /home/hadoop/AA-packages

在Xshell里可以批量处理,在Xshell下方的“发送文本到当前Xshell窗口的全部会话”中编辑命名即可对几台机器同步进行相同的操作。

三、python作业的提交

这里先cd到工程文件所在目录下,

/usr/local/spark/bin/spark-submit --master spark://10.1.140.xx:7077 --total-executor-cores 14 --executor-memory 4G --driver-memory 6G Quarter/Quarter_App.py

四、定时任务的设定

定时任务的设定,.sh中命令如下:



#!/bin/bash

cd /home/hadoop/huangyue/weiboAttention_point

/usr/local/spark/bin/spark-submit --master spark://10.1.140.xx:7077 --total-executor-cores 28 --executor-memory 6G --driver-memory 6G Attention_point/Attention_point/Month/month_App.py
                                                                            
~