使用如下命令:
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
不确定空值来自何处,因为配置单元表中没有空值。
供参考,来自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)
2条答案
按热度按时间plupiseo1#
魔多是一个Hive视图而不是一张table吗?
当一个为sqoop指定的对象--table是一个视图时,我遇到了完全相同的问题。descripe命令只打印该视图的列,所以它不显示它是否是视图。你可以跑
SHOW CREATE TABLE MORDOR
要确认这是一个视图或表(“show create table”也适用于视图,因为没有像show create view
").sqoop文档明确声明支持从视图导入sqoop,但是视图的sqoop导出上的sqoop文档是静默的—没有说明是否支持它—可能是sqoop或hms错误。sqoop可能不喜欢hms返回的视图。所以不排除可能是hms的错误。
goqiplq22#
再看看日志:你没看到什么荒谬的东西吗?
正在尝试连接到uri为thrift://$hostname:$port的metastore缓存已释放连接jdbc:oracle:thin:@$host:$port/$alias/$schema
对。shell尚未解析环境变量(或shell变量)。尽管我不确定metastoreuri发生了什么(它是在hadoop conf文件中定义的,没有shell/env变量…)
那是因为你把它们用单引号括起来了。
--connect jdbc:oracle:thin:'@$HOST:$PORT/$ALIAS'
所以你有一个三步解决方案:只要希望shell解析其中的变量,就使用双引号
学习脚本shell
了解指针、空指针,以及当一些错误代码无法检查对象变量是否已正确初始化(即。
NullPointerException
(java语言)