Что лучше использовать для управления состоянием Vertex: переменные экземпляра POJO или значения Giraph?

Я не понимаю, когда можно использовать переменные экземпляра Vertex для сохранения состояния, а не правильные значения Giraph, например getValue(). Интересный пример, который я нашел в исходниках, демонстрирует и то, и другое: SimpleTriangleClosingVertex, который имеет как переменную экземпляра (closeMap), так и пользовательское значение вершины (IntArrayListWritable ). Я немного удивлен, что использование переменной экземпляра является законным из-за возможной ошибки сериализации (?). Мой вопрос: является ли это действительным? Если да, то как мне выбрать один над другим? Спасибо большое.


person Matthew Cornell    schedule 26.08.2014    source источник


Ответы (1)


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

  1. Только то, что находится в значении вершины, сохраненном в конце вычисления, будет сериализовано и запомнено до тех пор, пока вычисление не будет запущено в следующий раз.
  2. Giraph повторно использует объекты вычислительного класса. Он создает пул объектов, а затем вызывает метод вычисления со многими различными вершинами для этого объекта. Таким образом, в методе вычисления первое, что вам нужно сделать, это инициализировать ваш класс, включая установку всех значений по умолчанию, чтобы вы не получили неправильные результаты на основе какой-то случайной вершины, которая была вычислена ранее - в ТОТ ЖЕ объект пример.
person peter    schedule 27.08.2014
comment
Это действительно хороший ответ, @zahorak. Спасибо! Кроме того, спасибо за сообщение в блоге peter .grman.at/ и пример кода 'hop' ( github.com/pgrm/giraph/tree/simple-hop-computation/ ), который демонстрирует пользовательские значения вершин и типы сообщений. - person Matthew Cornell; 27.08.2014