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

时间:2018-04-02 02:07:26

标签: hadoop hive centos7 sqoop

我在已安装hadoop/map简化和配置单元的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专家,但我想知道您是否知道这个结果?

4 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题,但我已将配置单元降级到1.2.2,它可以正常工作。那将解决问题。

但不确定是否只将hq2与Sqoop一起使用。

答案 1 :(得分:1)

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

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

  • jackson-core-*。jar
  • jackson-databind-*。jar
  • jackson-annotations-*。jar

它们全部来自2.6+版本,这似乎可行。不过,不确定这是一个好习惯。

答案 2 :(得分: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'

答案 3 :(得分:0)

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