首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SnappyData - snappy-job -无法运行jar文件

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

Stack Overflow用户
提问于 2017-10-20 16:45:37
回答 2查看 121关注 0票数 0

我正在尝试从snappydata cli运行jar文件。

我只想在开始时创建一个sparkSession和SnappyData会话。

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
name := "SnappyPoc"

version := "0.1"

scalaVersion := "2.11.8"

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

当我在IDE中调试代码时,它工作得很好,但当我创建一个jar文件并尝试直接在snappy上运行它时,我收到消息:

代码语言:javascript
复制
"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实例添加了依赖项。

你能帮帮我吗?提前感谢。

EN

回答 2

Stack Overflow用户

发布于 2017-10-23 20:00:48

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

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

“智能连接器”模式是其他Spark连接器的正常工作方式,但像所有这些模式一样,它的缺点是必须将所需的数据拉入executor JVM中,因此将比嵌入式模式慢。要进行相同的配置,必须指定"snappydata.connection“属性以指向在SnappyData集群的定位器上运行的thrift服务器。对于用户想要扩展集群的执行能力的许多情况(例如,如果集群的嵌入式执行总是在CPU上饱和),或者对于现有的Spark分发/部署,它都很有用。不用说,spark-submit可以在连接器模式下工作得很好。这种模式的“聪明”之处在于: a)如果托管数据和运行执行器的物理节点很常见,那么分区将被尽可能多地路由到这些执行器,以最小化网络使用;b)将使用优化的SnappyData计划来扫描表、散列聚合、散列连接。

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

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 17:46:56

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

两者应该是一样的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46845440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档