2016-10-26 6 views
3

Я уже сжимаю RDD, используя conf.set("spark.rdd.compress","true") и persist(MEMORY_AND_DISK_SER). Будет ли использование сериализации Kryo сделать программу еще более эффективной, или это не полезно в этом случае? Я знаю, что Kryo предназначен для более эффективного обмена данными между узлами. Но если переданные данные уже сжаты, это даже необходимо?Когда следует использовать сериализацию Kryo в Spark?

+0

Как я понимаю, Spark сжимает байтовый массив, обеспечиваемый механизмами сериализации (после сериализации), что ускоряет связь. Но это не улучшает скорость самой сериализации, поскольку использует стандартные Java-сериализаторы. – dk14

ответ

1

Сериализация Kryo - это более оптимизированная технология сериализации, поэтому вы можете использовать ее для сериализации любого класса, который используется при закрытии RDD или Dataframe. Для некоторого конкретного использования сериализации kryo, как указано ниже

  1. Используйте, если необходимо сериализовать класс несериализаций сторонних производителей, который используется внутри закрытия фреймов данных RDD pr.
  2. хочу использовать эффективную сериализующую технику
  3. Если у вас когда-либо возникла задача не выполнять сериализацию, из-за некоторого класса u может зарегистрировать этот класс с помощью сериализатора kryo.
1

Принимая во внимание еще один момент: kyro быстрее, чем по умолчанию в сериализации и десериализации, поэтому лучше использовать киро. Но увеличение производительности может быть не так хорошо, как было сказано, есть другие моменты, которые будут влиять на скорость программы, например, как вы пишете ваш искровой код, какой lib вы выберете.

1

Оба состояния RDD, которые вы описали (сжатые и сохраняемые), используют сериализацию. Когда вы сохраняете RDD, вы его сериализуете и сохраняете на диске (в вашем случае также сжимаете сериализованный вывод). Вы правы, что сериализация также используется для перетасовки (отправка данных между узлами): в любое время данные должны покидать JVM, независимо от того, идет ли он на локальный диск или через сеть, его необходимо сериализовать.

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

«spark.serializer» должен быть «org.apache.spark.serializer.KryoSerializer».

Если это не так, то вы можете установить это с внутренней стороны:

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") 

Что касается вашего последнего вопроса («? Это даже нужно»), это трудно сделать общее утверждение о том, что. Kryo оптимизирует один из медленных шагов в передаче данных, но вполне возможно, что в вашем случае использования другие удерживают вас. Но нет недостатка в попытке Kryo и сравнения отличий!

 Смежные вопросы

  • Нет связанных вопросов^_^