我在已经安装了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专家,但我想知道你是否知道这个结果?
我遇到了同样的问题,我把我的蜂巢降级到1.2.2并且它有效。这将解决问题。
但不确定是否要仅使用hive2来使用Sqoop。
我遇到了同样的问题。似乎我的sqoop(1.4.7)和hive(2.3.4)版本之间存在一些兼容性问题。 问题来自于$ SQOOP_HOME / lib中的jackson- * jar文件的版本:其中一些对于hive来说太旧了,因为我们需要早于2.6的版本。
我找到的解决方案是用$ HIVE_HOME / lib中的对应文件替换$ SQOOP_HOME / lib中的以下文件:
它们都来自2.6+版本,这看起来很有效。不确定这是不错的做法。
您可以将整个事件放在一个语句中,而不是编写两个不同的语句,该语句将从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'
为此,请检查jackson-core,jackson-databind和jackson-annotation jar。罐子应该是最新版本。通常它是由于旧版本。将这些jar放在hive lib和sqoop lib中。请同时检查libthrift jar,在hive和hbase中它应该相同并在sqoop lib中复制相同