[
https://issues.apache.org/jira/browse/STORM-2906?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jungtaek Lim updated STORM-2906:
--------------------------------
Reporter: Santhosh B Gowda (was: Jungtaek Lim)
> HDFS and HBase bolt on the same worker fails with GSS no valid credentials
> exception
> ------------------------------------------------------------------------------------
>
> Key: STORM-2906
> URL: https://issues.apache.org/jira/browse/STORM-2906
> Project: Apache Storm
> Issue Type: Bug
> Components: storm-hbase
> Reporter: Santhosh B Gowda
> Assignee: Jungtaek Lim
> Priority: Critical
> Labels: pull-request-available
> Time Spent: 10m
> Remaining Estimate: 0h
>
> We have observed that the topology which has HDFS and HBase bolts fails with
> GSS exception no valid credentials. It doesn't occur when HDFS and HBase
> bolts are running in different workers.
> After some investigation I found the cause,
> [https://github.com/apache/storm/blob/6402d436a8700eb743ccd84f7f562c51d8cf9be7/external/storm-hbase/src/main/java/org/apache/storm/hbase/common/Utils.java#L39-L65]
>
> {code:java}
> public static HTable getTable(UserProvider provider, final Configuration
> config, final String tableName)
> throws IOException, InterruptedException {
> UserGroupInformation ugi;
> if (provider != null) {
> ugi = provider.getCurrent().getUGI();
> LOG.debug("Current USER for provider: {}", ugi.getUserName());
> } else {
> // autocreds puts delegation token into current user UGI
> ugi = UserGroupInformation.getCurrentUser();
> LOG.debug("UGI for current USER : {}", ugi.getUserName());
> for (Token<? extends TokenIdentifier> token : ugi.getTokens()) {
> LOG.debug("Token in UGI (delegation token): {} / {}",
> token.toString(),
> token.decodeIdentifier().getUser());
> // use UGI from token
> ugi = token.decodeIdentifier().getUser();
> ugi.addToken(token);
> }
> }
> return ugi.doAs(new PrivilegedExceptionAction<HTable>() {
> @Override public HTable run() throws IOException {
> return new HTable(config, tableName);
> }
> });
> }{code}
> UGI is always selected from last element of tokens, and unfortunately tokens
> have HDFS delegation tokens as well. So we should check kind of token
> (HBASE_AUTH_TOKEN) before leveraging it.
> If nimbus can distribute tokens based on worker, then it will not occur when
> HDFS and HBase bolts are running different workers.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)