首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQOOP输出文件大小不均匀

SQOOP输出文件大小不均匀
EN

Stack Overflow用户
提问于 2017-02-08 20:37:11
回答 1查看 648关注 0票数 0

我有一个庞大的新闻数据库,但是每当我试图对它进行sqoop操作时,它都会写到2-3个文件,而不是整个200个文件。

代码语言:javascript
复制
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个文件有数据,其余的输出文件是空的。

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 21:18:29

你在AUTHOR_ID上分裂

最有可能的原因-

AUTHOR_ID(您正在分割的)不是均匀分布的。

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

代码语言:javascript
复制
SELECT MIN(AUTHOR_ID) and MAX(AUTHOR_ID) FROM L.ARTICLE

假设上面的查询的输出是:

代码语言:javascript
复制
1,20000

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

代码语言:javascript
复制
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

(您可以在sqoop命令本身中观察到这一点。在sqoop命令中添加--verbose,以便您可以看到扩展的日志。)

现在如果数据不是均匀分布的,那么只有很少的映射器会获取记录,而其他的则是空的。

例如,如果在您的数据中有以下情况:

代码语言:javascript
复制
author_id record 
1 record1
19900 record19900  
19901 record19901 
19902 record19902 
19903 record19903 
19904 record19904 
19905 record19905
19906 record19906

mapper#0将记录sqoop 1,mapper#199将记录sqoop 7。你可以用大量的记录来推断这个案例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42123122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档