You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Oleksiy Sayankin (JIRA)" <ji...@apache.org> on 2018/08/09 07:50:00 UTC

[jira] [Commented] (HIVE-20348) Hive HCat does not create a proper "client" on kerberos cluster without hive metastore

    [ https://issues.apache.org/jira/browse/HIVE-20348?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16574428#comment-16574428 ] 

Oleksiy Sayankin commented on HIVE-20348:
-----------------------------------------

*ROOT-CAUSE*

Class {{org.apache.hive.hcatalog.mapreduce.Security}} executes:

{code}
        hiveToken = HCatUtil.extractThriftToken(client.getDelegationToken(ugi.getUserName(), ugi.getUserName()), tokenSignature);
{code}

So {{HCatUtil.extractThriftToken()}} expects delegation token not to be {{null}} here. Consider {{client.getDelegationToken()}}:

{code}
  @Override
  public String getDelegationToken(String owner, String renewerKerberosPrincipalName) throws
  MetaException, TException {
    // This is expected to be a no-op, so we will return null when we use local metastore.
    if (localMetaStore) {
      return null;
    }
    return client.get_delegation_token(owner, renewerKerberosPrincipalName);
  }
{code}

We see that there is no delegation token when HMS is in local mode ({{getDelegationToken()}} returns {{null}}) and this causes NPE.

*SOLUTION*

Request for delegation token only if HMS not in local mode:

{code}
if (hiveToken == null && !client.isLocalMetaStore()) {
{code}

> Hive HCat does not create a proper "client" on kerberos cluster without hive metastore
> --------------------------------------------------------------------------------------
>
>                 Key: HIVE-20348
>                 URL: https://issues.apache.org/jira/browse/HIVE-20348
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Oleksiy Sayankin
>            Assignee: Oleksiy Sayankin
>            Priority: Major
>         Attachments: HIVE-20348.1.patch
>
>
> *STEPS TO REPRODUCE:*
> 1. Configure Hive to use embedded Metastore (do not specify {{hive.metastore.uris}} in {{hive-site.xml}});
> 2. Create a database and a table in MySQL:
> {code:java}
> mysql -uroot -p123456 -e "CREATE DATABASE test;CREATE TABLE test.test (id INT);INSERT INTO test.test VALUES (1),(2),(3)"
> {code}
> 3. Create a table in Hive:
> {code:java}
> hive -e "CREATE TABLE default.test (id INT)"
> {code}
> 4. Run Sqoop import command:
> {code:java}
> sqoop import --connect 'jdbc:mysql://localhost:3306/test' --username root --password 123456 --table test  --hcatalog-database "default" --hcatalog-table "test" --verbose -m 1
> {code}
> *ACTUAL RESULT:*
> Sqoop import command fails with an exception:
> {code:java}
> 18/08/08 01:07:09 ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hive.hcatalog.common.HCatException : 2001 : Error setting output information. Cause : java.lang.NullPointerException
>     at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:220)
>     at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:70)
>     at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureHCat(SqoopHCatUtilities.java:361)
>     at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureImportOutputFormat(SqoopHCatUtilities.java:783)
>     at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:98)
>     at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:259)
>     at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:689)
>     at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:118)
>     at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:498)
>     at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:606)
>     at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
>     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
>     at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
>     at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
>     at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
>     at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
> Caused by: java.lang.NullPointerException
>     at org.apache.hadoop.security.token.Token.decodeWritable(Token.java:256)
>     at org.apache.hadoop.security.token.Token.decodeFromUrlString(Token.java:275)
>     at org.apache.hive.hcatalog.common.HCatUtil.extractThriftToken(HCatUtil.java:351)
>     at org.apache.hive.hcatalog.mapreduce.Security.handleSecurity(Security.java:139)
>     at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:214)
>     ... 15 more
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)