SnappyData - snappy-job - 无法运行jar文件

时间:2017-10-20 08:45:37

标签: apache-spark snappydata

我正在尝试从snappydata cli运行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文件并尝试直接在snappy上运行时,我收到消息:

"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实例添加了依赖项。

你可以帮帮我吗?谢谢高级。

2 个答案:

答案 0 :(得分:1)

"嵌入式"之间的区别模式和"智能连接器"需要首先解释模式。

通常,当您使用spark-submit运行作业时,它会根据配置生成一组新的执行程序JVM以运行代码。但是在SnappyData的嵌入模式中,托管数据的节点也会托管长时间运行的Spark Executors。这样做是为了最小化数据移动(即移动执行而不是数据)。对于该模式,您可以提交一个作业(使用snappy-job.sh),该作业将在这些预先存在的执行程序上运行代码。备用路由包括用于嵌入式执行的JDBC / ODBC。这也意味着你不能(还)使用spark-submit来运行嵌入式作业,因为这将产生自己的JVM。

"智能连接器" mode是其他Spark连接器工作的常规方式,但是所有这些连接器的缺点是必须将所需数据拉入执行程序JVM,因此比嵌入模式慢。为了配置相同的,必须指定" snappydata.connection"指向在SnappyData集群定位器上运行的thrift服务器的属性。对于用户希望扩展集群执行能力的许多情况(例如,如果集群的嵌入式执行在CPU上一直饱和),或者对于现有的Spark分发/部署,它很有用。毋庸置疑,spark-submit可以在连接器模式下正常工作。什么是" smart"关于这种模式是:a)如果托管数据的物理节点和运行执行器是常见的,那么分区将尽可能地路由到那些执行器以最小化网络使用,b)将使用优化的SnappyData计划来扫描表,哈希聚合,散列连接。

对于这个特定的问题,答案是:runSnappyJob将接收SnappySession对象作为参数,应该使用它而不是创建它。使用SnappySession的其他身体将完全相同。同样,对于使用基本SparkContext,实现SparkJob可能更容易,并且代码将类似,除了SparkContext将作为应该使用的函数参数提供。原因如上所述:嵌入式模式已经有一个运行的SparkContext,需要用于作业。

答案 1 :(得分:0)

我认为缺少方法isValidJob和runSnappyJob。 当我将这些添加到代码中时,它可以工作,但是知道某人是什么是metod runSnappyJob和方法主要的主体

两者应该相同吗?