Python运行Spark集群环境踩坑记录

这一段时间一直在弄spark集群,然后开发使用的是python开发,其中环境的坑多到几度想令我放弃,这也就是公司没有配置专业搭环境的工程师的弊端,遇到事情了只能自己解决,于是自己记录下不同的坑,方便自己以后排雷,也放出来给有需要的人。

1. 在python中配置环境变量注意点 首先就是python环境在集群中必须一致,如果是采用os.environ的方法的话,不然你就会遇到如下的报错

Python运行Spark集群环境踩坑记录_第1张图片

解决方法: 保证每台机器上的python环境都可以通过/usr/bin/python3来进行指定 

2. 因为用os.environ的方法来指定Pyspark以及spark等的环境,所以需要保证指定的路径在每个worker上都是一样的。如果某一个worker上有问题,就会出现类似如下的报错

Python运行Spark集群环境踩坑记录_第2张图片

遇到这样的报错,首先去每台worker上检查,定位到出问题的worker,然后在上面创建软连接指向python3.6

3. 直接python 运行.py文件的时候报找不到pyspark模块,截图如下:

Python运行Spark集群环境踩坑记录_第3张图片

解决方法就是运行的时候用python3 **.py运行 

4. 在集群中运行的时候报ModuleNotFoundError: No module named 'data_feature',也就是如果你的工程里面用到了自己别的py文件,那么在集群上运行的时候就会出现如下报错:

Python运行Spark集群环境踩坑记录_第4张图片

这个报错可谓是深深虐到了我,不管你怎么弄貌似都没办法解决,我理解了一下,貌似在集群中运行的时候,代码也会分发到不同的worker下,如果代码有别的第三方依赖,而其余的worker机器上没有的话,那么就会报错,读了下源码后发现做如下的配置就可以解决了

Python运行Spark集群环境踩坑记录_第5张图片

上面2个一个是添加每个节点需要下载的文件,另一个就是添加需要用的.py依赖环境可以是.py文件也可以是.gz

这里说明了一点,有时候多读下源码会比直接在网上盲目的搜一堆没营养的答案要好很多。啊,得静下心来学着慢慢看。

最后贴上自己的配置 

import os

os.environ['JAVA_HOME']='/opt/jdk1.8.0_141'
os.environ['PYTHON_HOME']="/opt/Python-3.6.5"
os.environ['PYSPARK_PYTHON']="/usr/bin/python3"
os.environ['SPARK_HOME']='/opt/spark'
os.environ['SPARK_CLASSPATH']='/opt/spark/jars/mysql-connector-java-8.0.13.jar'
os.environ['SPARK_MASTER_IP']='hadoop2'
def CreateSparkContext():
    # 构建SparkSession实例对象
    spark = SparkSession.builder \
        .appName("TestSparkSession") \
        .master("spark://hadoop2:7077") \
        .config("hive.metastore.uris", "thrift://hadoop1:9083") \
        .config('spark.executor.num','4')\
        .config('spark.executor.memory','64g')\
        .config("spark.executor.cores",'4')\
        .config('spark.cores.max','16')\
        .config('spark.driver.memory','32g') \
        .config("spark.sql.catalogImplementation", "hive") \
        .getOrCreate()       
    # 获取SparkContext实例对象
    sc =spark.sparkContext
    sc.addPyFile("file:///data/lin/code/code_git/RecommendOnSpark/models.zip") 

    return sc

然后这样配置后,直接python .py就是在集群中运行了,不需要在pyspark中进行spark-submit来提交 

你可能感兴趣的:(Spark学习,报错解决方法收集)