gpt4 book ai didi

hadoop - Sqoop-2 在使用 sqoop shell 进行自定义查询时无法对单个节点进行大量导入

转载 作者:可可西里 更新时间:2023-11-01 16:47:53 26 4
gpt4 key购买 nike

我正在对由计算量大的自定义查询生成的大型记录集进行原型(prototype)迁移。此查询大约需要 1-2 小时才能在 SQL Developer 中返回结果集

我正在尝试将此查询传递给一个简单的 Sqoop 作业,其中包含 JDBCHDFS 的链接

我在日志中遇到了以下错误:

2016-02-12 10:15:50,690 ERROR mr.SqoopOutputFormatLoadExecutor [org.apache.sqoop.job.mr.SqoopOutputFormatLoadExecutor$ConsumerThread.run(SqoopOutputFormatLoadExecutor.java:257)] Error while loading data out of MR job. org.apache.sqoop.common.SqoopException: GENERIC_HDFS_CONNECTOR_0005:Error occurs during loader run at org.apache.sqoop.connector.hdfs.HdfsLoader.load(HdfsLoader.java:110) 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.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) Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /user/username/schema/recordset/.72dee005-3f75-4a95-bbc0-30c6b565d193/f5aeeecc-097e-49ab-99cc-b5032ae18a84.txt (inode 16415): File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_-1820866823_31, pendingcreates: 1]

当我尝试检查我的 hdfs 中生成的 .txt 文件时,它们是空的。

有没有人遇到并解决了这个问题?此外,我注意到 Sqoop shell 存在其他问题。例如,我无法检查作业状态,因为它总是返回 UNKNOWN。

我正在使用 sqoop-1.99.6-bin-hadoop200Hadoop 2.7.2(Homebrew 安装)。我正在使用 Generic JDBC Connector 查询远程 Oracle 11 数据库。

我已经在 create job 中使用 schema/table 参数执行了一个较小的导入作业

我很想把整个schema逐表迁移,然后直接使用Hive生成并存储我想要的记录集。这是更好/更简单的解决方案吗?

最佳答案

org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException

This query takes approximately 1-2 hours to return a result set in SQL Developer

我敢打赌 Sqoop 1.99 会创建一个空的 HDFS 文件(即 NameNode 收到请求,创建文件但还没有为其他客户端实现它,为 Sqoop 授予独占写租约,并分配责任将 block#1 写入随机 DataNode) 然后等待 JDBC ResultSet 生成一些数据...同时不执行任何保持事件。

但是,唉,60 分钟后,NameNode 只是看到租约已经过期,而没有任何 Sqoop 客户端还活着的迹象,所以它关闭了文件——或者更确切地说,让它好像从未创建(从未发生过刷新)。

是否有机会在 Oracle 端使用 /*+ FIRST_ROWS */ 提示来减少时间流逝?

关于hadoop - Sqoop-2 在使用 sqoop shell 进行自定义查询时无法对单个节点进行大量导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com