Sqoop创建hive表ERROR - 遇到IOException运行create table job

问题描述 投票:1回答:4

我在已经安装了hadoop/map reduce和hive的Centos7机器上运行sqoop。我从一个教程中读到,当从RDBMS(在我的情况下是SQL Server)中导入数据到HDFS时,我需要运行下一个命令:

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true  --connect 'jdbc:sqlserver://hostname;database=databasename' --username admin --password admin123  --table tableA

一切都与这一步完美配合。下一步是创建一个hive表,它具有与RDBMS(在我的情况下为SQL Server)相同的结构并使用sqoop命令:

sqoop create-hive-table --connect 'jdbc:sqlserver://hostname;database=databasename' --username admin --password admin123  --table tableA --hivetable hivetablename --fields-terminated-by ','

但是,每当我运行上面的命令,我得到下一个error

FAILED: Execution Error, return code 1 from      
org.apache.hadoop.hive.ql.exec.DDLTask. 
com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang
/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;
18/04/01 19:37:52 ERROR ql.Driver: FAILED: Execution Error, return code 1   
from org.apache.hadoop.hive.ql.exec.DDLTask. 
com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang
/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;
18/04/01 19:37:52 INFO ql.Driver: Completed executing  
command(queryId=hadoop_20180401193745_1f3cf07d-ca16-40dd-
8f8d-1e426ecd5860); Time taken: 0.212 seconds
18/04/01 19:37:52 INFO conf.HiveConf: Using the default value passed in 
for log id: 0813b5c9-f374-4920-b8c6-b8541449a6eb
18/04/01 19:37:52 INFO session.SessionState: Resetting thread name to     
main
18/04/01 19:37:52 INFO conf.HiveConf: Using the default value passed in 
for log id: 0813b5c9-f374-4920-b8c6-b8541449a6eb
18/04/01 19:37:52 INFO session.SessionState: Deleted directory: /tmp/hive
/hadoop/0813b5c9-f374-4920-b8c6-b8541449a6eb on fs with scheme hdfs
18/04/01 19:37:52 INFO session.SessionState: Deleted directory: /tmp/hive  
/java/hadoop/0813b5c9-f374-4920-b8c6-b8541449a6eb on fs with scheme file
18/04/01 19:37:52 ERROR tool.CreateHiveTableTool: Encountered IOException 
running create table job: java.io.IOException: Hive CliDriver exited with 
status=1

我不是java专家,但我想知道你是否知道这个结果?

hadoop hive centos7 sqoop
4个回答
1
投票

我遇到了同样的问题,我把我的蜂巢降级到1.2.2并且它有效。这将解决问题。

但不确定是否要仅使用hive2来使用Sqoop。


1
投票

我遇到了同样的问题。似乎我的sqoop(1.4.7)和hive(2.3.4)版本之间存在一些兼容性问题。 问题来自于$ SQOOP_HOME / lib中的jackson- * jar文件的版本:其中一些对于hive来说太旧了,因为我们需要早于2.6的版本。

我找到的解决方案是用$ HIVE_HOME / lib中的对应文件替换$ SQOOP_HOME / lib中的以下文件:

  • 杰克逊核心 - *罐子
  • 杰克逊 - 数据绑定 - *罐子
  • 杰克逊的注解 - *罐子

它们都来自2.6+版本,这看起来很有效。不确定这是不错的做法。


0
投票

您可以将整个事件放在一个语句中,而不是编写两个不同的语句,该语句将从sql server获取数据,然后创建一个HIVE表。

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect 'jdbc:sqlserver://hostname;database=databasename' --username admin --password admin123 --table tableA --hive-import --hive-overwrite --hive-table hivetablename --fields-terminated-by ',' --hive-drop-import-delims --null-string '\\N' --null-non-string '\\N'

0
投票

为此,请检查jackson-core,jackson-databind和jackson-annotation jar。罐子应该是最新版本。通常它是由于旧版本。将这些jar放在hive lib和sqoop lib中。请同时检查libthrift jar,在hive和hbase中它应该相同并在sqoop lib中复制相同

© www.soinside.com 2019 - 2024. All rights reserved.