Я работаю с моей командой над небольшим приложением, которое принимает много входных данных (лог-файлов за день) и выдает полезный вывод после нескольких (сейчас 4, в будущем возможно 10) шагов уменьшения карты (Hadoop& Java).
Теперь я сделал частичную POC-версию этого приложения и запустил его на 4 старых рабочих столах (мой тестовый кластер Hadoop).Что я заметил, так это то, что если вы сделаете разбиение «неправильным», характеристики горизонтального масштабирования будут разрушены до неузнаваемости.Я обнаружил, что сравнение тестового прогона на одном узле (скажем, 20 минут) и на всех 4 узлах привело к ускорению на 50% (около 10 минут), где я ожидал ускорения на 75% (или, по крайней мере,> 70%) (около 5).или 6 минут).
Общий принцип горизонтального масштабирования карты - обеспечить максимально возможную независимость разделов.Я обнаружил, что в моем случае я делал разделение каждого шага «неправильно», потому что я просто использовал разделитель Hash по умолчанию;это заставляет записи переходить к другому разделу на следующем шаге уменьшения карты.
Я ожидаю (еще не пробовал), что могу ускорить процесс и сделать масштабирование намного лучше, если смогуубедить как можно больше записей остаться в одном разделе (т.е. создать собственный разделитель).
В описанном выше случае я нашел это решение вручную.Я понял, что пошло не так, подумав об этом, когда я работал в машине.
Теперь мой вопрос ко всем вам: - Какие инструменты доступны для обнаружения подобных проблем?- Есть ли какие-либо руководящие принципы / контрольные списки для подражания?- Как мне измерить такие вещи, как «количество записей, которые перешли раздел»?
Любые предложения (инструменты, учебные пособия, книги, ...) очень ценятся.