Увеличение параллелизма Foreach у свиньи

У меня есть список URL-адресов, которые я хочу перебрать, где каждый содержит определенный файл, который я хочу загрузить. Я пытаюсь использовать hadoop / pig, чтобы ускорить этот процесс, полагая, что каждый узел заботится о конкретной загрузке / выгрузке, что увеличит пропускную способность сети.

У меня есть UDF, который заботится о загрузке, проверке коррупции, загрузке, но у меня возникают проблемы с поиском способа сделать этот вызов неблокирующим в некотором смысле, чтобы я мог сделать несколько загрузок в определенное время... Я начал с foreach, вызывающим UDF для каждого URL, но он будет порождать только одну задачу загрузки за раз. Есть 2 задачи, каждая из которых выполняется с одним маппером. Один из них выполняет цикл foreach, а другой - UDF. Каждый UDF является изолированной задачей, поскольку каждая файловая часть логически является отдельной загрузкой. Любая идея, если это возможно, чтобы сделать это более параллельным? Я не уверен, что увеличение числа картографов приведет к тому, что этот UDF будет не блокирующим.

Размеры файлов, с которыми я имею дело, составляют около 2,8 ГБ на штуку, я имею дело с около 1 ТБ в день

Любая помощь или предложения по расследованию было бы здорово!

1 ответ

Решение

Вы можете использовать KafKa для вашей ситуации. Это проект Apache. Он может обрабатывать сотни мегабайт операций чтения и записи в секунду от тысяч клиентов.

Он имеет две сущности: одна известна как производитель, которая вводит ваши данные в Kafka, а другая называется Consumer, которая считывает данные из Kafka.

Вы можете реализовать свой клиент, который загружает данные с URL в качестве вашего производителя. Если вы хотите обработать данные, которые вы можете использовать шторм и зарегистрировать их в качестве потребителя.

Или вы можете использовать KafKa и Hadoop API для регистрации Hadoop в качестве потребителя Kafka.

Другие вопросы по тегам