2016-08-11 2 views
1

Spark 작업을 REST API로 실행하고 Spark 용 스칼라를 사용하고 싶습니다. 나는 스프링 프레임 워크와 함께 혼합 된 Java & 스칼라 프로젝트를 가지고있다. 나는 SparkContext를 생성하고 REST API에 의해 어떤 일을하는 Scala 메소드를 호출 할 수있다. 로컬이 아닌 마스터 리모컨을 설정할 때 문제가 발생합니다.Spring RESTful 서비스에서 스파크 작업 실행

val conf = new SparkConf().setAppName("App").setMaster("local") 
val sc = new SparkContext(conf) 

괜찮지 만,

val conf = new SparkConf().setAppName("App").setMaster(" spark://10.122.221.164:7077") 
val sc = new SparkContext(conf) 

java.lang.ClassNotFoundException됩니다. 지금까지 찾을 수

솔루션은 지방 항아리를 만들고 conf.setJars(...)을, 또는 ProcessBuilder 같은 것을 통해 spark-submit 스크립트를 사용하고 있습니다.

내 현재 설정에는 Tomcat 등에서 실행하기 위해 war 파일에 압축 된 Spark Scala 코드가 포함 된 Spring 프로젝트 만 있으므로 뚱뚱보가 없습니다. Spring 프로젝트와 각기 다른 Scala 애플리케이션을 fat-jar로 묶고 싶지는 않습니다. 간단하고 합리적인 아키텍처를 어떻게 내놓을 수 있습니까?

+0

왜 Maven을 사용하고 pom.xml에 종속성을 추가하지 않습니까? 나는 봄과 불꽃을 함께 사용했다. 시도해보고 알려줘. – Dip

+0

@Dip 이미 Maven을 사용하고 있습니다. 나는 팻 항아리를 만들기 위해'mvn package'를 사용할 수 있습니다,하지만 저는 왜이 Spring 프로젝트와 Spark 드라이버 앱을 분리해야하는지 이해하지 못합니다. – groove

답변

0

ClassNotFoundException을주는 클래스는 무엇입니까? Spark 애플리케이션은 해당 클래스에 대한 의존성이 있으므로 Spark 애플리케이션과 함께 패키징해야한다는 것이 분명합니다.

모든 jar를 사용할 수 있기 때문에 로컬에서 작동하지만 원격에서는 종속성 jar를 드라이버/executor로 전송해야합니다.

스파크 제출을 실행하면 - jars를 사용하여 지정된 종속성 병이 전송됨을 알 수 있습니다.

SparkConf.setJars를 사용하여 uber jar를 만들거나 종속성 병을 지정할 수 있습니다.

Maven Shade 플러그인을 사용하여 uber jar를 만들고 번들해야하는 jar를 지정할 수 있습니다.

또한 SparkLauncher을 사용하여 Spark 응용 프로그램을 시작하지 않는 이유는 무엇입니까?

+0

SparkContext를 Spring 웹 애플리케이션의 메소드로 호출하는 방법은 로컬에 구성되어 있지 않은 한 그렇게 할 방법이 없습니까? SparkLauncher를 사용하더라도 Spark 어플리케이션을위한 팻 (fat jar)을 만들어야하므로 두 개의 다른 프로젝트가 필요합니다. Maven 어셈블리 플러그인을 사용합니다. Maven Shade와 유사하다고 생각합니다. – groove

+0

spark 신청서를 제출하는 유일한 방법은 spark-submit 또는 SparkLauncher를 이용하는 것입니다. SparkConf/SparkContext는 응용 프로그램을 시작하고 스파크 응용 프로그램을 실행하지 않도록 초기화합니다. 예, 팻 (fat jar)을 만들거나 의존성 항아리를 지정해야합니다. –