2017-01-26 2 views
-1

Я обработал большие данные в искры и сохранил их в HDFS.Есть ли способ улучшить производительность метода saveAsTextFile при искрообразовании

Однако, я чувствую, что метод saveAsTextFile несколько медленнее.

Так что я задаюсь вопросом, есть ли способ улучшить его работу.

Мой исходный код (который работает медленнее, чем ожидалось)

val data = sc.textFile("data", 200); 
data. 
    flatMap(_.split(" ")). 
    map(word => (word, 1)). 
    reduceByKey(_ + _). 
    saveAsTextFile("output") 

Когда я добавляю сливаются (1), скорость значительно улучшает

val data = sc.textFile("data", 200); 
data. 
    flatMap(_.split(" ")). 
    map(word => (word, 1)). 
    reduceByKey(_ + _). 
    coalesce(1). 
    saveAsTextFile("output") 
+1

Я бы рекомендовал проверить начальную страницу искры для вашей работы, у нее есть много подробностей о таймингах разных частей задания. Вероятно, вы также захотите проверить количество файлов и размеров, которые вы пишете в hdf. Например, вы можете писать тонны небольших файлов. – jeff

+0

Спасибо вам за ответ! Не могли бы вы ответить на еще один вопрос? Если вы не возражаете. Когда я загружаю текстовый файл с помощью 'sc.textFile()', я устанавливаю для параметра секционирования этого метода значение 200. Это вы подразумеваете под «Возможно, вы пишете тонны небольших файлов»? –

+0

PLS добавить код, который вы пробовали. – mrsrinivas

ответ

1

Я предполагаю, ваша работа медленно работает б/c вы запрашиваете 200 разделов ввода. Когда вы записываете свой вывод в HDFS, он записывает 200 (возможно, небольших) файлов в HDFS. Вы заметили ускорение при объединении до 1.

Я бы предложил удалить 200 разделов в textFile и позволить Spark выбрать параллелизм по умолчанию.

val data = sc.textFile(inputDir) // no partitions specified 

Возможно, вы захотите следить за размерами файлов, записанными в конце работы. HDFS лучше всего работает, когда размеры файлов близки к размеру блока (я не помню значение по умолчанию, но около 256 М я думаю).

Еще одна причина, по которой больше разделов может быть медленнее, потому что Spark выполняет настройку/отключение на раздел. Там есть сладкое пятно, чтобы установить эти числа. Взгляните на своего мастера Spark, если есть 100 мс установки/срыва за 5 мс реальной работы, вы хотите, например, меньше разделов.

Я всегда начинаю с установки искры по умолчанию, хотя и настраиваю оттуда по мере необходимости.

+0

Спасибо за ваш ответ! –

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