最近在 SparkStreaming 和 kafka 作业开发时,遇到了 SSL 证书读取失败的错误,如图:
可以看到,报错原因是 kafka 在初始化 consumer 时读取证书失败。kafka 的配置中有如下几个 SSL 相关配置:ssl.keystore.type
ssl.truststore.type
ssl.keystore.location
ssl.truststore.location
ssl.keystore.password
ssl.truststore.password
一般情况,如果在 local 模式下运行 spark 任务时,ssl.keystore.location(下文简称 SKL)和 ssl.truststore.location(下文简称 STL)填写本地路径即可。但是当以 yarn 模式下运行,填 HDFS 路径时就会报错,从错误栈中看出只能读取本地文件,因为最终调用 java.io.File...的接口。
解决办法如下:
1. 用命令行提交时,则用如下的命令:spark-submit --class xxx \
--files hdfs://xxx/,hdfs://xxx/ \
./xxx.jar
这个时候 STL 和 SKL 一定要填相对路径,因为--files 会把文件分发到每个 executor 的工作目录下,也就是每个 container 的目录下,换句话说就是当前的 distributed cache,所以此时的