2016-10-05 5 views
5

В настоящее время я создаю свою IDE разработки с использованием Intellij IDEA. Я следовал точно так же, как http://spark.apache.org/docs/latest/quick-start.htmlКак отладить программу Spark на основе Scala на Intellij IDEA

build.sbt файл

name := "Simple Project" 

version := "1.0" 

scalaVersion := "2.11.7" 

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0" 

Пример программы File

import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 

object MySpark { 

    def main(args: Array[String]){ 
     val logFile = "/IdeaProjects/hello/testfile.txt" 
     val conf = new SparkConf().setAppName("Simple Application") 
     val sc = new SparkContext(conf) 
     val logData = sc.textFile(logFile, 2).cache() 
     val numAs = logData.filter(line => line.contains("a")).count() 
     val numBs = logData.filter(line => line.contains("b")).count() 
     println("Lines with a: %s, Lines with b: %s".format(numAs, numBs)) 
    } 
} 

Если я использую командную строку:

sbt package 

, а затем

spark-submit --class "MySpark" --master local[4] target/scala-2.11/myspark_2.11-1.0.jar 

Я могу генерировать упаковку и искра хорошо работает.

Однако я хочу использовать Intellij IDEA для отладки программы в среде IDE. Как настроить конфигурацию, так что, если я нажму «debug», она автоматически сгенерирует пакет jar и автоматически запустит задачу, выполнив командную строку «spark-submit-».

Я просто хочу, чтобы все было просто, как «один клик» на кнопке отладки в Intellij IDEA.

Спасибо.

ответ

10

вы можете просто добавить ниже искровых вариантов

export SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=7777 

и создать конфигурацию Debug следующим

Rub-> Edit Configuration -> Нажмите на кнопку "+" левом верхнем Корнор -> Remote -> набор порт и имя

После выполнения конфигурации запускайте искровое приложение с помощью запуска spark-submit или sbt, а затем выполните отладочную версию, которая создается в конфигурации. и добавить контрольные точки для отладки.

+0

Спасибо за ответ. Как я могу найти порт и имя моей местной искры? – lserlohn

+0

- это порт и имя «localhost: 7077»? Я получил «Ошибка при запуске Spark: Не удалось открыть порт отладчика (localhost: 7077): java.net.ConnectException« Соединение отказано »« – lserlohn

+0

вам не следует устанавливать искровой порт, вы можете просто поместить порт таким же, как адрес в SPARK_SUBMIT_OPTS в выше SPARK_SUBMIT_OPTS, вы можете см. адрес = 7777, поэтому теперь просто измените порт в удаленной конфигурации и добавьте одну контрольную точку в ur-код, теперь sun spark-sumit и его show msg прослушивающий порт 7777, затем перейдите к itellij и нажмите на debug, который создает –

0

Если вы используете плагин scala и сконфигурируете проект как проект sbt, он должен работать в основном из коробки.

Перейдите на страницу Run ->Edit Configurations... и добавьте конфигурацию запуска в обычном режиме.

Поскольку у вас есть класс main, вы, вероятно, захотите добавить новую конфигурацию Application.

Вы также можете просто щелкнуть по значку синего квадрата, слева от вашего кода main.

Как только ваша конфигурация запуска настроена, вы можете использовать функцию «Отладка».

+1

Спасибо. Я создал проект sbt и поместил там файл сценария. Если я буду работать прямо на нем, он сказал бы «Исключение в потоке» main «java.lang.ClassNotFoundException: MySpark» Не могли бы вы дать мне знать, как я могу установить параметры? – lserlohn

1

Я столкнулся с этим, когда переключаюсь между 2.10 и 2.11. SBT ожидает, что основной объект будет находиться в src-> main-> scala-2.10 или src-> main-> scala-2.11 в зависимости от вашей версии.

0

Это похоже на решение, представленное здесь: Debugging Spark Applications. Вы создаете конфигурацию удаленного отладочного запуска в Idea и передаете параметры отладки Java в команду spark-submit. Единственный улов - вам нужно запустить конфигурацию удаленного отладки в Idea после запуска команды spark-submit. Я где-то читал, что Thread.sleep перед вашей точкой отладки должен позволить вам сделать это, и я тоже смог успешно использовать это предложение.

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