如何让驱动程序和执行程序通过 spark-submit 在 EMR 中加载和识别 postgres 驱动程序?



背景我正在尝试运行一个 spark-submit 命令,该命令从 Kafka 流式传输,并使用 scala(版本 2.11.12)将 JDBC 接收器执行到AWS EMR(版本 5.23.0)中的 postgres 数据库中。我看到的错误是

INFO TaskSetManager: Lost task 0.3 in stage 0.0 (TID 6) on <master-public-dns-name>, executor 1: java.sql.SQLException (No suitable driver found for jdbc:postgres://... 
ERROR WriteToDataSourceV2Exec: Data source writer org.apache.spark.sql.execution.streaming.sources.MicroBatchWriter@44dd5258 is aborting.
19/06/20 06:11:26 ERROR WriteToDataSourceV2Exec: Data source writer org.apache.spark.sql.execution.streaming.sources.MicroBatchWriter@44dd5258 aborted.

假设问题我认为错误告诉我在执行器上找不到 jdbc postgres 驱动程序,这就是为什么它无法沉入 postgres 的原因。

以前的尝试我已经做了以下操作:

  1. 已将结构化流式处理作业中的驱动程序标识为Class.forName("org.postgresql.Driver")
  2. 向我的 Spark 提交作业添加了--jars postgresql-42.1.4.jar ,以便将 jar 发送给驱动程序和执行者。在这次尝试中,这个 postgres 驱动程序 jar 存在于我的本地/home/user_name/目录中
  3. 还尝试--jars /usr/lib/spark/jars/postgresql-42.1.4.jar 我的火花提交作业,这是 emr 中的火花找到所有要执行的罐子的位置
  4. spark-submit --driver-class-path /usr/lib/spark/jars/postgresql-42.1.4.jar:....开始了我的火花提交工作
  5. /usr/lib/spark/jars/postgresql-42.1.4.jar添加到 spark.driver.extraClassPath、spark.executor.extraClassPath、spark.yarn.dist.jars、spark.driver.extraLibraryPath、spark.yarn.secondary.jars、java.library.path 以及一般的系统类路径
  6. 我的 jdbc 连接在齐柏林飞艇中工作时,在 Spark-submit 中不起作用。这是jdbc:postgres://master-public-dns-name:5432/DBNAME"

预期结果:我希望我的执行程序能够识别 postgres 驱动程序并将数据下沉到 postgres DB。

以前的尝试:我已经使用以下建议无济于事:

将 JDBC 驱动程序添加到 EMR 上的 Spark 中

没有找到合适的驱动程序 Postgres JDBC

找不到适合 jdbc:postgresql://192.168.1.8:5432/NexentaSearch 的驱动程序

使用-- packages org.postgresql:postgresql:<VERSION>

最新更新