Spark 作业在第一次尝试连接到 Oracle 时失败

Spark Job fails connecting to oracle in first attempt

我们是 运行 连接到 oracle 并获取一些数据的 spark 作业。始终尝试 0 或 1 次 JDBCRDD 任务失败并出现以下错误。在随后的尝试中任务完成。正如一些门户网站所建议的那样,我们甚至尝试使用 -Djava.security.egd=file:///dev/urandom java 选项,但它并没有解决问题。谁能帮我们解决这个问题。

ava.sql.SQLRecoverableException: IO Error: Connection reset by peer, Authentication lapse 59937 ms.
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:794)
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688)

此异常与 Apache Spark 无关,"SQLRecoverableException: IO Error:" 只是 Oracle JDBC 驱动程序报告它是连接 DBMS 在使用时被从下面关闭了。真正的问题在于 DBMS,例如会话突然终止。请检查数据库管理系统 错误日志并与问题分享。

您可以在这里找到类似的问题 https://access.redhat.com/solutions/28436

仅 java.security.egd 有问题。通过命令行设置它,即 -Djava.security.egd=file:///dev/urandom 不起作用,所以我通过 system.setproperty 在工作中设置它。在该工作不再提供 SQLRecoverableException

之后

最快的方法是在 运行 你的工作之前导出 spark 系统变量 SPARK_SUBMIT_OPTS。

像这样:export SPARK_SUBMIT_OPTS=-Djava.security.egd=file:dev/urandom 我正在使用 docker,所以对我来说完整的命令是:

docker exec -it spark-master 
bash -c "export SPARK_SUBMIT_OPTS=-Djava.security.egd=file:dev/urandom && 
/spark/bin/spark-submit --verbose --master spark://172.16.9.213:7077 /scala/sparkjob/target/scala-2.11/sparkjob-assembly-0.1.jar"
  1. 导出变量
  2. 提交作业