如果源表上有主键,SQOOP导入将不会生成倾斜数据...如果表中没有定义主键,我们必须使用--split-by参数来分割记录多个映射器。
根据我们选择的列--split-by,数据偏斜的可能性很高。
请您帮助我了解如何避免在这种情况下出现偏差,以及如何确定用于任何SQOOP导入的最佳映射器数量。
答案 0 :(得分:0)
这是一个重复的问题,最初是here(community.cloudera.com)
提出的。我发布了以下可能的解决方案,以利用xargs管理映射器中的歪斜。这种方法使您可以避免偏差,并行化摄取并限制并发工作。
我写了一篇很棒的博客文章(use xargs to handle split-by skew in sqoop)
#pseudo code...
do_work(){
sqoop import \
... \
--query "SELECT * FROM myDb.myTable WHERE order_date = $1 AND \$CONDITIONS"
}
export -f do_work
declare -a order_dates=(20190101, 20190102, ... 20190131, 20190201, ...)
printf "%s\n" "${order_dates[@]}" | xargs --max-procs=3 -I {} bash -c 'do_work "{}"'