2014-10-16 2 views
1

IntelliJ 내부에서 실행중인 스칼라 스파크 스트리밍 응용 프로그램이 있습니다. 내가 로컬 [2]를 상대로 달리면 잘 돌아갑니다. 내가 촉발 할 수있는 마스터를 설정 한 경우 : // masterip :Spark 독립형 응용 프로그램 및 종속성 스트리밍

java.lang.ClassNotFoundException: RmqReceiver 

내가 RmqReceiver라는 같은 프로젝트에서 구현되는 사용자 정의 수신기를 가지고 있음을 추가해야합니다 : 포트, 그때 나는 다음과 같은 예외를 얻을. 이것은 내 앱 코드입니다.

import akka.actor.{Props, ActorSystem} 
import org.apache.spark.streaming.{Seconds, StreamingContext} 
import org.apache.spark.{SparkContext, SparkConf} 

object Streamer { 
    def main(args:Array[String]): Unit ={ 
    val conf = new SparkConf(true).setMaster("spark://192.168.40.2:7077").setAppName("Streamer") 
    val sc = new SparkContext(conf) 
    val ssc = new StreamingContext(sc, Seconds(2)) 
    val messages = ssc.receiverStream(new RmqReceiver(...)) 
    messages.print() 
    ssc.start() 
    ssc.awaitTermination() 
    } 
} 

RmqReceiver 클래스는 Streamer와 동일한 스칼라 폴더에 있습니다. 의존성에 대해 --jars를 사용하여 spark-submit을 사용하면이 작업이 가능할 것이라는 점을 이해합니다. 응용 프로그램 내부에서이 작업을 수행 할 수있는 방법이 있습니까?

답변

2

독립 실행 형 스파크 클러스터에서 작업을 실행하려면 응용 프로그램에서 사용되는 모든 클래스에 대해 알아야합니다. 따라서 시작할 때 클래스 경로를 시작할 수 있도록 추가 할 수 있습니다. 어렵고 그렇게 할 것을 제안하지 않습니다.

응용 프로그램을 uber-jar로 패키지하고 (모든 종속성을 단일 jar 파일로 압축해야 함) SparkConf jars에 추가해야합니다.

우리는 sbt-assembly 플러그인을 사용합니다. 당신이 받는다는을 사용하는 경우, 그것은 당신이 인 IntelliJ 아이디어에서 그것을 DP 수 있다고 생각하지 않습니다 받는다는 조립

val sparkConf = new SparkConf(). 
    setMaster(config.getString("spark.master")). 
    setJars(SparkContext.jarOfClass(this.getClass).toSeq) 

와 동일한 기능을 가지고, 당신은 확실히 SBT 테스트 단계의 일환으로 그것을 할 수 있습니다.

+0

감사합니다. 도움이됩니다. sbt 테스트 단계 비트를 확장 할 수 있습니까? 이는 빌드 단계에서 항아리를 만들고 테스트 단계에서이를 사용한다는 것을 의미합니까? 감사. – ashic

+0

@ashic 블로그 게시물을 작성하여 독립 실행 형 클러스터에서 스파크 테스트를 실행하는 방법 : http://eugenezhulenev.com/blog/2014/10/18/run-tests-in-standalone-spark-cluster/ –

+0

awesome .. .감사 :) – ashic

관련 문제