在SQOOP导入中避免偏斜并确定最佳映射器数量

时间:2015-06-24 07:43:12

标签: mysql hadoop hdfs sqoop

如果源表上有主键,SQOOP导入将不会生成倾斜数据...如果表中没有定义主键,我们必须使用--split-by参数来分割记录多个映射器。

根据我们选择的列--split-by,数据偏斜的可能性很高。

请您帮助我了解如何避免在这种情况下出现偏差,以及如何确定用于任何SQOOP导入的最佳映射器数量。

1 个答案:

答案 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 "{}"'