Как избежать перекоса и определить оптимальное количество картографов в импорте 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 "{}"'
Другие вопросы по тегам