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)