Sqoop导出工具到Oracle空指针异常
使用如下命令:Sqoop导出工具到Oracle空指针异常,oracle,hadoop,hive,sqoop,Oracle,Hadoop,Hive,Sqoop,使用如下命令: sqoop export \ --connect jdbc:oracle:thin:'@somehostname.com:1521/prod1_adhoc' \ --username fbaggins \ --P \ --table MIDDLEEARTH \ --hcatalog-database MORDOR \ --hcatalog-table MORDOR \ --columns IS_DWARF,IS_ELF \ --verbose 导致此错误的原因: 16/08/2
sqoop export \
--connect jdbc:oracle:thin:'@somehostname.com:1521/prod1_adhoc' \
--username fbaggins \
--P \
--table MIDDLEEARTH \
--hcatalog-database MORDOR \
--hcatalog-table MORDOR \
--columns IS_DWARF,IS_ELF \
--verbose
导致此错误的原因:
16/08/25 10:08:31 INFO hive.metastore: Trying to connect to metastore with URI thrift://somehostname.com:1521
16/08/25 10:08:31 INFO hive.metastore: Connected to metastore.
16/08/25 10:08:31 DEBUG util.ClassLoaderStack: Restoring classloader: sun.misc.Launcher$AppClassLoader@56aac163
16/08/25 10:08:31 ERROR tool.ExportTool: Encountered IOException running export job: java.io.IOException: java.lang.NullPointerException
16/08/25 10:08:31 DEBUG manager.OracleManager$ConnCache: Caching released connection for jdbc:oracle:thin:@somehostname.com:1521/prod1_adhoc/fbaggins
不确定null来自何处,因为配置单元表中没有null
供参考,来自hive:
hive> describe MORDOR;
OK
IS_DWARF bigint
IS_ELF string
来自Oracle:
describe MORDOR
Name Null Type
----------------------- ---- -----------
IS_DWARF NUMBER(12)
IS_ELF VARCHAR2(3)
再看看日志:你没看到任何荒谬的东西吗 正在尝试使用URI thrift://$HOSTNAME:$PORT连接到元存储 缓存jdbc:oracle:thin:@$HOST:$PORT/$ALIAS/$SCHEMA的已发布连接 对血腥的环境变量(或外壳变量)尚未由外壳解析。虽然我不确定MetastoreURI发生了什么(它是在Hadoop conf文件中定义的,没有shell/env变量…) 这是因为您将它们括在单引号中
--连接jdbc:oracle:thin:'@$HOST:$PORT/$ALIAS'
因此,您有一个三步解决方案:
NullPointerException
)时会发生什么情况魔多是蜂巢视图而不是桌子吗 当为sqoop指定的对象--table是视图时,我会遇到完全相同的问题。descripe命令只打印该视图的列,因此它不会显示该视图是否为视图。您可以运行
SHOW CREATE TABLE MORDOR
来确认这是一个视图或表(“SHOW CREATETABLE”也适用于视图,因为没有像“SHOW CREATE view
”这样的单独命令
SQOOP文档明确声明支持从视图导入SQOOP,但视图的SQOOP导出上的SQOOP文档是静默的-未说明是否支持-可能是SQOOP或HMS错误。Sqoop可能不喜欢HMS为视图返回的内容。因此不排除它可能是一个HMS错误。“NullPointerException…不确定null来自何处,因为Hive表中没有null”-您的幽默感让我想起了Monty Python(或者更合适的是Monty Java)Samson,我特意加入变量,以保护在公共论坛中共享敏感数据。我向您保证,这些空间中的内容是一个实际值(例如。thrift://db21.mydomain.com:1521,和所有其他空间一样)。甚至我也面临类似的问题。我在Sqoop导出作业中使用配置单元视图。你的变通方法是什么?您是否创建了配置单元表?在我的例子中,我在配置单元hbase表上创建了配置单元视图,因为我们有Struct数据类型。如有任何建议,将不胜感激。谢谢。我们必须从表导出,而不是从视图导出。我不知道有什么解决办法。