Oracle SQOOP输出文件大小不均匀

Oracle SQOOP输出文件大小不均匀,oracle,hadoop,export,sqoop,Oracle,Hadoop,Export,Sqoop,我有一个巨大的新闻数据库,但每当我尝试sqoop它时,它会写入2-3个文件,而不是整个200个文件 sqoop import -D mapred.map.max.attempts=4 \ -D dfs.blocksize=1073741824 \ -D oraoop.block.allocation=RANDOM \ -D mapred.job.queue.name=default \ -m 200 \ --split-by AUTHOR_ID \ --connect j

我有一个巨大的新闻数据库,但每当我尝试sqoop它时,它会写入2-3个文件,而不是整个200个文件

sqoop import -D mapred.map.max.attempts=4 \
  -D dfs.blocksize=1073741824 \
  -D oraoop.block.allocation=RANDOM \
  -D mapred.job.queue.name=default \
  -m 200 \
  --split-by AUTHOR_ID \
  --connect jdbc:oracle:thin:@$127.0.0.1:1521:SRDB \
  --username abc \
  --password 1234 \
  --table L.ARTICLE \
  --null-string '' \
  --null-non-string '' \
  --target-dir /data/output1.0
  --outdir /tmp/output
但是,当我运行它时,我得到的是202个文件,而不是200个。其中只有3个文件有数据,其余的输出文件是空的

我做错了什么?任何暗示都将不胜感激


谢谢你

你在
作者ID

最可能的原因-

AUTHOR\u ID
(在其上拆分)的分布不均匀

在内部,sqoop正在获取用于拆分列的最小值和最大值

SELECT MIN(AUTHOR_ID) and MAX(AUTHOR_ID) FROM L.ARTICLE
假设上述查询的输出为:

1,20000
现在,基于这些值,它将进行如下范围查询:

SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=1 AND AUTHOR_ID<100
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=100 AND AUTHOR_ID<200
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=200 AND AUTHOR_ID<300
.
. 
.
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=19900 AND AUTHOR_ID<20000

映射器0将sqoop 1记录,映射器199将sqoop 7记录。你可以用大量的记录推断这个案例

您在
作者ID

最可能的原因-

AUTHOR\u ID
(在其上拆分)的分布不均匀

在内部,sqoop正在获取用于拆分列的最小值和最大值

SELECT MIN(AUTHOR_ID) and MAX(AUTHOR_ID) FROM L.ARTICLE
假设上述查询的输出为:

1,20000
现在,基于这些值,它将进行如下范围查询:

SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=1 AND AUTHOR_ID<100
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=100 AND AUTHOR_ID<200
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=200 AND AUTHOR_ID<300
.
. 
.
SELECT * FROM L.ARTICLE WHERE AUTHOR_ID>=19900 AND AUTHOR_ID<20000

映射器0将sqoop 1记录,映射器199将sqoop 7记录。你可以用大量的记录推断这个案例

非常感谢你!写得很好。在这种情况下,我如何确保同一作者ID不会出现在多个文件中?@Gon我没有得到它。每个文件都是通过对AUTHOR_ID的某个范围查询创建的,每个查询都是不同的,因此在不同的文件中会有不同的AUTHOR_ID。Sqoop已经提供了这种行为。假设mapper#0将负责(AUTHOR_ID>=1和AUTHOR)_ID@devツ, 例如,有3个AUTHOR_ID,而AUTHOR_ID不是表的键。当我使用sqoop导出它时,我希望它在200个文件中,并且我希望相同的AUTHOR_ID在同一个文件中,而不是文件1中的1个AUTHOR_ID和文件2中的2个AUTHOR_ID。我本想通过拆分来完成,但由于它会导致分布不均匀的问题,我认为OnDeing如果有其他方法。非常感谢!写得很好。在这种情况下,我如何确保相同的作者ID不会出现在多个文件中?@Gon我没有得到它。每个文件都是通过对作者ID的一些范围查询创建的,每个查询都是不同的,因此在不同的文件中会有不同的作者ID。Sqoop已经提供了假设映射器0将处理(AUTHOR\u ID>=1和AUTHOR)_ID@devツ, 例如,有3个AUTHOR_ID,而AUTHOR_ID不是表的键。当我使用sqoop导出它时,我希望它在200个文件中,并且我希望相同的AUTHOR_ID在同一个文件中,而不是文件1中的1个AUTHOR_ID和文件2中的2个AUTHOR_ID。我本想通过拆分来完成,但由于它会导致分布不均匀的问题,我认为如果有别的办法,我会打电话给你。