2017-10-20 6 views
0

snappydata cli에서 jar 파일을 실행하려고합니다.SnappyData - snappy-job - jar 파일을 실행할 수 없습니다.

처음에는 sparkSession 및 SnappyData 세션을 만들고 싶습니다. SBT 파일에서

package io.test 

import org.apache.spark.sql.{SnappySession, SparkSession} 

object snappyTest { 

    def main(args: Array[String]) { 
    val spark: SparkSession = SparkSession 
    .builder 
    .appName("SparkApp") 
    .master("local") 
    .getOrCreate 

val snappy = new SnappySession(spark.sparkContext) 
} 
} 

:

name := "SnappyPoc" 

version := "0.1" 

scalaVersion := "2.11.8" 

libraryDependencies += "io.snappydata" % "snappydata-cluster_2.11" % "1.0.0" 

내가 IDE에서 코드를 debuging있을 때, 그것은 잘 작동하지만 내가 jar 파일을 생성하고 내가 메시지를 얻을 물어에서 직접 실행하려고하면 :

"message": "Ask timed out on [Actor[akka://SnappyLeadJobServer/user/context-supervisor/snappyContext1508488669865777900#1900831413]] after [10000 ms]", 
"errorClass": "akka.pattern.AskTimeoutException", 

나는 Spark Standalone 2.1.1, SnappyData 1.0.0을 가지고 있습니다. Spark 인스턴스에 종속성을 추가했습니다.

도와 주시겠습니까? 고맙습니다.

답변

0

isValidJob 및 runSnappyJob 메서드가 누락되었다고 생각합니다. 코드를 추가 할 때 작동하지만, metod runSnappyJob과 메소드 메인과의 관련성이 무엇인지 알아야합니다.

둘 모두에서 동일해야합니까?

0

"임베디드"모드와 "스마트 커넥터"모드의 차이점을 먼저 설명해야합니다.

일반적으로 spark-submit을 사용하여 작업을 실행하면 구성에 따라 코드를 실행하는 새 실행 프로그램 JVM 세트가 생성됩니다. 그러나 SnappyData의 임베디드 모드에서 데이터를 호스팅하는 노드는 장기 실행 스파크 실행자를 호스트합니다. 이는 데이터 이동 (즉, 데이터가 아닌 실행 이동)을 최소화하기 위해 수행됩니다. 이 모드에서는 snappy-job.sh를 사용하여 작업을 제출할 수 있습니다.이 작업은 기존 실행자에 대한 코드를 실행합니다. 다른 경로로는 임베디드 실행을위한 JDBC/ODBC가 있습니다. 이것은 임베디드 작업을 실행하기 위해 spark-submit을 사용할 수 없다는 것을 의미하기 때문에 자체 JVM을 생성 할 수 있습니다.

"스마트 커넥터"모드는 다른 스파크 커넥터가 작동하는 일반적인 방법이지만 모든 데이터는 실행기 JVM에 필요한 데이터를 가져와야하므로 단점이 있습니다. 따라서 임베디드 모드보다 느립니다. 동일한 구성을 위해서는 SnappyData 클러스터의 로케이터에서 실행되는 중고품 서버를 가리 키도록 "snappydata.connection"속성을 지정해야합니다. 사용자가 클러스터의 실행 용량을 확장하려는 경우 (예 : 클러스터의 임베디드 실행이 CPU에서 항상 포화 된 경우) 또는 기존의 Spark 배포/배포에 유용합니다. 말할 필요도없이 spark-submit은 커넥터 모드에서 잘 작동합니다. 이 모드에 대해 "스마트"한 것은 다음과 같습니다. a) 데이터를 호스트하는 실행 노드와 실행 프로그램 실행자가 공통적 인 경우, 네트워크 사용을 최소화하기 위해 가능한 한 많이 실행 프로그램에 라우팅됩니다. b) 최적화 된 SnappyData 계획을 사용합니다. 테이블 스캔, 해시 집계, 해시 조인.

이 특정 질문에 대한 대답은 다음과 같습니다. runSnappyJob은 SnappySession 개체를 생성하는 대신 인수로 사용합니다. SnappySession을 사용하는 본문의 나머지 부분은 완전히 동일합니다. 마찬가지로 기본 SparkContext로 작업 할 때 SparkJob을 구현하는 것이 더 쉬울 수 있으며 SparkContext가 사용해야하는 함수 인수로 제공된다는 점을 제외하면 코드는 유사합니다. 위에 설명 된 이유 : 임베디드 모드에는 이미 작업에 사용해야하는 실행중인 SparkContext가 있습니다.

+0

고마워, 이제 지금 내가하고있는 일;) – Tomtom