Подтвердить что ты не робот

Как я могу отлаживать искровое приложение локально?

Я очень новичок в искру, и я просто хотел бы поэтапно узнать, как отлаживать искровое приложение локально? Может ли кто-нибудь объяснить детали, необходимые для этого?

Я могу запустить simpleApp на сайте искры локально из командной строки, но мне просто нужно пройти через код и посмотреть, как он работает. Любая помощь очень ценится. Спасибо.

4b9b3361

Ответ 1

Как отметил Дэвид Гриффин, использование spark-shell может быть очень полезным. Однако я считаю, что выполнение локальной отладки, установка точек останова, проверка переменных и т.д. Абсолютно необходимы. Вот как я это делаю, используя IntelliJ.

Во-первых, убедитесь, что вы можете запустить ваше приложение spark локально, используя spark-submit, например что-то вроде:

spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar

Затем скажите локальному драйверу искры приостановить и дождаться соединения от отладчика при запуске, добавив параметр, подобный следующему:

--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

где agentlib:jdwp - это параметр протокола отладки Java, за которым следует разделенный запятыми список agentlib:jdwp:

  • transport определяет протокол соединения, используемый между отладчиком и debuggee - либо сокетом, либо "разделяемой памятью", - вы почти всегда хотите использовать сокет (dt_socket), за исключением некоторых случаев в Microsoft Windows.
  • server, должен ли этот процесс быть сервером при общении с отладчиком (или, наоборот, с клиентом) - вам всегда нужен один сервер и один клиент. В этом случае мы собираемся быть сервером и ждать подключения от отладчика.
  • suspend, suspend ли выполнение до тех пор, пока отладчик не подключится успешно. Мы включаем это, чтобы драйвер не запустился, пока отладчик не подключится
  • address здесь, это порт для прослушивания (для входящих запросов подключения отладчика). Вы можете установить его на любой доступный порт (вам просто нужно убедиться, что отладчик настроен на подключение к этому же порту)

Итак, теперь ваша командная строка spark-submit должна выглядеть примерно так:

spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Теперь, если вы запустите выше, вы должны увидеть что-то вроде

Listening for transport dt_socket at address: 5005

и ваше искровое приложение ожидает подключения отладчика.

Затем откройте проект IntelliJ, содержащий ваше приложение Spark, а затем откройте "Выполнить → Редактировать конфигурации...", затем нажмите "+", чтобы добавить новую конфигурацию запуска/отладки, и выберите "Удаленный". Дайте ему имя, например, "SparkLocal", и выберите "Socket" для транспорта, "Attach" для режима отладчика и введите "localhost" для хоста и порт, который вы использовали выше для порта, в данном случае "5005". Нажмите "ОК", чтобы сохранить.

В моей версии IntelliJ он дает вам советы по использованию командной строки отладки для отлаживаемого процесса и использует "suspend = n" - мы игнорируем это и используем "suspend = y" (как указано выше), потому что мы хотим приложение, чтобы ждать, пока мы не подключиться, чтобы начать.

Теперь вы должны быть готовы к отладке. Просто запустите spark с помощью приведенной выше команды, затем выберите конфигурацию запуска IntelliJ, которую вы только что создали, и нажмите Отладка. IntelliJ должен подключиться к вашему приложению Spark, которое теперь должно запуститься. Вы можете установить точки останова, проверить переменные и т.д.

Ответ 2

Запустите оболочку искры. Это прямо из документации Spark:

./bin/spark-shell --master local[2]

Вы также увидите оболочку Spark, обозначенную как REPL. Это, безусловно, лучший способ узнать Spark. Я трачу 80% своего времени в оболочке Spark, а остальные 20% переводят код в мое приложение.

Ответ 3

Просто передайте параметры java, чтобы открыть порт отладки. Вот хорошая статья, посвященная вашему вопросу - http://danosipov.com/?p=779 Я использую его как

$ SPARK_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spark-shell

(да, SPARK_JAVA_OPTS устарел, но он отлично работает)

Ответ 4

@Ответ Джейсона Эванса для меня не сработал. Но

--conf spark.driver.extraJavaOptions=-Xrunjdwp:transport=dt_socket,server=y,address=8086,suspend=n

работал

Ответ 5

для ответа @Jason Evan требуется только одно небольшое изменение. Это нужно '- перед строкой "agentlib...."

 --conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Вы также можете использовать опцию "--driver-java-options" для достижения той же цели

--driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Ответ 6

Сначала выберите версию spark, затем выберите IDE, intellij будет лучше. Проверьте исходный код этой версии spark и убедитесь, что вы можете успешно собрать его из IDE (подробнее здесь). как только у вас будет чистая сборка, найдите тестовые наборы или наборы тестов. Например, "SubquerySuite" является простым, а затем отлаживает его, как обычное приложение. Прокомментируйте любые конкретные шаги, с которыми вам нужна помощь

Ответ 7

Вы можете попробовать это в spark-env.sh:

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

Ответ 8

Вот как можно получить все на консоли:

Сначала проверьте здесь, чтобы увидеть, какой уровень информации вы хотите, чтобы spark (log4j) печатал на вашей консоли:

https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-logging.html

Затем отправьте команду следующим образом:

path/to/spark-submit
  --master local[a number of cores here from your CPU]
  --driver-java-options "-Dlog4j.configuration=file:/path/to/log4j-driver.properties 
  -Dvm.logging.level=ALL"

"ВСЕ" даст вам всю информацию, которую вы можете получить. Также не имеет значения, если spark не найдет ваш файл log4.properties, он должен загрузить настройку желаемого уровня ведения журнала, и информация отобразится на вашем экране.