我正在对由计算成本高昂的自定义查询生成的大型记录集的迁移进行原型设计。此查询大约需要1-2小时才能在SQL Developer
中返回结果集我正在尝试将此查询传递给一个简单的Sqoop
作业,其中包含JDBC
到HDFS
的链接
我在日志中遇到以下错误:
2016-02-12 10:15:50,690 ERROR mr.SqoopOutputFormatLoadExecutor [org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor $ ConsumerThread.run(SqoopOutputFormatLoadExecutor.java:257)]从MR作业加载数据时出错。 org.apache.sqoop.common.SqoopException:GENERIC_HDFS_CONNECTOR_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) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.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(intode 16415):文件不存在。 [租。持有人:DFSClient_NONMAPREDUCE_-1820866823_31,pendingcreates:1]
当我尝试检查.txt
中生成的hdfs
个文件时,它们是空的。
有没有人遇到并解决了这个问题?另外,我注意到Sqoop shell
的额外烦恼。例如,我无法检查作业状态,因为它总是返回UNKNOWN。
我正在使用sqoop-1.99.6-bin-hadoop200
Hadoop 2.7.2 (Homebrew install)
。我正在使用Oracle 11
查询远程Generic JDBC Connector
数据库。
我已使用schema/table
create job
参数执行了较小的导入作业
我很想按表迁移整个架构表,然后只使用Hive生成并存储我想要的记录集。这会是一个更好/更容易的解决方案吗?
答案 0 :(得分:1)
org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException
此查询大约需要1-2小时才能在SQL中返回结果集 显影剂
我敢打赌,Sqoop 1.99会创建一个空的HDFS文件(即NameNode获取请求,创建文件但尚未为其他客户端实现该文件,为Sqoop授予独占写入租约,并分配责任将块#1写入随机DataNode)然后等待JDBC ResultSet生成一些数据......同时不进行任何keep-alive。
但是,唉, 60分钟后,NameNode只看到租约已过期而没有任何Sqoop客户端处于活着状态的迹象,所以它会关闭文件 - 或者更确切地说,就像它一样从未创建(没有发生过冲洗)。
你有可能通过Oracle方面的/*+ FIRST_ROWS */
提示减少时间间隔吗?