从这2个项目提供的wiki中,我发现他们似乎做了类似的工作.但必须有一些差异,或者不需要2.
那么有什么不同,以及相互选择的实用建议是什么.
多谢!
我需要编写自定义UDF来从Hbase表进行数据查找.
注意:我已经用HIVE进行了单元测试.它似乎工作.
但是当我使用相同的UDF Beeline时,它失败了.默认情况下,Cloudera限制模拟并仅允许hive用户在Beeline中运行查询.在作业启动时,YarnChild正在设置以下委托令牌.
我想添加令牌(Kind:HBASE_AUTH_TOKEN)来处理Hbase.
Kind: mapreduce.job
Kind: HDFS_DELEGATION_TOKEN
Kind: kms-dt
Run Code Online (Sandbox Code Playgroud)
我研究并发现了HbaseStorageHandler如何使用委托令牌(即HBASE_AUTH_TOKEN)用于Hbase.所以我使用了相同的功能集,但它也没有用.
来自HbasestorageHandler的函数(获取令牌到Job):
private void addHBaseDelegationToken(Configuration conf, JobConf jconf) throws IOException {
if (User.isHBaseSecurityEnabled(conf)) {
try {
logger.info("isHbaseSecurityEnabled :True ");
User e = User.getCurrent();
logger.info("isHbaseSecurityEnabled :User ==> " + e.toString());
Token authToken = getAuthToken(conf, e);
logger.info("isHbaseSecurityEnabled :AuthToken==> "+authToken.toString());
Job job = new Job(conf);
if(authToken == null) {
UserGroupInformation ugi = UserGroupInformation.getLoginUser();
ugi.setAuthenticationMethod(UserGroupInformation.AuthenticationMethod.KERBEROS);
e.obtainAuthTokenForJob(jconf);
} else {
logger.info("authToken is not null"+authToken.toString());
job.getCredentials().addToken(authToken.getService(), authToken);
}
logger.info("obtained Token /....");
} catch …Run Code Online (Sandbox Code Playgroud)