PySpark 使用过程中遇到的典型问题及处理办法
Posted 珍妮的选择
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark 使用过程中遇到的典型问题及处理办法相关的知识,希望对你有一定的参考价值。
PySpark 使用过程中遇到的典型问题及处理办法
前言
不知道为啥, 现在写博客总得弄点前言, 观者无不叹息为何生命中宝贵的 20 秒钟要浪费在这无意义的前言上 ???????????? 好吧, 就是想水点文字, 今天是 7 月的最后一天, 距离零点还有 1 个小时左右, 我想抓住 7 月的尾巴, 再水篇博客, 在 7 月份完成两篇~ 原本是想分享论文的, 但还在酝酿当中. 思来想去, 最快达到目的的方法就是记录一些平时的笔记, 哈哈… 下面的内容考虑在 PySpark 使用过程中, 遇到的一些问题以及处理办法, 以防再次遇到相关问题又要去大量 Google … 总结在一处还是有必要的. 所以本文是会不断更新的. (Flag~)
下面正式进入问题分析.
Failed to create local root dir in /tmp/spark (Spark 无法产生临时目录的问题)
Spark 默认使用 /tmp/spark*
作为临时目录以存储一些临时数据, 如果该默认路径所在的磁盘满了, 会出现报错
Failed to create local root dir in
此时按照博客 Spark运行在Standalone模式下产生的临时目录的问题 中的处理方法, 可以在提交 Spark 任务时加上配置:
--conf spark.local.dir=/home/xxx/spark_tmp \\
使用上面的选项将临时目录修改为 /home
目录下的某个目录;
另一种方法是在 .bashrc
或者 .zshrc
文件中设置 SPARK_LOCAL_DIRS
环境变量:
export SPARK_LOCAL_DIRS=/home/xxx/spark_tmp
在命令行中启动 Spark
使用 PYSPARK_DRIVER_PYTHON=ipython pyspark
会比较香.
保存输出结果时报 UnicodeEncodeError 错误
我在使用 saveTextFile
时有时会遇到 UnicodeEncodeError
, 可能是因为使用 Python2 同时输出内容有中文的缘故. 要处理有一下思路可以考虑:
- 对于 Python2, 可以增加如下代码, 另外注意 Python3 不需要加, 否则会报错, Python3 中已经无
reload
函数了.
import sys
if sys.getdefaultencoding() != utf-8:
reload(sys)
sys.setdefaultencoding(utf-8)
- 另外就是考虑打包 Python3, 处理 UnicodeEncodeError; 选择一个 Anaconda3 或者 miniconda3 发行版, 然后打包, 打包使用如下命令:
tar
生成 miniconda3.tar.gz
后, 将其上传到 HDFS 上, 比如 hdfs://xxx/yyyy/zzz/
:
hadoop fs -put miniconda3.tar.gz hdfs://xxx/yyyy/zzz/
之后在提交 Spark 任务的脚本 (spark-submit
命令) 中加入如下配置:
--archives hdfs://xxx/yyyy/zzz/miniconda3.tar.gz#pyana \\
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./pyana/miniconda3-latest/bin/python \\
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=./pyana/miniconda3-latest/bin/python \\
处理 Spark 的 port binding error
类似于这样的错误:
WARN Utils: Service sparkDriver could not bind on a random free
参考 Port binding error in PySpark 解决.
- 方法一最省事, 设置
SPARK_LOCAL_IP
环境变量
export SPARK_LOCAL_IP=127.0.0.1
- 方法二是对 builder 使用
.config(spark.driver.host,127.0.0.1)
, 比如:
spark = SparkSession.builder \\
.config(spark.driver.host,127.0.0.1) \\
.master("local") \\
.enableHiveSupport() \\
.getOrCreate()
- 方法三是 sc 进行设置:
conf = pyspark.SparkConf().set(spark.driver.host,127.0.0.1)
sc = pyspark.SparkContext(master=local, appName=myAppName,conf=conf)
运行主程序时需导入其他 Python 文件
比如 main.py
中需要导入来自 utils.py
中的函数:
from utils import *
此时只需要在任务提交命令 spark-submit
的选项中增加:
--py-files ./utils.py
即可. 此外, 还有一些资料显示可以使用 SparkFiles
提供的功能, 但是我还没有用过, 下面给出链接:
- While submit job with pyspark, how to access static files upload with --files argument?
- Adding Python Files to PySpark Job
以上是关于PySpark 使用过程中遇到的典型问题及处理办法的主要内容,如果未能解决你的问题,请参考以下文章
vs 2015 结合新配置的IIS 发布网站过程中遇到的问题及解决办法?