以集群方式运行pyspark

一、背景说明

  单机执行pyspark(python on spark)非常简单,只要在脚本所在服务器上部署个python环境或Anaconda这种集成运行环境,再通过python3命令执行就完了。

  而想将python提交到spark集群中运行,则有两种方法,一种是在每个spark结点上部署python环境,在spark低版本与python集成没那么完善的时候,集群结点数又不多的情况下,的确可以这么干(实际上我就这么干过),这种方式比较大的优势是每次执行pyspark任务时,不用分发python环境,会比接下来说的第二种方法快那么一丢丢。而缺点就显而易见的,就是太难维护了:python环境增加依赖时,需求每个结点都安装依赖;集群添加新spark结点时,又要另外部署python环境。这不是扯蛋吗?

  在经历了第一种方式的折磨后,终于用上了第二种方法,就是先将python环境打包放到HDFS中,然后稍微修改一下执行脚本,即可方便地以集群的方式执行pyspark脚本了。

  以下以使用Anaconda为例构建python虚拟环境,其他虚拟环境大同小异。

二、构建python虚拟环境

  1、到anaconda官网下载anaconda;(我下载的是Anaconda3-2019.10-Linux-x86_64.sh);

  2. 在该目录下,执行Anaconda3-2019.10-Linux-x86_64.sh ,安装Anaconda;

  3. 重启黑窗(ssh连接);

  4. 使用命令创建一个python3.7版本,名叫my_test_env的python虚拟环境:

 conda create --name my_test_env python=3.7

  5. 激活(进入)新环境:

conda activate my_test_env

  6. 在新环境下(my_test_env)安装需要的包,requirements.txt是描述所需依赖的文件:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

  requirements.txt内容示例:

  至此,虚拟环境安装完,并且已经安装好requirements.txt里指定的依赖。

三、将虚拟环境放到hdfs中

  安装好的虚拟环境,是存放在anaconda安装目录下的“/anaconda3/envs”下,在该目录下,我们可以看到刚刚安装的 my_test_env 目录,执行以下命令将该目录打包成zip包:

zip -r my_test_env.zip my_test_env

(如提示找不到zip命令,执行 yum install -r zip 安装zip工具)

  执行以下命令将刚刚打包的zip包放到hdfs:

# 创建存放环境的目录
hadoop fs -mkdirs /apps/python/env

# 将zip包put到该目录
hadoop fs -put my_test_env.zip /apps/python/env/

四、修改执行脚本

  在执行脚本中,只要增加--archives和几个指定python环境的参数,就可以了,完整的模版如下:

# 脚本名字,不需要后缀名(.py)
python_file=my_python_script

# 指定yarn的执行队列
queue=default

# 指定需要的executor数,默认1C/4G为一个executor
core=15

# 如果要在crontab中自动调度,若想使用相对路径,需要先cd进脚本所在目录
cd /data/python_script/

# 执行模版(其中,9-13就是新增的配置,用于指定hdfs上的python虚拟环境)
nohup \
spark-submit \
--master yarn \
--deploy-mode cluster \
--num-executors $core \
--driver-memory 8G \
--executor-memory 4G \
--executor-cores 1 \
--archives hdfs://myhadoop/apps/python/env/my_test_env.zip#PyEnv \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=PyEnv/my_test_env/bin/python3.7 \
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=PyEnv/my_test_env/bin/python3.7 \
--conf spark.executorEnv.PYSPARK_PYTHON=PyEnv/my_test_env/bin/python3.7 \
--conf spark.executorEnv.PYSPARK_DRIVER_PYTHON=PyEnv/my_test_env/bin/python3.7 \
--queue $queue \
$python_file\.py \
1> nohup.out.$python_file 2>&1 &

# 脚本执行日志,会输出到当前目录下的 nohup.out.脚本名 文件中。

  另外,如果想查看yarn上详细的任务日志,可通过以下命令导出日志:

# yarn logs -applicationId 任务的appid > logs.txt ,示例:
yarn logs -applicationId application_1652618816000_3721 > logs.txt

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Hadoop YARN运行PySpark,需要按照以下步骤操作: 1. 安装Hadoop和Spark,并配置好环境变量。 2. 在Hadoop集群上启动YARN服务。 3. 在Spark的conf目录下,创建一个新的spark-defaults.conf文件,并添加以下配置: ``` spark.master yarn spark.submit.deployMode client spark.driver.memory 1g spark.executor.memory 1g spark.executor.instances 2 spark.yarn.appMasterEnv.PYSPARK_PYTHON /usr/bin/python3 ``` 其中,`spark.master`设置为`yarn`,表示使用YARN作为Spark的资源管理器;`spark.submit.deployMode`设置为`client`,表示在客户端模式下提交应用程序;`spark.driver.memory`和`spark.executor.memory`分别设置为1g,表示每个Driver和Executor的内存大小;`spark.executor.instances`设置为2,表示启动2个Executor;`spark.yarn.appMasterEnv.PYSPARK_PYTHON`设置为`/usr/bin/python3`,表示使用Python3作为PySpark的解释器。 4. 在PySpark脚本中,添加以下代码: ``` from pyspark.sql import SparkSession spark = SparkSession.builder.appName("PySparkExample").getOrCreate() # 在这里编写PySpark代码 spark.stop() ``` 其中,`SparkSession`用于创建Spark应用程序的入口点;`appName`设置应用程序的名称;`getOrCreate`方法用于获取现有的SparkSession或创建一个新的SparkSession。 5. 在命令行中,使用以下命令提交PySpark应用程序: ``` spark-submit --master yarn --deploy-mode client --py-files <path-to-py-files> <path-to-pyspark-script> ``` 其中,`--master`设置为`yarn`,表示使用YARN作为Spark的资源管理器;`--deploy-mode`设置为`client`,表示在客户端模式下提交应用程序;`--py-files`指定需要上传到集群Python文件;`<path-to-pyspark-script>`指定PySpark脚本的路径。 6. 提交应用程序后,可以在YARN的Web界面上查看应用程序的运行情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值