您如何通过Spark-Submit使驱动程序和执行程序加载并识别EMR中的postgres驱动程序?

时间:2019-06-20 14:29:07

标签: postgresql apache-spark hadoop driver amazon-emr

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

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. --jars postgresql-42.1.4.jar \添加到了我的提交工作中,以便将罐子发送给驱动程序和执行程序。在这种尝试中,此postgres驱动程序jar存在于我的本地/ home / user_name /目录中
  3. 还尝试了--jars /usr/lib/spark/jars/postgresql-42.1.4.jar \到我的spark-submit作业,这是emr中spark查找所有要执行的jar的位置
  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中。路径,以及一般的系统类路径
  6. 在Zeppelin中工作时,我的jdbc连接无法在spark-submit中工作。是jdbc:postgres://master-public-dns-name:5432/DBNAME"

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

上一次尝试: 我已经使用了以下建议,但无济于事:

Adding JDBC driver to Spark on EMR

No Suitable Driver found Postgres JDBC

No suitable driver found for jdbc:postgresql://192.168.1.8:5432/NexentaSearch

1 个答案:

答案 0 :(得分:0)

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