Java 当线程被卡住时,终止线程中运行的火花动作
我有一个java程序,它在单独的线程上使用spark将配置单元表缓存到内存中。此线程定期触发。 但有时,在缓存后运行操作(计数)(当实际缓存发生时)时,作业会被卡住 如果此操作被卡住,我想取消/终止/停止此操作 我正试图找出如何做以下两件事之一:Java 当线程被卡住时,终止线程中运行的火花动作,java,multithreading,dataframe,apache-spark,caching,Java,Multithreading,Dataframe,Apache Spark,Caching,我有一个java程序,它在单独的线程上使用spark将配置单元表缓存到内存中。此线程定期触发。 但有时,在缓存后运行操作(计数)(当实际缓存发生时)时,作业会被卡住 如果此操作被卡住,我想取消/终止/停止此操作 我正试图找出如何做以下两件事之一: 如果需要10分钟以上,请终止此操作 或者在下次再次触发线程时终止此操作(因为线程是周期性触发的) 下面是我的代码: public class MyThread extends Thread { public void run(SparkSes
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);
}
}
公共类MyThread扩展线程{
公共无效运行(SparkSession spark){
Dataset Dataset=spark.sql(“从db.table中选择*);
dataset.cache();
//这就是工作有时被卡住的地方。我想结束/取消这个
long count=dataset.count();
System.out.println(“Count=“+Count”);
}
}
由于内存问题,您的线程被卡住,您正在使用缓存()
方法将数据保存到内存中(仅内存
)
1:尝试使用persist(StorageLevel)
可以根据level指定的缓存策略在内存、磁盘或堆外内存中缓存
2:如果您使用spark submit运行作业,请在提交作业时增加以下参数
--num-executors
--executor-cores
--executor-memory
--driver-memory
解决这个问题。。。。。。