Как найти оптимальное количество картографов при импорте и экспорте Sqoop?

Я использую Sqoop версии 1.4.2 и базу данных Oracle.

При запуске команды Sqoop. Например вот так:

./sqoop import                               \
    --fs <name node>                         \
    --jt <job tracker>                       \
    --connect <JDBC string>                  \
    --username <user> --password <password>  \
    --table <table> --split-by <cool column> \
    --target-dir <where>                     \
    --verbose --m 2

Мы можем указать --m - сколько параллельных задач мы хотим, чтобы Sqoop запускал (также они могут одновременно обращаться к базе данных). Такая же опция доступна для экспорта ./sqoop ‹...>

Есть ли какая-то эвристика (вероятно, основанная на размере данных), которая поможет определить оптимальное количество задач для использования?

Благодарю вас!


person Bohdan    schedule 17.05.2013    source источник
comment
Нет, это зависит от количества ЦП/ядер вашего сервера базы данных, объема доступа к диску, который потребуется каждой задаче, скорости этих дисков, объема ОЗУ, объема ОЗУ, объема дополнительного временного табличного пространства, занимаемого тем, что вы не можете хранить в ОЗУ, используемой файловой системой, объемом ОЗУ, выделенным для ОС, а не для базы данных, потенциально размером ваших коммутаторов и сетевых кабелей и количеством дополнительных процессы, которые выполняются в базе данных и/или на сервере, и как на них влияют все вышеперечисленные факторы и т. д. Протестируйте это.   -  person Ben    schedule 18.05.2013
comment
@Ben - я бы представил это как ответ   -  person Chris White    schedule 18.05.2013


Ответы (2)


Это взято из кулинарной книги Apache Sqoop от O'Reilly Media и кажется наиболее логичным ответом.

Оптимальное количество картографов зависит от многих переменных: вам необходимо учитывать тип вашей базы данных, аппаратное обеспечение, используемое для вашего сервера базы данных, и влияние на другие запросы, которые должна обслуживать ваша база данных. Не существует оптимального количества картографов, подходящего для всех сценариев. Вместо этого вам предлагается поэкспериментировать, чтобы найти оптимальную степень параллелизма для вашей среды и варианта использования. Лучше начать с небольшого количества картографов, постепенно наращивая их, чем начинать с большого числа картографов, постепенно снижаясь.

person Chris Marotta    schedule 31.01.2014

В «Hadoop: Полное руководство» они объясняют, что при настройке максимальной карты/уменьшения задачи на каждом Tasktracker учитывайте процессор и его ядра для определения количества задач для вашего кластера, поэтому я бы применил ту же логику к этому и взгляните, сколько процессов вы можете запустить на своем процессоре (ах) (считая HyperTreading, ядра) и установите для --m это значение - 1 (оставьте один открытым для других задач, которые могут появиться во время экспорта), НО это только в том случае, если у вас большой набор данных и вы хотите выполнить экспорт своевременно.

Если у вас нет большого набора данных, помните, что вашим выводом будет значение --m количества файлов, поэтому, если вы экспортируете таблицу из 100 строк, вы можете установить --m в 1, чтобы сохранить все данные локализованы в один файл.

person Engineiro    schedule 18.05.2013
comment
Если вы собираетесь понизить голос, пожалуйста, оставьте мне конструктивную критику, чтобы я мог улучшить свой ответ. - person Engineiro; 19.05.2013
comment
Это ответ на другой вопрос. Я не минусовал это. Но проблема с sqoop в том, что каждый маппер бьет по дабазе. Так что, если у меня есть 30 машин с 2 мапперами на каждой, и я использую базу данных -m 60, я буду очень недоволен этим :) - person Bohdan; 22.05.2013
comment
Вы бы не установили его на 60. Вы бы установили его на 2... так как этот параметр будет применяться к каждой машине в вашем кластере. Таким образом, каждая машина будет использовать два картографа, в общей сложности развернуто 60 картографов, в зависимости от того, воспримет ли API sqoop это как предложение или жесткую настройку. - person Engineiro; 22.05.2013
comment
@Engineiro, вы уверены, что этот параметр применяется к каждому узлу данных в кластере? Мы только что попробовали пример на кластере из 7 узлов с мапперами, установленными на 15, но в итоге мы получили 15 файлов, а не 105 файлов (7 * 15). - person Dave Morris; 20.02.2015
comment
Нет, это совершенно неверно: sqoop.apache.org /docs/1.4.5/SqoopUserGuide.html 7.2.4. Управление параллелизмом Мы не контролируем, сколько картографов работает на каждой машине, а только общее количество картографов, которые мы развертываем. Спасибо за вопрос @DaveMorris - person Engineiro; 22.02.2015