如何通过代码而不是spark submit为spark作业提供keytab

wydwbb8l  于 2021-05-19  发布在  Spark
关注(0)|答案(0)|浏览(1024)

我遇到了这样一种情况:我需要为javaspark作业设置keytab和principal,以便通过代码访问hbase。在spark提交中使用keytab和principal选项是可行的,但我需要通过代码来实现这一点。使用以下选项似乎不起作用。我得到一个选项3和选项3的连接关闭异常 client cannot authenticate via:[token, kerberos] 前两个错误。第三个选项似乎很接近,但不确定为什么会关闭连接。

sparkconf = new SparkConf().setAppName("Hbase With Spark")
        .set("spark.kerberos.principal", principalValue)
        .set("spark.kerberos.keytab", keytabFile);

方案2:

sparkconf = new SparkConf().setAppName("Hbase With Spark")
        .set("spark.yarn.principal", principalValue)
        .set("spark.yarn.keytab", keytabFile);

方案3:

conf = HBaseConfiguration.create();
conf.set("hbase.master.keytab.file",keytabFile)
conf.set("hbase.regionserver.keytab.file",keytabFile);
UserGroupInformation ugi;
ugi = UserGroupInformation.getLoginUser();
ugi.setConfiguration(conf);
ugi.loginUserFromKeytab(principalValue, keytabFile);
ugi.getLoginUser().doAs((new PrivilegedExceptionAction<SQLContext>() {
                    public SQLContext run() throws Exception {

                        sparkconf = new SparkConf().setAppName("Hbase With Spark");
                        jsc = new JavaSparkContext(sparkconf);
                        sqlContext = new org.apache.spark.sql.SQLContext(jsc);  
Dataset<Row> dfEmp = sqlContext.read().format("org.apache.hadoop.hbase.spark")
                                .option("hbase.columns.mapping", sqlMapping)
                                .option("hbase.table", "employee").load();
// This is useful when issuing SQL text queries directly against the sqlContext object.
                        dfEmp.registerTempTable("empdata");  
                        dfEmp.show();
                        return sqlContext;
                    }
                }));

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题