【发布时间】:2019-06-18 02:46:15
【问题描述】:
我想写一个UDF从HBase获取一些东西,我用它来设置token到hiveconf,但是我不能用hiveconf连接到HBase,它会抛出NullPointException
我尝试了很多方法,比如:https://www.programcreek.com/java-api-examples/index.php?api=org.apache.hadoop.hbase.security.token.TokenUtil
但它仍然抛出 NullPointException
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.security.token.AuthenticationTokenIdentifier;
import org.apache.hadoop.hbase.security.token.TokenUtil;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext;
import org.apache.hadoop.hive.ql.hooks.HookContext;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
public class HbaseTokenFetcherHook implements ExecuteWithHookContext{
private static final Log LOG = LogFactory.getLog(HbaseTokenFetcherHook.class);
@Override
public void run(HookContext hookContext) throws Exception {
HiveConf hiveConf = hookContext.getConf();
/* If required */
hiveConf.set(“zookeeper.znode.parent”, "/hbase-secure");
try {
UserGroupInformation.setConfiguration(hiveConf);
Connection tokenConnection = ConnectionFactory.createConnection(hiveConf);
Token<AuthenticationTokenIdentifier> token = TokenUtil.obtainToken(tokenConnection, User.getCurrent());
String urlString = token.encodeToUrlString();
hiveConf.set(“HBASE_AUTH_TOKEN”, urlString);
} catch (IOException | InterruptedException e) {
LOG.error("Error while fetching token for hbase"
+ e.getMessage(), e);
}
}
}
它抛出异常:
Token<AuthenticationTokenIdentifier> token = TokenUtil.obtainToken(tokenConnection, User.getCurrent());
错误信息: 引起:java.lang.NullPointException 在 org.apache.hadoop.hbase.zookeeper.ZookeeperWatcher.getMetaReplicaNodes(ZookeeperWatcher.java:497) 在 org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:558)
【问题讨论】: