2016-03-26 3 views
-1

Я новичок в Spark. У меня есть две Spark SQl Dataframes. Код выглядит примерно так:Apache Spark Outer Join Принимая много времени

val df1 = sparksql.read.format(com.databricks.avro).loadfiles(filespath) 

val df2 = sparksql.sql(select * from hivedb) 

val df3 = df1.join(df2,df1.srcid <=> df2.srcid and df1.srccode <=> df2.srccode, left_outer) 

sqlcontext.cacheastable(""table) 

val insertid = sparkcontext.sql("select * from table where cid is null") 

val updateid = sparkcontext.sql("select * from table where cid is not null") 

Затем мы сохраняем эти два df в базе данных.

Оба кадра данных содержат около 10 полей, таких как srcid, stccode и сведения о клиенте, такие как имя, фамилия и т. Д. Это небольшие строки, которые изначально были varchar в таблице оракула.

Оба блока данных имеют около 3 миллионов записей.

Когда мы выполняем задание, мы видим много медлительности, когда Палач занимает около 2 часов, чтобы завершить вычисление. Мы пробовали множество настроек, таких как объединение влево и соединение с количеством разделов, но безрезультатно.

Когда данные небольшие (файлы 50K), задание завершается за 6 минут. Я видел Spark UI, и происходит только искробезопасное вычисление.

Мы даже установили память за палача 12 G и Учитывая это 24 палачей с NUM ядрами, как 20.

Мы используем искру 1.5.0, который поставляется в комплекте с Cloudera 5.X кластера и работает с пряжей.

Не могли бы вы сообщить мне, где я могу отлаживать медлительность в стороне от контекста искры?

+0

Я добавил здесь пример кода. Надеюсь, что это поможет. Нам нужно запустить это объединение в искровом режиме и сохранить данные обратно в Oracle DB –

ответ

0

Один из способов, я бы предложил, проверяя физический план вашего df3 и гарантируя, что у вас нет продукта с крестом в конце. Еще один, проверьте свой spark.sql.shuffle.partitions и увеличьте его, если он ниже. Используйте где-то около 200.

Оптимизация объединяется в очень важную задачу и требует анализа многих вещей. Кроме того, убедитесь, что вы включили вольфрам. установить spark.sql.tungsten.enabled в true.

Проверьте это после этого и дайте мне знать. 1.5.0 будет бит медленнее для соединений, так как я не думаю, что у него был добавлен полный список оптимизаций. Тем не менее, проверьте их и дайте мне знать.

+0

Hi Srini .. У нас есть Tugsten, а количество разделов - 200. Я проверил это в интерфейсе Spark. Я вижу физический план и вижу обмен. Это то же самое, что и кросс-продукт. Если да, то как его удалить ... Я дам физический план в следующем комментарии –

+0

Как насчет разделов.? – Srini

+0

Я не могу скопировать физический план, поскольку он длинный здесь. Я написал ниже синтаксиса физического плана. –

0

Этот выпуск wa фиксированный. Проблема заключалась в том, что если у вас есть нулевые ключи ввода, искра создает телесное соединение. Мы исправили это, удалив нули из ключей

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