创建许多短命的SparkSessions

时间:2017-03-25 07:02:11

标签: apache-spark

我有一个应用程序来编排批处理作业执行,我想为每个作业执行创建一个SparkSession - 特别是为了清楚地分离已注册的临时视图,函数等。

因此,这将导致每天数以千计的SparkSessions,这只会在工作期间(从几分钟到几个小时)生效。有没有争论不这样做?

我知道每个JVM只有一个SparkContext这个事实。我也知道SparkContext执行一些JVM全局缓存,但这对于这种情况究竟意味着什么呢?什么是例如缓存在SparkContext中,如果使用这些会话执行了许多火花作业,会发生什么?

1 个答案:

答案 0 :(得分:1)

这显示了如何使用不同的配置构建多个会话

使用

spark1.clearActiveSession();

spark1.clearDefaultSession();

要清除会话。

 SparkSession spark1 = SparkSession.builder()
            .master("local[*]")
            .appName("app1")
            .getOrCreate();
    Dataset<Row> df = spark1.read().format("csv").load("data/file1.csv");
    df.show();
    spark1.clearActiveSession();
    spark1.clearDefaultSession();
    SparkSession spark2 = SparkSession.builder()
            .master("local[*]")
            .appName("app2")
            .getOrCreate();
    Dataset<Row> df2 = spark1.read().format("csv").load("data/file2.csv");
    df2.show();

对于您的问题。 Spark上下文将rdds保存在内存中,以加快处理速度。 如果有大量数据。保存表或rdds将移至hdd。 如果会话在任何时候都另存为视图,则可以访问表。 最好使用唯一的ID为您的作业执行多个spark-submit,而不要使用不同的配置。