Как избежать перекоса и определить оптимальное количество картографов в импорте SQOOP
Если в исходной таблице есть первичный ключ, то при импорте SQOOP не будет искаженных данных... Что делать, если в таблице не определен первичный ключ и нам нужно использовать параметр --split-by для разделения записей между несколькими сопоставителями.
Вероятность искажения данных высока в зависимости от столбца, который мы выбрали для --split-by.
Не могли бы вы помочь мне понять, как избежать перекоса в таких сценариях, а также как определить оптимальное количество картографов, которые будут использоваться для любого импорта SQOOP.
0 ответов
Это дублирующий вопрос, который изначально задавался здесь (community.cloudera.com)
Я опубликовал следующее возможное решение для управления перекосом в мапперах, используя xargs. Такой подход позволяет избежать перекоса, распараллелить проглатывание и ограничить параллельную работу.
Я написал отличный пост в блоге о том, как это работает ( используйте xargs для обработки разбивки в 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 "{}"'