Похоже, вы не совсем поняли стратегию выполнения Hadoop.
Если вы находитесь в распределенном режиме, вы не можете совместно использовать коллекцию (HashSet) для нескольких задач карты. Это связано с тем, что задачи выполняются в собственной JVM, и это не является детерминированным, даже если повторное использование jvm не приведет к тому, что ваша коллекция все еще будет там после сброса jvm.
Что вы можете сделать, так это установить HashSet
для каждой задачи в начале вычисления.
Поэтому вы можете переопределить метод setup(Context ctx)
. Это будет вызвано до вызова метода map.
Однако вам нужно достаточно оперативной памяти для хранения HashSet
в каждой задаче.
Если у вас нет такой возможности, вы должны принять во внимание решение распределенного кэша, но это будет иметь дополнительные издержки, поскольку каждый запрос должен быть сериализован и десериализован. И не гарантируется, что данные доступны локально, поэтому это может занять намного больше времени, чем сбор данных в рамках задачи.