我正在原型化迁移由计算成本高昂的自定义查询生成的大型记录集。此查询大约需要1-2小时才能返回SQL Developer中的结果集。
我试图将这个查询传递给一个简单的Sqoop作业,其中包含JDBC到HDFS的链接。
我在日志中遇到了以下错误:
2016-02-12 10:15:50,690错误mr.SqoopOutputFormatLoadExecutor mr.SqoopOutputFormatLoadExecutor错误时,加载数据从MR作业。org.apache.sqoop.connector.hdfs.HdfsLoader.load(HdfsLoader.java:110):在加载程序运行于org.apache.sqoop.connector.hdfs.HdfsLoader.load(HdfsLoader.java:41) at org.apache.sqoop.connector.hdfs.HdfsLoader.load(HdfsLoader.java:41) at org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor$ConsumerThread.run(SqoopOutputFormatLoadExecutor.java:250) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java时发生GENERIC_HDFS_CONNECTOR_0005:Error.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)-bbc0-30c6b565d193/f5aeeecc-097e-49ab-99cc-b5032ae18a84.txt (inode 16415):文件不存在。租赁。持有人: DFSClient_NONMAPREDUCE_-1820866823_31,待定创建: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中的参数执行了一个较小的导入工作。
我很想逐表迁移整个模式表,然后只需使用Hive生成和存储我想要的记录集。这会是一个更好/更容易的解决方案吗?
发布于 2016-02-13 01:18:29
org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException 此查询大约需要1-2小时才能返回SQL Developer中的结果集。
我敢打赌,Sqoop 1.99会创建一个空的HDFS文件(即NameNode获取请求,创建文件,但尚未为其他客户端实现该文件,为Sqoop授予独家写租约,并将编写block#1的责任分配给随机DataNode),然后等待JDBC ResultSet生成一些数据.在此期间不做任何维持生命的事情。
但是,遗憾的是,在60分钟之后,NameNode只是看到租约已经过期,没有任何迹象表明Sqoop客户端还活着,所以它关闭了文件--或者说,让它看起来好像从未创建过(从来没有发生过任何刷新)。
您是否有可能在甲骨文侧加入/*+ FIRST_ROWS */提示来减少时间间隔?
https://stackoverflow.com/questions/35368918
复制相似问题