java - 当线程卡住时杀死在线程中运行的火花动作
问题描述
我有一个 java 程序,它使用单独线程上的 spark 将配置单元表缓存到内存中。此线程定期触发。但有时,在缓存后(实际缓存发生时)运行操作(计数)时,作业会卡住。
如果卡住了,我想取消/杀死/停止此操作。
我试图弄清楚如何做以下两件事之一:
- 如果需要超过 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);
}
}
解决方案
您的线程因内存而卡住,您正在使用cache()
将数据保存到内存的方法(MEMORY_ONLY
)
1:尝试使用persist(StorageLevel)
can根据level指定的缓存策略缓存在内存、磁盘或堆外内存中,
2:如果您正在使用 spark-submit 运行作业,请在提交作业时增加以下参数
--num-executors
--executor-cores
--executor-memory
--driver-memory
推荐阅读
- python - 无法在 VS Code 中运行 python
- mysql - 在 MySQL 的父表中删除外键约束的记录
- windows - SCCM and USMT does not perform well
- javascript - JasperReports Library Custom Visualization not rendering properly UTF8 components
- neo4j - PropertyDimension of fastRPExtended
- android-studio - Is that possible to display the emulator windows full height on the right?
- python - Telegram is having internal issues RpcCallFailError
- javascript - 防止中间人攻击
- html - Why does my grid have 3 columns when I've set grid-template-columns: repeat(2, 1fr);?
- python - Python & Matplotlib, plot multiple and different and uncontinuous time series