我遇到了这样一种情况:我需要为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;
}
}));
暂无答案!
目前还没有任何答案,快来回答吧!