我有一个 Spark 应用程序 (2.4.5),使用 Kafka 作为使用大批处理窗口(5 分钟)的源,在我们的应用程序中,我们只真正关心该特定间隔的 RDD 来处理数据。
发生的情况是,我们的应用程序时常崩溃,要么是驱动程序上出现 OutOfMemory 异常(在客户端模式下运行),要么是执行程序上出现 GC OutOfMemory。经过大量研究后,我们似乎没有正确处理状态,导致血统无限增长。我们考虑通过使用批处理方法来解决该问题,在该方法中,我们控制从 Kafka 获取的偏移量并从中创建 RDD(这将截断沿袭),或者启用检查点。
在调查过程中,有人发现了一个不太相似的问题,通过调整一些 UI 参数解决了这个问题(Yarn Heap 使用量随着时间的推移而增长):
由于这些是 UI 参数,因此它们会影响应用程序的内存使用情况对我来说没有意义,除非它们影响应用程序存储发送到 UI 的信息的方式。早期测试表明,应用程序确实运行时间更长,没有出现 OOM 问题。
谁能解释一下这些参数对应用程序有什么影响?它们真的会影响应用程序的内存使用吗?我是否应该研究任何其他参数来了解整个情况(我想知道是否有一个“因素”参数需要调整,以便内存分配适合我们的情况)?
谢谢
当我在禁用宏时出现以下代码时,我正在使用宏来启用/禁用跟踪:
int main()
{
("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
这段代码是有效的,我得到了预期的效果(当宏被禁用时没有任何反应),但我无法弄清楚到底发生了什么.编译器是否将括号视为"无名"方法声明?
为了使代码更清晰,代码是:
#ifdef TRACE
#define trace printf("%s %d -> ",__FILE__, __LINE__);printf
else
#define trace
#endif
int main()
{
trace("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.