2017-10-20 103 views
0

我想從snappydata cli運行jar文件。SnappyData - snappy-job - 無法運行jar文件

我只想在開始時創建sparkSession和SnappyData會話。

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) 
} 
} 

從SBT文件:

name := "SnappyPoc" 

version := "0.1" 

scalaVersion := "2.11.8" 

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

當我在IDE調試運行的代碼,它工作正常,但是當我創建了一個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的嵌入模式下,承載數據的節點本身也承載長時間運行的Spark Executors。這樣做是爲了儘量減少數據移動(即移動執行而不是數據)。對於該模式,您可以提交一份工作(使用snappy-job.sh),該工作將運行那些預先存在的執行程序上的代碼。備選路由包括用於嵌入式執行的JDBC/ODBC。這也意味着你還不能使用spark-submit運行嵌入式作業,因爲它會產生自己的JVM。

「智能連接器」模式是其他Spark連接器正常工作的常用方式,但是與所有這些模式一樣,必須將所需數據拉入執行器JVM中,因此速度將低於嵌入模式。爲了配置相同,必須指定「snappydata.connection」屬性指向在SnappyData集羣的定位器上運行的節點服務器。對於許多用戶想要擴展羣集執行能力的情況(例如,如果羣集的嵌入式執行在CPU上始終飽和)或現有的Spark發行版/部署,這種情況非常有用。不用說spark-submit可以在連接器模式下正常工作。這種模式的「智能」是:a)如果承載數據和運行執行程序的物理節點很常見,那麼分區將盡可能路由到那些執行程序以最大限度地減少網絡使用,b)將使用優化的SnappyData計劃掃描表,散列聚合,散列連接。

對於這個特定的問題,答案是:runSnappyJob將接收SnappySession對象作爲應該使用的參數,而不是創建它。其餘使用SnappySession的機構將完全相同。同樣,對於使用基本SparkContext,實現SparkJob可能更容易,代碼將類似,只不過SparkContext將作爲應該使用的函數參數提供。原因如上所述:嵌入模式已經有一個正在運行的SparkContext,它需要用於作業。

+0

謝謝,現在我現在正在做什麼;) – Tomtom