Azure Toolkit for Eclipse를 사용하여 HDInsight 클러스터용 Apache Spark 애플리케이션 만들기
Azure Toolkit for Eclipse의 HDInsight Tools를 사용하여 Scala로 작성된 Apache Spark 애플리케이션을 개발하여 Eclipse IDE에서 직접 Azure HDInsight Spark 클러스터에 제출합니다. 다음과 같은 방법으로 HDInsight Tools 플러그 인을 사용할 수 있습니다.
- HDInsight Spark 클러스터에서 Scala Spark 애플리케이션을 개발 및 제출하려면
- Azure HDInsight Spark 클러스터 리소스에 액세스하려면
- Scala Spark 애플리케이션을 로컬로 개발 및 실행하려면
필수 조건
HDInsight의 Apache Spark 클러스터. 자세한 내용은 Azure HDInsight에서 Apache Spark 클러스터 만들기를 참조하세요.
Eclipse IDE. 이 문서에서는 Java 개발자용 Eclipse IDE를 사용합니다.
필요한 플러그 인 설치
Eclipse용 Azure 도구 키트 설치
설치 지침은 Eclipse용 Azure 도구 키트 설치를 참조하세요.
Scala 플러그 인 설치
Eclipse를 열면 HDInsight Tools는 Scala 플러그 인을 설치했는지 여부를 자동으로 검색합니다. 확인을 선택하여 계속 진행한 다음 Eclipse Marketplace에서 해당 플러그 인을 설치하는 지침을 따릅니다. 설치가 완료되면 IDE를 다시 시작합니다.
플러그 인 확인
도움말>Eclipse Marketplace로 이동합니다.
설치됨 탭을 선택합니다.
다음 내용이 표시돼야 합니다:
- Azure Toolkit for Eclipse <버전>
- Scala IDE <버전>
Azure 구독에 로그인
Eclipse IDE를 시작합니다.
창>보기 표시>기타...>로그인..으로 이동합니다.
보기 표시 대화 상자에서 Azure>Azure Explorer로 이동한 후 열기를 선택합니다.
Azure Explorer에서 Azure 노드를 오른쪽 클릭한 후 로그인을 선택합니다.
Azure 로그인 대화 상자에서 인증 방법을 선택하고 로그인을 선택한 뒤 로그인 프로세스를 완료합니다.
로그인한 후에는 구독 대화 상자에 자격 증명과 연결된 모든 Azure 구독이 나열됩니다. 선택 을 클릭하여 대화 상자를 닫습니다.
Azure Explorer에서 Azure>HDInsight로 이동해서 구독 중인 HDInsight Spark 클러스터를 확인합니다.
클러스터 이름 노드를 더 확장하여 클러스터와 연결된 리소스(예: 스토리지 계정)를 표시할 수 있습니다.
클러스터 연결
Ambari 관리 사용자 이름을 사용하여 일반 클러스터를 연결할 수 있습니다. 마찬가지로, 도메인에 가입된 HDInsight 클러스터의 경우, user1@contoso.com
과 같이 도메인 및 사용자 이름을 사용하여 연결할 수 있습니다.
Azure Explorer에서 HDInsight를 우클릭한 후, 클러스터 연결을 선택합니다.
클러스터 이름, 사용자 이름, 암호를 입력하고 확인을 선택합니다. 선택적으로 스토리지 계정, 스토리지 키를 입력한 다음, Storage Explorer의 스토리지 컨테이너를 선택하여 왼쪽 트리 뷰에서 작업합니다.
참고 항목
클러스터가 Azure 구독 및 연결된 클러스터 모두에 로그인되어 있으면, 연결된 스토리지 키, 사용자 이름 및 암호를 사용합니다.
키보드 전용 사용자의 경우 현재 포커스가 스토리지 키에 있는 경우 Ctrl+TAB을 사용하여 대화 상자의 다음 필드에 포커스를 맞춰야 합니다.
HDInsight에서 연결된 클러스터를 볼 수 있습니다. 이제 애플리케이션을 연결된 클러스터에 제출할 수 있습니다.
Azure Explorer에서 클러스터 연결을 해제할 수도 있습니다.
HDInsight Spark 클러스터에 Spark Scala 프로젝트 설정
Eclipse IDE 작업 영역에서 파일> 새>프로젝트...를 선택합니다.
새 프로젝트 마법사에서 HDInsight Project>Spark on HDInsight(Scala)를 선택합니다. 그런 후 다음을 선택합니다.
새 HDInsight Scala 프로젝트 대화 상자에서 다음 값을 입력한 후 다음을 선택합니다.
- 프로젝트의 이름 을 입력합니다.
- JRE 영역에서 JRE 실행 환경 사용을 JavaSE-1.7 이상으로 설정해야 합니다.
- Spark 라이브러리 영역에서 Maven을 사용하여 Spark SDK 구성 옵션을 선택할 수 있습니다. 이 도구는 Spark SDK 및 Scala SDK에 대해 적합한 버전을 통합합니다. Spark SDK를 수동으로 추가 옵션을 선택하고 수동으로 Spark SDK를 다운로드하여 추가할 수 있습니다.
다음 대화 상자에서 세부 정보를 검토한 다음, 종료를 선택합니다.
HDInsight Spark 클러스터에 대한 Scala 애플리케이션 만들기
패키지 Explorer에서 이전에 만든 프로젝트를 확장합니다. src를 마우스 오른쪽 클릭하고 새로>만들기...를 선택합니다.
마법사 선택 대화 상자에서 Scala 마법사>Scala 개체를 선택합니다. 그런 후 다음을 선택합니다.
새 파일 만들기 대화 상자에서 개체 이름을 입력한 다음 마침을 선택합니다. 텍스트 편집기가 열립니다.
텍스트 편집기에서 현재 내용을 아래 코드로 바꿉니다.
import org.apache.spark.SparkConf import org.apache.spark.SparkContext object MyClusterApp{ def main (arg: Array[String]): Unit = { val conf = new SparkConf().setAppName("MyClusterApp") val sc = new SparkContext(conf) val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv") //find the rows that have only one digit in the seventh column in the CSV val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1) rdd1.saveAsTextFile("wasbs:///HVACOut") } }
HDInsight Spark 클러스터에서 애플리케이션 실행:
a. 패키지 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 HDInsight에 Spark 애플리케이션 제출을 선택합니다.
b. Spark 제출 대화 상자에 다음 값을 제공한 다음 제출을 선택합니다.
클러스터 이름의 경우 애플리케이션을 실행하려는 HDInsight Spark 클러스터를 선택합니다.
Eclipse 프로젝트에서 아티팩트를 선택하거나 하드 디스크에서 아티팩트를 선택합니다. 기본값은 패키지 탐색기에서 마우스 오른쪽 단추로 클릭한 항목에 따라 달라집니다.
기본 클래스 이름 드롭다운 목록에서 제출 마법사에는 프로젝트의 모든 개체 이름이 표시됩니다. 실행하려는 이름을 선택하거나 입력합니다. 하드 드라이브에서 아티팩트를 선택한 경우 주 클래스 이름을 수동으로 입력해야 합니다.
이 예제의 응용 프로그램 코드에는 명령줄 인수, 참조 JAR, 또는 파일이 불필요하므로 나머지 텍스트 상자를 비워 둬도 됩니다.
Spark 제출 탭에 진행 상태가 표시되기 시작합니다. Spark 제출 창에서 빨간색 단추를 선택하여 애플리케이션을 중지할 수 있습니다. 구형 아이콘(이미지에 파란색 상자로 표시됨)을 선택하여 특정 애플리케이션을 실행하는 로그를 볼 수도 있습니다.
Eclipse용 Azure 도구 키트의 HDInsight Tools를 사용하여 HDInsight Spark 클러스터 액세스 및 관리
HDInsight Tools를 사용하여 작업 출력에 액세스를 포함한 다양한 작업을 수행할 수 있습니다.
작업 보기 액세스
Azure Explorer에서 HDInsight를 확장한 후 Spark 클러스터 이름을 확장합니다. 그 다음에는 작업을 선택합니다.
작업 노드를 선택합니다. Java 버전이 1.8보다 낮으면 HDInsight Tools가 자동으로 E(fx)clipse 플러그인 설치를 미리 알립니다. 확인을 선택하여 계속 진행한 다음 마법사에 따라 Eclipse Marketplace에서 Eclipse를 설치하고 다시 시작합니다.
작업 노드에서 작업 보기를 엽니다. 오른쪽 창의 Spark 작업 보기 탭에는 클러스터에서 실행된 모든 애플리케이션이 표시됩니다. 자세한 내용을 보려면 원하는 애플리케이션 이름을 선택합니다.
다음 작업 중 하나를 수행할 수 있습니다.
작업 그래프로 마우스를 가져갑니다. 실행 중인 작업에 대한 기본 정보가 표시됩니다. 작업 그래프를 선택하면 모든 작업이 생성하는 단계 및 정보가 표시됩니다.
드라이버 Stderr, 드라이버 Stdout 및 디렉터리 정보와 같은 자주 사용되는 로그를 보려면 로그 탭을 선택합니다.
창 맨 위에 있는 하이퍼링크를 선택하여 Spark 기록 UI 및 Apache Hadoop YARN UI(애플리케이션 수준)를 엽니다.
클러스터에 대한 스토리지 컨테이너 액세스
Azure 탐색기에서 HDInsight 루트 노드를 확장하여 사용할 수 있는 HDInsight Spark 클러스터의 목록을 표시합니다.
클러스터 이름을 확장하여 클러스터에 대한 스토리지 계정 및 기본 스토리지 컨테이너를 표시합니다.
클러스터와 연결된 스토리지 컨테이너 이름을 선택합니다. 오른쪽 창에서 HVACOut 폴더를 두 번 클릭합니다. 파트- 파일 중 하나를 열어 애플리케이션의 출력을 표시합니다.
Spark 기록 서버 액세스
Azure 탐색기에서 Spark 클러스터 이름을 마우스 오른쪽 단추로 클릭한 다음 Spark 기록 UI 열기를 선택합니다. 메시지가 표시되면 클러스터에 대한 관리자 자격 증명을 입력합니다. 이러한 항목은 클러스터를 프로비전하는 동안 지정한 것입니다.
Spark 기록 서버 대시보드에서 애플리케이션 이름을 사용하여 방금 실행을 마친 애플리케이션을 찾을 수 있습니다. 위의 코드에서
val conf = new SparkConf().setAppName("MyClusterApp")
을 사용하여 애플리케이션 이름을 설정합니다. 따라서 Spark 애플리케이션의 이름은 MyClusterApp입니다.
Apache Ambari 포털 시작
Azure 탐색기에서 Spark 클러스터 이름을 마우스 오른쪽 단추로 클릭한 다음 클러스터 관리 포털(Ambari) 열기를 선택합니다.
메시지가 표시되면 클러스터에 대한 관리자 자격 증명을 입력합니다. 이러한 항목은 클러스터를 프로비전하는 동안 지정한 것입니다.
Azure 구독 관리
기본적으로 Eclipse용 Azure 도구 키트의 HDInsight Tool에는 모든 Azure 구독의 Spark 클러스터가 나열됩니다. 필요한 경우 클러스터에 액세스하려는 구독을 지정할 수 있습니다.
Azure 탐색기에서 Azure 루트 노드를 마우스 오른쪽 단추로 클릭한 다음 구독 관리를 선택합니다.
대화 상자에서 액세스하지 않으려는 구독의 확인란 선택을 취소하고 닫기를 선택합니다. Azure 구독에서 로그아웃하려는 경우 로그아웃을 선택할 수도 있습니다.
로컬로 Spark Scala 애플리케이션 실행
Eclipse용 Azure 도구 키트의 HDInsight Tools를 사용하여 워크스테이션에서 Spark Scala 애플리케이션을 로컬로 실행할 수 있습니다. 일반적으로 이러한 애플리케이션은 스토리지 컨테이너와 같은 클러스터 리소스에 액세스할 필요가 없으므로 로컬로 실행하고 테스트할 수 있습니다.
전제 조건
Windows 컴퓨터에서 로컬 Spark Scala 애플리케이션을 실행하는 동안 SPARK-2356에서 설명한 예외가 발생할 수 있습니다. 이 예외는 Windows에 WinUtils.exe가 없기 때문에 발생합니다.
이 오류를 해결하려면 Winutils.exe 파일을 C:\WinUtils\bin와 같은 장소에 집어넣고 HADOOP_HOME 환경 변수를 추가해 변수의 값을 C\WinUtils로 설정합니다.
로컬 Spark Scala 애플리케이션 실행
Eclipse를 시작하고 프로젝트를 만듭니다. 새 프로젝트 대화 상자에서 다음과 같이 선택하고 다음을 선택합니다.
새 프로젝트 마법사에서 HDInsight Project>Spark on HDInsight 로컬 실행 샘플(Scala)을 선택합니다. 그런 후 다음을 선택합니다.
프로젝트 세부 정보를 제공하려면 이전의 HDInsight Spark 클러스터용 Spark Scala 프로젝트 설정 섹션의 3-6단계를 따릅니다.
템플릿은 컴퓨터에서 로컬로 실행할 수 있는 샘플 코드(LogQuery)를 src 폴더 아래에 추가합니다.
LogQuery.scala 를 마우스 오른쪽 클릭하고 실행>1 Scala 응용 프로그램으로를 선택합니다. 콘솔 탭에 다음과 같은 출력이 표시됩니다.
독자 전용 역할
사용자가 판독기 전용 역할 권한이 있는 클러스터에 작업을 제출하는 경우, Ambari 자격 증명이 필요합니다.
상황에 맞는 메뉴에서 클러스터 연결
독자 전용 역할 계정으로 로그인합니다.
Azure 탐색기에서 HDInsight를 확장하여 구독에 포함된 HDInsight 클러스터를 표시합니다. "Role:Reader" 표시가 있는 클러스터에는 판독기 전용 역할 권한만 있습니다.
판독기 전용 역할 권한이 있는 클러스터를 마우스 오른쪽 단추로 클릭합니다. 상황에 맞는 메뉴에서 Link this cluster(이 클러스터 연결)를 선택하여 클러스터를 연결합니다. Ambari 사용자 이름 및 암호를 입력합니다.
클러스터가 연결되면 HDInsight가 새로 고쳐집니다. 클러스터의 단계가 연결됨으로 변경됩니다.
작업 노드를 확장하여 클러스터 연결
작업 노드를 클릭하면 Cluster Job Access Denied(클러스터 작업 액세스 거부됨) 창이 표시됩니다.
Link this cluster(이 클러스터 연결)를 클릭하여 클러스터를 연결합니다.
Spark 제출 창에서 클러스터 링크
HDInsight 프로젝트를 제작합니다.
패키지를 마우스 오른쪽 단추로 클릭합니다. 그런 다음 HDInsight에 Spark 애플리케이션 제출을 선택합니다.
클러스터를 선택합니다. 클러스터 이름에 구독자 전용 역할 권한이 있는 클러스터를 선택해야 합니다. 경고 메시지가 표시됩니다. 이 클러스터 연결을 클릭하여 클러스터를 연결합니다.
스토리지 계정 보기
판독기 전용 역할 권한이 있는 클러스터에 대해 스토리지 계정 노드를 클릭하면 Storage Access Denied(스토리지 계정 거부됨) 창이 표시됩니다.
연결된 클러스터에 대해 스토리지 계정 노드를 클릭하면 Storage Access Denied(스토리지 계정 거부됨) 창이 표시됩니다.
알려진 문제
클러스터 연결을 사용하는 경우 스토리지 자격 증명을 제공하기를 권합니다.
작업을 제출하는 두 가지 모드가 있습니다. 스토리지 자격 증명을 제공하는 경우 작업을 제출하는 데 일괄 처리 모드가 사용됩니다. 그렇지 않으면 대화형 모드가 사용됩니다. 클러스터가 사용 중인 경우 아래 오류가 발생할 수 있습니다.
참고 항목
시나리오
- BI와 Apache Spark: BI 도구와 함께 HDInsight의 Spark를 사용하여 대화형 데이터 분석 수행
- Machine Learning과 Apache Spark: HVAC 데이터를 사용하여 건물 온도를 분석하는 데 HDInsight의 Spark 사용
- Machine Learning과 Apache Spark: HDInsight의 Spark를 사용하여 식품 검사 결과 예측
- HDInsight의 Apache Spark를 사용한 웹 사이트 로그 분석
애플리케이션 만들기 및 실행
도구 및 확장
- IntelliJ용 Azure 도구 키트를 사용하여 Spark Scala 애플리케이션 만들기 및 제출
- Azure Toolkit for IntelliJ를 사용하여 VPN을 통해 원격으로 Apache Spark 애플리케이션 디버그
- Azure Toolkit for IntelliJ를 사용하여 SSH를 통해 원격으로 Apache Spark 애플리케이션 디버그
- HDInsight에서 Apache Spark 클러스터와 함께 Apache Zeppelin Notebook 사용
- HDInsight의 Apache Spark 클러스터에서 Jupyter Notebook에 사용할 수 있는 커널
- Jupyter Notebook에서 외부 패키지 사용
- 컴퓨터에 Jupyter를 설치하고 HDInsight Spark 클러스터에 연결