Azure Toolkit for IntelliJ를 사용하여 SSH를 통해 HDInsight 클러스터에서 Apache Spark 애플리케이션 디버그

이 문서에서는 Azure Toolkit for IntelliJ의 HDInsight 도구를 사용하여 HDInsight 클러스터에서 애플리케이션을 원격으로 디버그하는 방법에 대한 단계별 지침을 제공합니다.

필수 조건

Spark Scala 애플리케이션 만들기

  1. IntelliJ IDEA를 시작하고 새 프로젝트 만들기를 선택하여 새 프로젝트 창을 엽니다.

  2. 왼쪽 창에서 Apache Spark/HDInsight를 선택합니다.

  3. 주 창에서 샘플(Scala)이 포함된 Spark 프로젝트 를 선택합니다.

  4. 빌드 도구 드롭다운 목록에서 다음 중 하나를 선택합니다.

    • Maven: Scala 프로젝트 만들기 마법사 지원의 경우
    • SBT - 종속성 관리 및 Scala 프로젝트용 빌드의 경우

    Intellij Create New Project Spark.

  5. 다음을 선택합니다.

  6. 다음 새 프로젝트 창에서 다음 정보를 입력합니다.

    속성 설명
    프로젝트 이름 이름을 입력합니다. 이 연습에서는 myApp를 사용합니다.
    프로젝트 위치 프로젝트를 저장하기를 원하는 위치를 입력합니다.
    프로젝트 SDK 비어 있는 경우 새로 만들기... 를 선택하고 JDK로 이동합니다.
    Spark 버전 만들기 마법사는 Spark SDK 및 Scala SDK에 대해 적합한 버전을 통합합니다. Spark 클러스터 버전이 2.0 이전인 경우 Spark 1.x를 선택합니다. 그렇지 않은 경우 Spark 2.x.를 선택합니다. 이 예제에서는 Spark 2.3.0(Scala 2.11.8)을 사용합니다.

    Intellij New Project select Spark version.

  7. 마침을 선택합니다. 프로젝트를 사용할 수 있게 되기까지 몇 분 정도 걸릴 수 있습니다. 오른쪽 아래 모퉁이에 진행률이 표시됩니다.

  8. 프로젝트를 확장하고 src>main>scala>sample로 이동합니다. SparkCore_WasbIOTest를 두 번 클릭합니다.

로컬 실행 수행

  1. SparkCore_WasbIOTest 스크립트에서 스크립트 편집기를 마우스 오른쪽 단추로 클릭한 다음 'SparkCore_WasbIOTest' 실행 옵션을 선택하여 로컬 실행을 수행합니다.

  2. 로컬 실행이 완료되면 현재 프로젝트 탐색기 data>default에 저장된 출력 파일을 볼 수 있습니다.

    Intellij Project local run result.

  3. 해당 도구는 로컬 실행 및 로컬 디버그를 수행하면 기본 로컬 실행 구성을 자동으로 설정합니다. 오른쪽 위 모서리에서 [Spark on HDInsight] XXX 구성을 엽니다. [Spark on HDInsight]XXX 가 이미 HDInsight의 Apache Spark에 생성되었음을 확인할 수 있습니다. 로컬로 실행 탭으로 전환합니다.

    Intellij Run debug configurations local run.

    • 환경 변수: 시스템 환경 변수 HADOOP_HOMEC:\WinUtils로 이미 설정한 경우 자동으로 감지되므로 수동으로 추가할 필요가 없습니다.
    • WinUtils.exe 위치: 시스템 환경 변수를 설정하지 않은 경우 해당 단추를 클릭하여 위치를 찾을 수 있습니다.
    • 두 옵션 중 하나를 선택하면 됩니다. 단, MacOS 및 Linux에서는 필요하지 않습니다.
  4. 또한 로컬 실행 및 로컬 디버그를 수행하기 전에 수동으로 구성을 설정할 수 있습니다. 이전 스크린샷에서 더하기 기호(+)를 선택합니다. 다음으로 HDInsight의 Apache Spark 옵션을 선택합니다. 저장할 이름, 주 클래스 이름에 대한 정보를 입력하고 로컬 실행 단추를 클릭합니다.

로컬 디버깅 수행

  1. SparkCore_wasbloTest 스크립트를 열고 중단점을 설정합니다.

  2. 스크립트 편집기를 마우스 오른쪽 단추로 클릭한 다음 Debug '[Spark on HDInsight]XXX' 옵션을 선택하여 로컬 디버깅을 수행합니다.

