Java spark上第三方服务的SSL证书
我正在尝试访问一个需要SSL的服务(比如mongodb),但由于没有设置正确的SSL配置,连接被执行器拒绝 我知道在提交作业时,spark支持以下配置:Java spark上第三方服务的SSL证书,java,scala,apache-spark,ssl,emr,Java,Scala,Apache Spark,Ssl,Emr,我正在尝试访问一个需要SSL的服务(比如mongodb),但由于没有设置正确的SSL配置,连接被执行器拒绝 我知道在提交作业时,spark支持以下配置: spark.executor.extraJavaOptions spark.driver.extraJavaOptions 然后我们可以设置jvm ssl路径(分别设置密码): 然而,jvm要求这些路径是物理路径,当使用amazon的Spark EMR或任何其他不提供磁盘访问的Spark群集时,会导致问题,在这些群集中可以预先部署所需的文件
spark.executor.extraJavaOptions
spark.driver.extraJavaOptions
然后我们可以设置jvm ssl路径(分别设置密码):
然而,jvm要求这些路径是物理路径,当使用amazon的Spark EMR或任何其他不提供磁盘访问的Spark群集时,会导致问题,在这些群集中可以预先部署所需的文件
所以基本上我的问题是:
val rdd = MongoSpark.load(..)
与mongo建立连接已经太晚了。这与建立任何其他SSL连接相同。在密钥库中导入您的证书,并使用以下代码引用该密钥库
System.setProperty("javax.net.ssl.trustStore", "keystoreFilefullpath")
System.setProperty("javax.net.ssl.trustStorePassword", "password")
一旦设置了这些参数,Kafka SSL就可以工作了。如果您是从Spark发布,则必须使用--files选项将密钥库文件上载到驱动程序/执行程序
--文件选项也适用于在群集模式下运行的spark应用程序是的,使用EMR引导操作将证书文件从s3 bucket检索到实例。编辑spark executor/driver cmd arg以指向证书文件A,并添加jvm和spark附加jvm属性以指向证书文件。嘿,Cal,感谢您的回复。这是我正在使用的spark submit commad:--conf'spark.driver.extraJavaOptions=-Djavax.net.ssl.trustStoreType=jks-Djavax.net.ssl.trustStore=/tmp/trustfile1.jks-Djavax.net.ssl.ssl.trustStorePassword=password'--conf'spark.executor.extraJavaOptions=-Djavax.net.ssl.trustStoreType=jks-Djavax.net.net.ssl.trustStore=/tmp/trustfile1.jks-Djavax.net.ssl.trustStorePassword=password'--class-class-app.jar没错,我也在使用引导操作将文件下载到计算机中。但我还是无法让它工作。这是我收到的错误:原因:sun.security.validator.validator异常:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)找到请求目标的有效证书路径位于sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)的sun.security.validator.validator.validate(validator.java:262)
System.setProperty("javax.net.ssl.trustStore", "keystoreFilefullpath")
System.setProperty("javax.net.ssl.trustStorePassword", "password")