postgresql - 如何使用 spark-submit 让驱动程序和执行程序加载和识别 EMR 中的 postgres 驱动程序?
问题描述
背景 我正在尝试运行从 Kafka 流式传输的 spark-submit 命令,并将 JDBC 接收器执行到 AWS EMR(版本 5.23.0)中的 postgres DB 并使用 scala(版本 2.11.12)。我看到的错误是
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 的原因。
以前的尝试 我已经做了以下事情:
- 在我的结构化流式传输作业中将我的驱动程序标识为
Class.forName("org.postgresql.Driver")
- 添加
--jars postgresql-42.1.4.jar \
到我的 spark-submit 作业中,以便将 jar 发送给驱动程序和执行程序。在此尝试中,此 postgres 驱动程序 jar 存在于我的本地 /home/user_name/ 目录中 - 还尝试
--jars /usr/lib/spark/jars/postgresql-42.1.4.jar \
了我的 spark-submit 作业,这是 emr 中 spark 找到所有要执行的 jar 的位置 - 开始我的火花提交工作
spark-submit --driver-class-path /usr/lib/spark/jars/postgresql-42.1.4.jar:....
- 添加
/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 和 System Classpath 中一般的 - 我的 jdbc 连接在 Zeppelin 中工作时,在 spark-submit 中不起作用。这是
jdbc:postgres://master-public-dns-name:5432/DBNAME"
预期结果: 我希望我的执行者能够识别 postgres 驱动程序并将数据发送到 postgres 数据库。
以前的尝试: 我已经使用以下建议无济于事:
找不到适合 jdbc 的驱动程序:postgresql://192.168.1.8:5432/NexentaSearch
解决方案
利用-- packages org.postgresql:postgresql:<VERSION>
推荐阅读
- javascript - node.js 无法从相对路径中找到模块
- python - 具有多个模型的自定义训练循环通过
- apache - 使用 .htaccess [#Q2.] 修改 URL
- javascript - 如何在 Handlebars 和 Puppeteer 中使用自定义字体?
- sql - 查找要删除的引用不存在的数据库的 SQL 作业
- ant - PITest 在 ant 中跳过测试
- c++ - 使用另一个类“Student_info”的数据类型初始化模板类“Stack”的对象时出现非法结构操作错误
- scala - Stream-Static Join:如何定期刷新(非持久化/持久化)静态数据框
- windows - 罗技 lua 可靠睡眠
- sql-server - 双跳 IIS 到 SQL Server 身份验证在本地工作,不能在远程工作