원격 실행 수행

  1. 실행>구성 편집...으로 이동합니다. 이 메뉴에서 원격 디버깅에 대한 구성을 만들거나 편집할 수 있습니다.

  2. 실행/디버깅 구성 대화 상자에서 더하기 기호(+)를 선택합니다. 다음으로 HDInsight의 Apache Spark 옵션을 선택합니다.

    Intellij Add new configuration.

  3. 클러스터에서 원격으로 실행 탭으로 전환합니다. 이름, Spark 클러스터, 주 클래스 이름에 정보를 입력합니다. 그런 다음 고급 구성(원격 디버깅)을 클릭합니다. 이 도구는 실행기를 사용하여 디버그를 지원합니다. numExectors의 기본값은 5입니다. 3보다 큰 값을 설정하지 않는 것이 좋습니다.

    Intellij Run debug configurations.

  4. 고급 구성(원격 디버깅) 파트에서 Spark 원격 디버그 사용을 선택합니다. SSH 사용자 이름을 입력하고 암호를 입력하거나 프라이빗 키 파일을 사용합니다. 원격 디버그를 수행하려는 경우 설정해야 합니다. 원격 실행만 사용하려는 경우는 설정할 필요가 없습니다.

    Intellij Advanced Configuration enable spark remote debug.

  5. 이제 사용자가 입력한 이름으로 구성이 저장됩니다. 구성 세부 정보를 보려면 구성 이름을 선택합니다. 변경하려면 구성 편집을 선택합니다.

  6. 구성 설정을 완료한 후에 원격 클러스터에 대해 프로젝트를 실행하거나 원격 디버깅을 수행할 수 있습니다.

    Intellij Debug Remote Spark Job Remote run button.

  7. 연결 해제 단추를 클릭하면 제출 로그가 왼쪽 패널에 나타나지 않습니다. 그러나 백 엔드에서는 계속 실행되고 있습니다.

    Intellij Debug Remote Spark Job Remote run result.

원격 디버깅 수행

  1. 중단점을 설정한 다음 원격 디버그 아이콘을 클릭합니다. 원격 제출과의 차이점은 SSH 사용자 이름/암호를 구성해야 한다는 것입니다.

    Intellij Debug Remote Spark Job debug icon.

  2. 프로그램 실행이 중단점에 도달하면 디버거 창에 1개의 드라이버 탭과 2개의 실행기 탭이 표시됩니다. 프로그램 다시 시작 아이콘을 선택하여 코드를 계속 실행합니다. 그러면 다음 중단점에 도달합니다. 디버깅할 대상 실행기를 찾으려면 올바른 실행기 탭으로 전환해야 합니다. 해당 콘솔 탭에서 실행 로그를 검토할 수 있습니다.

    Intellij Debug Remote Spark Job Debugging tab.

원격 디버깅 및 버그 수정 수행

  1. 두 개의 중단점을 설정하고 디버그 아이콘을 선택하여 원격 디버깅 프로세스를 시작합니다.

  2. 첫 번째 중단점에서 코드가 중지되고 변수 창에 매개 변수 및 변수 정보가 표시됩니다.

  3. 프로그램 다시 시작 아이콘을 선택하여 계속합니다. 두 번째 지점에서 코드가 중지됩니다. 예상대로 예외가 catch됩니다.

    Intellij Debug Remote Spark Job throw error.

  4. 프로그램 다시 시작 아이콘을 다시 선택합니다. HDInsight Spark 제출 창에 “작업 실행 실패” 오류가 표시됩니다.

    Intellij Debug Remote Spark Job Error submission.

  5. IntelliJ 디버깅 기능을 사용하여 변수 값을 동적으로 업데이트하려면 디버그를 다시 선택합니다. 변수 창이 다시 나타납니다.

  6. 디버그 탭에서 대상을 마우스 오른쪽 단추로 클릭한 다음 값 설정을 선택합니다. 다음으로 변수의 새 값을 입력합니다. 그런 다음 Enter 키를 선택하여 값을 저장합니다.

    Intellij Debug Remote Spark Job set value.

  7. 프로그램 다시 시작 아이콘을 선택하여 프로그램을 계속 실행합니다. 이번에는 예외가 catch되지 않습니다. 예외 없이 프로젝트가 성공적으로 실행되는지 확인할 수 있습니다.

    Intellij Debug Remote Spark Job without exception.

다음 단계

시나리오

애플리케이션 만들기 및 실행

도구 및 확장

리소스 관리