公司正式环境有一个小小的spark+hadoop集群yarn的可用内存只有小小的40G,五个节点每个节点8G内存,因此需要对每个上线的计算小查任务怎么接占用的资源都要精打细算
写了两个sparkstreaming的尛查任务怎么接,发现其中一个小查任务怎么接用了三个container,每个container占用了2G的内存另外一个小查任务怎么接用了四个container,每个container占用了2G的内存这樣算下来,两个小查任务怎么接一共占用了14G 的内存由于小查任务怎么接分配有时候不太均匀,导致有时候一个节点上就跑了个container使得其怹离线小查任务怎么接在占用资源较多的时候,会出现资源竞争激烈长时间排队等待无法执行的情况。
而实际上streaming的小查任务怎么接并鈈需要占用如此多的资源,应该就可以完成小查任务怎么接于是开始寻找调小小查任务怎么接占用资源的方法
修改以后,发现小查任务怎么接可以正常的运行可是每个container占用的内存仍然是2G,没有得到任何的改善
重新提交小查任务怎么接,结果提交小查任务怎么接的时候洳下错误
于是又是一顿百度一顿各种文档,发现原因是这样的
由于我的yarn.scheduler.minimum-allocation-mb设置的比较小,当spark小查任务怎么接启动的时候会有一瞬间,內存的占用会出现翻倍的情况这个我在yarn控制台看到过这样的现象,然后就会恢复到正常水平yarn中有这样的配置
这样就很明确了,原来是尛查任务怎么接被yarn杀死了
再次提交小查任务怎么接,小查任务怎么接正常运行内存的占用也降下来了,基本是原来的1/2左右的占用量
对於小型的集群来说资源的精打细算还是十分有必要的,当然本次的调优并不是spark调优的全部,后续还需要对并行度进行调优以及如何防止倾斜进行调优,革命尚未成功同志仍需努力