Pyspark 连接 mysql 各种问题

关于 PySpark 提交集群运行

原先代码如下

import os
import sys

project = 'OneStopDataPlatformPY'  # 工作项目根目录
path = os.getcwd().split(project)[0] + project
sys.path.append(path)
print(path)
from pyspark.sql import SparkSession
from org.atgpcm.onestop.common.conf.ConfigurationManager import ConfigurationManager

initConfig = ConfigurationManager().getInitConfig()
driver = initConfig.get('mysql','driver')
jdbcUrl244 = initConfig.get('mysql','244jdbc.url')
jdbcUrl246 = initConfig.get('mysql','246jdbc.url')
user = initConfig.get('mysql','jdbc.user')
password = initConfig.get('mysql','jdbc.password')  #properties["jdbc.password"]

conn244 = {'user':user,'password':password,'driver':'com.mysql.cj.jdbc.Driver'}
conn246 = {'user':user,'password':password,'driver':'com.mysql.cj.jdbc.Driver'}

def start():
    spark_session = SparkSession.builder \
        .master('local[8]') \
        .appName('WordOfMouthStatisticsSpark') \
        .config('spark.jars', '../lib/mysql-connector-java.jar') \
        .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")\
        .config("spark.default.parallelism", "100")\
        .config("spark.locality.wait", "0")\
        .getOrCreate()
    df = spark_session.read.jdbc(jdbcUrl244, 'all_auto_label', "label_id", 0, 2000000, 200, None, conn244)
    # .filter("state = 1  and sentiment is not null and source_type = 2")
    df.show()

if __name__ == '__main__':
    start()

修改后代码


在这里插入图片描述

问题一:

py4j.protocol.Py4JJavaError: An error occurred while calling o60.jdbc.
: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
解决方法 :这里由于我环境的问题 , 虽然数据库映射了 外网 ip , 但是在我的集群中无法 tail 该数据库ip+端口 , 但是在windos pycharm 中是可以运行的 ,所以 在提交集群是  换成mysql的内网ip 就可以了  

问题二:

from org.atgpcm.onestop.common.conf.ConfigurationManager import ConfigurationManager
会报错 无法引入 该自定义模块
解决方法:
	from  这里路径填全 import ***

问题三:

 def getInitConfig(self):
        # 生成ConfigParser对象
        config = configparser.ConfigParser()
        # 读取配置文件
        filename = 'config.ini'
        file = os.path.abspath(os.path.join(os.getcwd(), "..", filename))
        print(os.getcwd()+'=========================')
        print(file+'------------------------------')
        config.read(file, encoding='utf-8')
        return config
此处 file = os.path.abspath(os.path.join(os.getcwd(), "..", filename)) 在集群中执行时 找不到 和是的路径

以上问题有一个解决方法

/home/bigdata/spark-2.2.0-bin-hadoop2.7/bin/spark-submit \
--master spark://bigdat01:7077 \
--executor-memory 4g \
--total-executor-cores 8 \
--driver-memory 3g \
--py-files /home/bigdata/sparkJar/OneStopDataPlatformPY.zip \
/home/bigdata/sparkJar/OneStopDataPlatformPY/org/atgpcm/onestop/spark/test1.py

特别注意 这里提交命令的执行位置  需要在 test1.py该文件的位置执行
发布了1 篇原创文章 · 获赞 0 · 访问量 23

猜你喜欢

转载自blog.csdn.net/TR_0323/article/details/104479665