Spark和Flink均为分布式计算引擎,在使用yarn作为资源调度器提交任务并且连接拥有Kerberos认证的Hbase时,同时面临着认证文件分发与获取的问题。两者的解决方案也是类似的,先在driver端加载认证文件,存储到分布式缓存,然后再Executor端获取文件目录进行认证。
Spark on Yarn
- driver端
sparkSession.sparkContext.addFile(keytabPath)
sparkSession.sparkContext.addFile(krb5Path)
keytabPath为keytab文件的在driver的绝对目录
krb5Path为krb5.conf文件在driver的绝对目录
- executor端
val krb5Path=SparkFiles.get(krb5FileName)
val keytabPath=SparkFiles.get(keytabFileName)
krb5FileName为krb5.conf文件名
keytabFileName为keytab文件名
krb5Path和keytabPath则是executor端配置文件的目录
Flink on Yarn
- driver端
env.registerCachedFile(krb5Path,krb5FileName)
env.registerCachedFile(keytabPath,keytabName)
krb5FileName为krb5.conf文件别名
keytabFileName为keytab文件别名
krb5Path和keytabPath则是driver端配置文件的绝对目录(也可以使用hdfs目录)
- executor端
val keytabPath=getRuntimeContext.getDistributedCache.getFile(keyTabFileName).getAbsolutePath
val krb5Path=getRuntimeContext.getDistributedCache.getFile(krb5FileName).getAbsolutePath
krb5FileName为krb5.conf文件别名
keytabFileName为keytab文件别名
krb5Path和keytabPath则是executor端配置文件的绝对目录