【问题标题】:Reading And Writing to MYSQL in AWS Glue在 AWS Glue 中读写 MYSQL
【发布时间】:2019-05-26 21:47:01
【问题描述】:

enter image description here我能够在 juypter notebook 中本地运行我的 Pyspark 代码时连接到 MYSQL,但是我在运行代码时在 AWS Glue 中遇到了通信错误。在 AWS Glue 中创建作业时,我在所需的 jar 文件中添加了 MySQL jar。

从 MYSQL 读取

dataframe_mysql = sqlContext.read.format("jdbc").option("url", "jdbc:mysql://localhost/read").option("driver", "com.mysql.jdbc.Driver" ).option("dbtable", "student").option("user", "root").option("password", "root").load()

写入 MYSQL

df = sc.parallelize([[25, 'Prem'],

                  [20, 'Kate'],

                 [20, 'Kate'],

                  [40, 'Cheng']]).toDF(["Depy_id","Dept_name"])

df.write.format('jdbc').options(

  url='jdbc:mysql://localhost/test',

  driver='com.mysql.jdbc.Driver',

  dbtable='dept',

  user='root',

  password='root').mode('overwrite').save()

【问题讨论】:

  • 能否在connections下测试一下连接是否成功?
  • 我没听懂。测试连接下的连接是什么意思。
  • AWS Glue 控制台 -> 数据库 -> 连接 -> 选择为 ETL 作业创建的连接 -> 单击测试连接。您可以按照此导航测试连接。
  • 我的工作是由自定义编写的 pyspark 脚本创建的。我没有在 AWS 中建立任何连接。
  • 您能否创建一个,将其添加到您的 Glue 作业并重试运行该作业。

标签: amazon-web-services pyspark pyspark-sql aws-glue aws-glue-data-catalog


【解决方案1】:

请注意,您必须提供有效的数据库 URL,而不是本地主机。我相信你的 jupyter notebook 是在笔记本电脑上本地运行的,在你的 mysql 运行的同一个本地环境中。

AWS Glue 在 AWS 环境中运行,并在后台根据 DPU 配置启动多个 EC2 实例。如果您的 URL 配置为 LOCALHOST,则运行 pyspark 代码的 EC2 实例将在同一节点上查找 mysql 数据库。

请确保您拥有 mysql 数据库的有效公共 IP,并尝试按照 bdcloud 的建议在 AWS Glue 中设置连接,然后重试。如果您不想创建连接,您可以在代码中硬编码连接参数,然后重试。如果安装的 mysql 数据库无法获取公网 IP,可以尝试在 AWS 上设置一个 RDS Mysql,并使用它进行测试。

示例代码 sn-p:

conn = mysql.connector.connect(host=url, user=uname, password=pwd, database=dbase)
cur = conn.cursor()

insertQry = "INSERT INTO emp (id, emp_name, dept, designation, address1, city, state, active_start_date, is_active) SELECT (SELECT coalesce(MAX(ID),0) + 1 FROM atlas.emp) id, tmp.emp_name, tmp.dept, tmp.designation, tmp.address1, tmp.city, tmp.state, tmp.active_start_date, tmp.is_active from EMP_STG tmp ON DUPLICATE KEY UPDATE dept=tmp.dept, designation=tmp.designation, address1=tmp.address1, city=tmp.city, state=tmp.state, active_start_date=tmp.active_start_date, is_active =tmp.is_active ;"

n = cur.execute(insertQry)
print (" CURSOR status :", n)

请参阅 AWS Glue 连接部分:

【讨论】:

    【解决方案2】:

    是的,我可以像上面那样连接它,只需将连接添加到作业以及将本地主机更改为相应的

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 2021-05-01
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多