我知道我們可以設置屬性「mapred.job.reuse.jvm.num.tasks」來重用JVM。我的問題是:在Hadoop mapreduce作業中重用JVM
(1)如何確定要設置的任務數量,-1或其他一些正整數?
(2)它已經重新使用的JVM,並且此屬性設置爲-1 MapReduce作業的價值是一個好主意?
非常感謝!
我知道我們可以設置屬性「mapred.job.reuse.jvm.num.tasks」來重用JVM。我的問題是:在Hadoop mapreduce作業中重用JVM
(1)如何確定要設置的任務數量,-1或其他一些正整數?
(2)它已經重新使用的JVM,並且此屬性設置爲-1 MapReduce作業的價值是一個好主意?
非常感謝!
如果有,是經過對方肯定是運行非常小的任務,它是有用的這一屬性設置爲-1(意思是催生了JVM將被重用無限次)。 所以你只是產卵了(羣集中任務可用於你的工作的數量)-JVM而不是(任務數量)-JVM。
這是一個巨大的性能改進。在長時間運行的作業中,運行時比較設置新JVM的百分比非常低,所以它不會給你帶來巨大的性能提升。
同樣在長時間運行的任務中,重新創建任務進程是很好的,因爲諸如堆碎片之類的問題會降低性能。
此外,如果你有一些中期時間運行的作業,你可以只重用的任務2-3,具有很好的權衡。
JVM重用(僅在MR1可能)應該表現幫助,因爲它消除了JVM的啓動滯後,但它僅僅是邊緣的,自帶的一些缺點(讀副作用。大多數任務會很長時間運行(幾十秒甚至幾分鐘)和啓動時間並不是問題,當你看到這些任務運行時間時,你想在乾淨的平板上開始一個新的任務,當你重新使用JVM時,有可能堆不是完全乾淨的(這是從前面的運行中分割出來的),碎片會導致更多的GC,並且使所有啓動時間增加無效,如果存在內存泄漏,它也可能影響內存的使用等等。爲這些任務啓動一個新的JVM(如果這些任務不是很小)在MR2(YARN)中 - 新的JVM總是爲這些任務啓動,對於Uber任務 - 它只會在本地JVM中運行任務
如果您啓用超級任務,可以映射器並減少共享相同的JVM嗎?還是像映射器可以共享相同的JVM和reducer可以共享相同的JVM? – MikA