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该文件的位置执行
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值