我的工作总共需要读取 620k个文件,总共 4TB 。文件数量巨大,因此我使用 CombineFileInputFormat 通过将最大拆分大小设置为512MB来减少输入拆分的数量。但是,这似乎增加了客户端作业驱动程序的大量开销。
客户端驱动程序最初达到“超出了GC开销限制”,因此我给客户端程序提供了更多的堆空间。重新启动后,似乎内存问题已消失,但是客户端程序本身运行非常缓慢。它占用了我24个内核中几乎所有的cpu资源,并且已经运行了五个小时,但到目前为止仍未将作业提交到集群。我使用jstack来获取线程转储,看来它没有卡住,只是运行缓慢。线程转储为:
有人以前遇到过类似的问题吗?我搜索了几乎所有相关文章,但没有发现任何帮助。