在使用FI的过程中确实有着很多的坑,而且加上FI的产品文档说明又不是很完善,这就给我们开发人员造成了很大的误区,所以不能用常规的思维去解决问题。这里我还是想说,华为的产品有待提高,太坑了。我们公司在客户那里做spark大数据开发服务,但是客户那面使用FI集群是安全模式,并且版本还跟我们开发的项目版本不一致。版本不一致这个好解决,,但是安全模式这一块确实给我卡主了,整了大概半个月才整好。难得不是技术上,也不是安全模式上面,难的是人上面。连华为内部的工作人员都没搞明白安全模式到底是什么东西还来指导我该怎么做,就是因为他们内部技术人员的指导我们一起跑偏了整整半个月,因为都是客户我也不好说什么,这要是自己家公司的技术人员,高低我得损他一波。华为不是号称国货之光吗?国内技术一流吗?为啥内部的工作人员这么不靠谱。吐槽了这么多,我说一下遇到的是什么问题!!!!(气死我了)
我们遇到的环境是在不接触集群内部服务器的情况下执行spark任务(集群是安全模式),我们有一个可以单向访问集群内部的服务器,但是集群内部环境访问不了这个外部的服务器。这个就大大的增加我们开发的难度。
安全认证是需要将认证文件上传至服务器的每一个节点上面的,但是华为的技术人员信誓旦旦的跟我说,不需要将安全认证文件放置到每个节点上面,这个我就犯难了,各种方法各种实验,华为的技术人员也在一起实验,将文件放在hdfs上面,或者使用--flie这种参数啥的,都不行。后来华为的技术人员确实不行了,让我拨打客服电话问问,卧槽,你TM的早说 啊,,老子跟你在这费半天劲,真是SB,你们华为自己开发的产品,然后自己demo跑不通,这不是有病嘛。靠谁都不如靠自己,自己研究吧,从头开始。一下是FI的产品文档中对FI集群内部的安全模式的操作说明
亲测不好使,前提是在集群内部不放置安全认证文件的情况下,在集群外部的服务上执行spark-sbumit指令:会报
Can't get kerberos realm 这个错误,但是不要被这错误所迷惑了,这个是告诉我们找不到认证范围,这个时候很多小伙伴就会去想是不是密钥的路径不对这类问题了,其实不是,报这个错的问题是没有匹配到相应的krb5.conf这个配置文件,这个时候需要我们将相应的配置文件上传到所有的服务器上面,然后在spark.yarn.cluster.driver.extraJavaOptions和spark.executor.extraJavaOptions配置项中添加
-Djava.security.krb5.conf=绝对路径/krb5.conf,
-Djava.security.auth.login.config=绝对路径/jaas.conf
并且jaas.conf要使用绝对路径,不要写相对路径,在测试中发现,会报地址无效
这里是我执行任务时的配置:
--conf "spark.yarn.cluster.driver.extraJavaOptions= -Dlog4j.configuration=hadoopclient/Spark2x/spark/conf/log4j.properties -Djetty.version=x.y.z -Dzookeeper.server.principal=zookeeper/hadoop.hadoop.com -Djava.security.krb5.conf=/opt/sparkconf/krb5.conf -Djava.security.auth.login.config=/opt/sparkconf/jaas.conf -Dorg.xerial.snappy.tempdir=hadoopclient/Spark2x/tmp -Dcarbon.properties.filepath=hadoopclient/Spark2x/spark/conf/carbon.properties -Djava.io.tmpdir=hadoopclient/Spark2x/tmp" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=.__hadoop_conf__/log4j-executor.properties -Djava.security.krb5.conf=/opt/sparkconf/krb5.conf -Djava.security.auth.login.config=/opt/sparkconf/jaas.conf -Dcarbon.properties.filepath=./__spark_conf__/__hadoop_conf__/carbon.properties -Djdk.tls.ephemeralDHKeySize=2048"
大家可以看着参考一下
温馨提示:这里最好都要使用绝对路径,在使用相对路径的时候回报找不到文件,还有就是要将所依赖的jar换成FI服务器上面的jar包。
但是FI的产品文档中并没有说明要添加-Djava.security.krb5.conf这个配置项,所以如果全部都按照FI的产品文档来的话,一定执行不起来任务,真坑,那到底是安不按照产品文档来开发呢?答案是要的,因为FI他们把一些开源的依赖jar包源码改了如果你不按照他们的文档开发那么你就等着重新开始吧。 这只是一个小坑,后面还有更多的坑,都是FI自己给自己人挖的,如果大家在使用FI的产品的时候相信我,你会有新的大陆发现,有些坑是你都想想不到的。