Как уже упоминалось Дэвид Гриффин, используя spark-shell
может быть очень полезным , Тем не менее, я считаю, что выполнение фактической локальной отладки, установка точек останова, проверка переменных и т. Д. Является незаменимым. Вот как я это делаю, используя IntelliJ.
Во-первых, убедитесь, что вы можете запускать искровое приложение локально, используя 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 Debug Wire Protocol, а затем разделенный запятыми список подвариантов:
transport
определяет протокол соединения, используемого между отладчиком и отлаживаемым - eithe r socket или «shared memory» - вы почти всегда хотите сокет (dt_socket
), за исключением того, что я верю в некоторых случаях в Microsoft Windows
server
должен ли этот процесс быть сервером при разговоре с отладчиком (или, наоборот, клиентом) - - вам всегда нужен один сервер и один клиент. В этом случае мы собираемся быть сервером и ждать подключения от отладчика
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, а затем откройте «Run -> Edit Configurations ...». Затем нажмите «+», чтобы добавить новую конфигурацию запуска/отладки, и выберите «Remote». Дайте ему имя, например. «SparkLocal» и выберите «Socket» для Transport, «Attach» для режима Debugger и введите «localhost» для Host и порт, который вы использовали выше для порта, в данном случае «5005». Нажмите «ОК» для сохранения.
В моей версии IntelliJ вы найдете предложения по командной строке отладки, которые будут использоваться для отладочного процесса, и использует «suspend = n» - мы игнорируем это и используем «suspend = y» (как указано выше), потому что мы хотим, чтобы приложение подождало, пока мы не подключимся к запуску.
Теперь вы должны быть готовы к отладке. Просто запустите искру с помощью приведенной выше команды, затем выберите конфигурацию запуска IntelliJ, которую вы только что создали, и нажмите «Отладка». IntelliJ должен подключиться к вашему приложению Spark, которое должно теперь запускаться. Вы можете установить точки останова, проверить переменные и т. Д.
I не знаю, что вы подразумеваете под «обучением отладке». Вы можете посмотреть на этот учебник, как настроить искру локально в IntelliJ ide https://docs.sigmoidanalytics.com/index.php/Step_by_Step_instructions_on_how_to_build_Spark_App_with_IntelliJ_IDEA. – abalcerek
Я имею в виду «как я могу пройти через приложение SimpleApp на искровом сайте. Существует файл SimpleApp.java и файл pom.xml (как указано на сайте искры). Как я могу использовать Intellij IDE для шага по строкам Я хочу, чтобы это можно было сделать без отправки задания в кластер. Я просто хочу выполнить код на моем ноутбуке локально. Ссылка, которую вы указали, дает шаги по созданию приложения Spark с IntelliJ IDEA. Как насчет перехода по коду по строкам? Любая помощь очень ценится. Спасибо. – eugenerory
Я не знаю о scala, но, по крайней мере, в java вы можете использовать стандартный отладчик IDEA (в локальном режиме). Одна вещь, которую вы должны помнить, если у вас есть большая коллекция, вам придется перешагнуть все элементы. – abalcerek