0

我正在尝试从 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 实例添加了依赖项。

你可以帮帮我吗 ?。感谢先进。

4

2 回答 2

1

“嵌入式”模式和“智能连接器”模式的区别需要先解释一下。

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

“智能连接器”模式是其他 Spark 连接器工作的正常方式,但与所有这些连接器一样,具有必须将所需数据拉入执行程序 JVM 的缺点,因此会比嵌入式模式慢。对于相同的配置,必须指定“snappydata.connection”属性以指向运行在 SnappyData 集群定位器上的 thrift 服务器。它适用于用户想要扩展集群执行能力的许多情况(例如,如果集群的嵌入式执行在 CPU 上一直处于饱和状态),或者对于现有的 Spark 分发/部署。不用说 spark-submit 可以在连接器模式下正常工作。这种模式的“聪明”之处在于:a)如果托管数据和运行执行器的物理节点很常见,

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

于 2017-10-23T12:00:47.807 回答
0

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

两者应该相同吗?

于 2017-10-20T09:46:55.973 回答