- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现,随着Spark运行,并且表的大小增加(通过Joins),Spark执行程序最终将耗尽内存,整个系统崩溃。即使我尝试将临时结果写入Hive表(在HDFS上),系统仍然不会释放太多内存,并且大约130个连接后,整个系统崩溃。
但是,通过实验,我意识到,如果将问题分解为较小的部分,将临时结果写入配置单元表,然后停止/启动Spark session (以及Spark上下文),那么系统的资源将被释放。使用这种方法,我能够加入1000多个专栏。
但是我找不到任何文档来理解这是否是一种好的做法(我知道您不应该一次获得多个 session )。大多数系统在开始时获取 session ,然后在结束时关闭 session 。我还可以将应用程序分解为较小的应用程序,并使用Oozie之类的驱动程序在Yarn上调度这些较小的应用程序。但是这种方法将在每个阶段启动和停止JVM,这似乎有点繁重。
所以我的问题是:在单个spark应用程序运行期间连续启动/停止spark session 以释放系统资源是不好的做法吗?
但是,您能否详细说明单个JVM上的单个SparkContext的含义?我可以调用sparkSession.sparkContext().stop()
,也可以stop
调用SparkSession
。然后,我创建了一个新的SparkSession
并使用了一个新的sparkContext
。没有引发任何错误。
我也可以在JavaSparkPi
上使用它,而没有任何问题。
我已经在yarn-client
和local
spark安装中对此进行了测试。
停止spark上下文到底有什么用?为什么停止了Spark上下文后又不能创建它呢?
最佳答案
TL; DR 您可以根据需要具有许多SparkSession
。
在单个JVM上可以只有一个SparkContext
,但是SparkSession
的数量几乎是无限的。
But can you elaborate on what you mean by a single SparkContext on a single JVM?
SparkContext
。
SparkContext
所在的位置(或者相反,而
SparkContext
定义了驱动程序-区别非常模糊)。
SparkContext
。尽管您可以根据需要启动和停止它多次,但是我记得有一个问题,即您不应该关闭
SparkContext
,除非您已经完成了Spark的操作(通常发生在Spark应用程序的最后)。
SparkContext
。
SparkSession
,存在一个类似的问题
What's the difference between SparkSession.sql vs Dataset.sqlContext.sql?,可以进一步说明为什么要进行两个或多个 session 。
I was able call
sparkSession.sparkContext().stop()
, and alsostop
theSparkSession
.
SparkContext
。没有大碍。您可以,但这只是“在单个JVM上只能有一个且只有一个
SparkContext
”的一部分,不是吗?
SparkSession
只是
SparkContext
的包装,可在Spark Core的RDD之上提供Spark SQL的结构化/SQL功能。
SparkSession
的目的是成为查询实体(例如表, View 或查询所使用的函数(如DataFrames,Datasets或SQL)和Spark属性(每个
SparkSession
可能具有不同的值)的 namespace ) )。
SparkSession
。
// both where and select operators support whole-stage codegen
// the plan tree (with the operators and expressions) meets the requirements
// That's why the plan has WholeStageCodegenExec inserted
// You can see stars (*) in the output of explain
val q = Seq((1,2,3)).toDF("id", "c0", "c1").where('id === 0).select('c0)
scala> q.explain
== Physical Plan ==
*Project [_2#89 AS c0#93]
+- *Filter (_1#88 = 0)
+- LocalTableScan [_1#88, _2#89, _3#90]
// Let's break the requirement of having up to spark.sql.codegen.maxFields
// I'm creating a brand new SparkSession with one property changed
val newSpark = spark.newSession()
import org.apache.spark.sql.internal.SQLConf.WHOLESTAGE_MAX_NUM_FIELDS
newSpark.sessionState.conf.setConf(WHOLESTAGE_MAX_NUM_FIELDS, 2)
scala> println(newSpark.sessionState.conf.wholeStageMaxNumFields)
2
// Let's see what's the initial value is
// Note that I use spark value (not newSpark)
scala> println(spark.sessionState.conf.wholeStageMaxNumFields)
100
import newSpark.implicits._
// the same query as above but created in SparkSession with WHOLESTAGE_MAX_NUM_FIELDS as 2
val q = Seq((1,2,3)).toDF("id", "c0", "c1").where('id === 0).select('c0)
// Note that there are no stars in the output of explain
// No WholeStageCodegenExec operator in the plan => whole-stage codegen disabled
scala> q.explain
== Physical Plan ==
Project [_2#122 AS c0#126]
+- Filter (_1#121 = 0)
+- LocalTableScan [_1#121, _2#122, _3#123]
I then created a new
SparkSession
and used a newSparkContext
. No error was thrown.
SparkContext
可用的说法有何矛盾?我很好奇。
What exactly does stopping the spark context do, and why can you not create a new one once you've stopped one?
SparkContext
关于apache-spark - 一个应用程序可以有多少个SparkSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47723761/
我正在学习 Spark,对 Spark 的目录感到困惑。 我在SparkSession中找到了一个catalog,它是CatalogImpl的一个实例,如下 /** * Interface
我在 main() 中创建了一个 session 函数,像这样: val sparkSession = SparkSession.builder.master("local[*]").appName(
我创建了一个本地Spark集群和一个Spark session ,如下所示 val sparkConf = new SparkConf(true).setAppName("test").setMast
在我的应用程序中,我正在创建一个 SparkSession对象,然后尝试读取我的属性文件并在运行时设置属性。但它没有选择我在运行时传递的属性。 我正在以 YARN 集群模式提交我的应用程序 这是我在
如何在Java中使用builder创建sparkSession?我已经尝试过这个: sparkSession = SparkSession.builder() .master("local[*
我有一个 pyspark 2.0.0 脚本,其中定义了以下 session : spark = SparkSession \ .builder \ .appName("Python S
我的操作系统是 windows 10 from pyspark.conf import SparkConf sc = SparkContext.getOrCreate() spark = SparkS
我正在尝试运行一个简单的 Spark Structured Streaming 作业,但是在 SparkSession 上调用 getOrCreate() 时出现错误... 我这样创建 SparkSe
我的 Spark 代码充斥着这样的代码 object Transformations { def selectI(df:DataFrame) : DataFrame = { //
如何创建 sparksession? scala> import org.apache.spark.SparkConf import org.apache.spark.SparkConf scala>
我正在尝试使用 SparkSession 将文件的 JSON 数据转换为带有 Spark Notebook 的 RDD。我已经有了 JSON 文件。 val spark = SparkSession
下面2个有什么区别? object Example1 { def main(args: Array[String]): Unit = { try { v
我的 spark 应用程序中有一个从 MySQL 数据库加载数据的方法。该方法看起来像这样。 trait DataManager { val session: SparkSession def loa
我将https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/ml/R
当我启动 pyspark 时,会自动生成一个 SparkSession 并作为“spark”提供。我想打印/查看 spark session 的详细信息,但在访问这些参数时遇到很多困难。 Pyspar
我有一些单元测试需要有自己的 sparkSession。我扩展了 SQLTestUtils,并覆盖了在许多其他 Spark 单元测试中使用的 beforeAll 和 afterAll 函数(来自源代码
我想创建一个 pyspark 数据框,其中一列指定名称包含一系列整数(这是为了输入 ALS 模型的 suggestForUserSubset 方法)。 所以我使用范围创建了一个整数列表,并发现 thi
I cannot import SparkSession from pyspark.sql,but i can import Row 我的spark-1.6.0-bin-hadoop2.6安装在doc
我在本地机器上运行 spark 2、hive、hadoop,我想使用 spark sql 从 hive 表中读取数据。 当我在默认 hdfs://localhost:9000 下运行 hadoop 时
我有一个pyspark程序,有多个独立的模块,每个模块都可以独立处理数据,以满足我的各种需求。但它们也可以链接在一起以在管道中处理数据。这些模块中的每一个都构建一个 SparkSession 并自行完
我是一名优秀的程序员,十分优秀!