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 同时输出内容有中文的缘故. 要处理有一下思路可以考虑:

  1. 对于 Python2, 可以增加如下代码, 另外注意 Python3 不需要加, 否则会报错, Python3 中已经无​​reload​​ 函数了.
import sys

if sys.getdefaultencoding() != utf-8:
reload(sys)
sys.setdefaultencoding(utf-8)
  1. 另外就是考虑打包 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​​ 提供的功能, 但是我还没有用过, 下面给出链接:


以上是关于PySpark 使用过程中遇到的典型问题及处理办法的主要内容,如果未能解决你的问题,请参考以下文章

vs 2015 结合新配置的IIS 发布网站过程中遇到的问题及解决办法?

cocopods安装使用和安装过程中遇到的问题及解决办法

cocopods安装使用和安装过程中遇到的问题及解决办法(2016)

记一次wordpress安装过程中遇到的问题及解决办法

ubuntu安装过程中遇到的一些问题及解决办法。

常见的宽带连接错误的处理办法