java—在线程被卡住时杀死在线程中运行的spark操作

jdgnovmf  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(553)

我有一个java程序,它在一个单独的线程上使用spark将配置单元表缓存到内存中。此线程定期触发。但有时,在缓存后运行操作(count)(当实际缓存发生时)时,作业会卡住。
如果这个动作卡住了,我想取消/终止/停止它。
我想知道如何做以下两件事之一:
如果需要10分钟以上,请取消此操作。
或者在下次线程再次被触发时终止此操作(因为线程是周期性触发的)。
下面是我的代码:

public class MyThread extends Thread {

    public void run(SparkSession spark) {

        Dataset<Row> dataset = spark.sql("select * from db.table");
        dataset.cache();

        // This is where job gets stuck sometimes. I want to kill/cancel this
        long count = dataset.count();

        System.out.println("Count = " + count);

    }
}
hgtggwj0

hgtggwj01#

因为内存问题,你的线程被卡住了,你正在使用 cache() 将数据保存到内存的方法( MEMORY_ONLY )
1:尽量用 persist(StorageLevel) 可以根据级别指定的缓存策略在内存、磁盘或堆外内存中进行缓存,
2:如果您使用spark submit运行作业,请在提交作业时增加以下参数

--num-executors 
--executor-cores  
--executor-memory 
--driver-memory

相关问题