我有一个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);
}
}
1条答案
按热度按时间hgtggwj01#
因为内存问题,你的线程被卡住了,你正在使用
cache()
将数据保存到内存的方法(MEMORY_ONLY
)1:尽量用
persist(StorageLevel)
可以根据级别指定的缓存策略在内存、磁盘或堆外内存中进行缓存,2:如果您使用spark submit运行作业,请在提交作业时增加以下参数