Я хочу обрабатывать многострочные CSV-файлы, и для этого я написал custom CSVInputFormat.Как увеличить задачи карты памяти с помощью реализации getSplits
Я хотел бы иметь около 40 потоков обработки CSV строк на каждом узле. Тем не менее, когда я создать кластер на Amazon EMR с 5 машинами (1 мастер и 4 ядра), я могу видеть, я получаю только 2 карты задач работают, даже если есть 6 доступные карты слотов:
Я реализовал getSplits в моем inputFormat, чтобы он вел себя как NLineInputFormat. Я ожидал, что с этим я буду работать параллельно, но не имел никакого эффекта. Кроме того, я попытался установить аргументы -s,mapred.tasktracker.map.tasks.maximum=10 --args -jobconf,mapred.map.tasks=10
, но никакого эффекта.
Что делать, если параллельно обрабатываются линии? Как работает hasoop, он не масштабируется, так как не имеет значения, сколько экземпляров я выделяю кластеру, только две задачи карты будут работать не более.
UPDATE: Когда я использую несжатый файл (zip) как источник, он создает больше задач карты, около 17 для 1,3 миллиона строк. Тем не менее, я удивляюсь, почему это не должно быть больше и почему больше карт не создается, когда данные застегнуты.
Сколько данных вы пытаетесь обработать? Достаточно ли кормить больше картографов? – Guy
1,3 миллиона строк, бит более 1 Гб. Наверное, так ... Что я сделал, это начать использовать многопоточные картографы, и это улучшило производительность, но вопрос остается ... Если я правильно понял, hasoop должен создавать больше задач карты, даже когда данные сжимаются. – mvallebr
Это зависит от типа сжатия. Zip не является хорошим форматом, так как вам нужно иметь весь файл перед распаковкой. – Guy