我在已安装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专家,但我想知道您是否知道这个结果?
答案 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中的以下文件:
它们全部来自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中复制相同