我正在制作一个大型记录集的迁移原型,该记录集是由计算开销巨大的自定义查询生成的。此查询大约需要1-2小时才能在SQLDeveloper中返回结果集
我试图将此查询传递给一个简单的 Sqoop
带链接的作业 JDBC
至 HDFS
我在日志中遇到以下错误:
2016-02-12 10:15:50690错误mr.sqoopoutputformatloadexecutor[org.apache.sqoop.job.mr.sqoopoutputformatloadexecutor$consumerthread.run(sqoopoutputformatloadexecutor)。java:257)]从mr作业加载数据时出错。org.apache.sqoop.common.sqoopexception:generic\u hdfs\u connector\u 0005:在org.apache.sqoop.connector.hdfs.hdfsloader.load(hdfsloader)上运行加载程序时出错。java:110)在org.apache.sqoop.connector.hdfs.hdfsloader.load(hdfsloader。java:41)在org.apache.sqoop.job.mr.sqoopoutputformatloadexecutor$consumerthread.run(sqoopoutputformatloadexecutor。java:250)在java.util.concurrent.executors$runnableadapter.call(executors。java:511)在java.util.concurrent.futuretask.run(futuretask。java:266)位于java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor。java:1142)在java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor。java:617)在java.lang.thread.run(线程。java:745)原因:org.apache.hadoop.ipc.remoteexception(org.apache.hadoop.hdfs.server.namenode.leaseexpiredexception):无租约/user/username/schema/recordset/.72dee005-3f75-4a95-bbc0-30c6b565d193/f5aeeecc-097e-49ab-99cc-b5032ae18a84.txt(inode 16415):文件不存在[租赁。持有人:dfsclient\u nonmapreduce\u1820866823\u 31,pendingcreates:1]
当我试图检查结果 .txt
“我的”中的文件 hdfs
,它们是空的。
有人遇到并解决了这个问题吗?同时,我也注意到了 Sqoop shell
. 例如,我无法检查作业状态,因为它总是返回未知。
我正在使用 sqoop-1.99.6-bin-hadoop200
与 Hadoop 2.7.2 (Homebrew install)
. 我在查询遥控器 Oracle 11
数据库与 Generic JDBC Connector
.
我已经使用 schema/table
中的参数 create job
我很想一个表一个表地迁移整个模式,然后使用配置单元生成并存储所需的记录集。这是一个更好/更简单的解决方案吗?
1条答案
按热度按时间kokeuurv1#
org.apache.hadoop.hdfs.server.namenode.leaseexpiredexception异常
此查询大约需要1-2小时才能在SQLDeveloper中返回结果集
我敢打赌,sqoop1.99会创建一个空的hdfs文件(即namenode获取请求,创建文件但还没有为其他客户机具体化它,为sqoop授予独占写入租约,并将块#1的写入责任分配给随机datanode),然后等待jdbc resultset生成一些数据。。。同时不做任何事情来维持生命。
但遗憾的是,60分钟后,namenode只看到租约已过期,没有任何sqoop客户机处于活动状态的迹象,因此它关闭了文件——或者更确切地说,使其看起来好像从未创建过(从未发生过刷新)。
有没有可能用一个
/*+ FIRST_ROWS */
甲骨文方面的暗示?