Hadoop的JVM重用 (R2)
Hadoop中有個引數是mapred.job.reuse.jvm.num.tasks,預設是1,表示一個JVM上最多可以順序執行的task數目(屬於同一個Job)是1。也就是說一個task啟一個JVM。
比如我配的是每個slave節點最多同時執行8個map和8個reduce。那麼在map階段,slave節點會啟動最多8個JVM用於map。如下:
root@slave1:~# jps
28291 Child
28290 Child
28281 Child
28293 Child
28277 Child
1487 DataNode
28298 Child
28273 Child
28272 Child
1636 TaskTracker
28799 Jps
root@slave1:~# ps -e | grep java
1487 ? 00:53:26 java |
TaskTracker |
1636 ? 00:12:42 java |
DataNode |
28272 ? 00:00:35 java |
Child |
28273 ? 00:00:35 java |
Child |
28277 ? 00:00:36 java |
Child |
28281 ? 00:00:36 java |
Child |
28290 ? 00:00:36 java |
Child |
28291 ? 00:00:37 java |
Child |
28293 ? 00:00:36 java |
Child |
28298 ? 00:00:36 java |
Child |
其中前兩個是固定的程式。
為每個task啟動一個新的JVM將耗時1秒左右,對於執行時間較長(比如1分鐘以上)的job影響不大,但如果都是時間很短的task,那麼頻繁啟停JVM會有開銷。
如果我們想使用JVM重用技術來提高效能,那麼可以將mapred.job.reuse.jvm.num.tasks設定成大於1的數。這表示屬於同一job的順序執行的task可以共享一個JVM,也就是說第二輪的map可以重用前一輪的JVM,而不是第一輪結束後關閉JVM,第二輪再啟動新的JVM。
那麼最多一個JVM能順序執行多少個task才關閉呢?這個值就是mapred.job.reuse.jvm.num.tasks。如果設定成-1,那麼只要是同一個job的task(無所謂多少個),都可以按順序在一個JVM上連續執行。
如果task屬於不同的job,那麼JVM重用機制無效,不同job的task需要不同的JVM來執行。
注意:
JVM重用技術不是指同一Job的兩個或兩個以上的task可以同時執行於同一JVM上,而是排隊按順序執行。
一個tasktracker最多可以同時執行的task數目由mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum
決定,並且這兩個引數在mapred-site.xml中設定。其他方法,如在JobClient端透過命令列
-Dmapred.tasktracker.map.tasks.maximum=number或者conf.set("mapred.tasktracker.map.tasks.maximum","number")設定都是無效的。
附《Hadoop權威指南》上的介紹:
Task JVM Reuse
Hadoop runs tasks in their own Java Virtual Machine to isolate them from other running tasks. The overhead of starting a new JVM for each task can take around a second, which for jobs that run for a minute or so is insignificant. However, jobs that have a large number of very short-lived tasks (these are usually map tasks), or that have lengthy initialization, can see performance gains when the JVM is reused for subsequent tasks.
With task JVM reuse enabled, tasks do not run concurrently in a single JVM. The JVM runs tasks sequentially. Tasktrackers can, however, run more than one task at a time, but this is always done in separate JVMs. The properties for controlling the tasktrackers number of map task slots and reduce task slots are discussed in “Memory” on page 269.
The property for controlling task JVM reuse is mapred.job.reuse.jvm.num.tasks: it specifies the maximum number of tasks to run for a given job for each JVM launched; the default is 1 (see Table 6-4). Tasks from different jobs are always run in separate JVMs. If the property is set to –1, there is no limit to the number of tasks from the same job that may share a JVM. The method setNumTasksToExecutePerJvm() on JobConf can also be used to configure this property.
Tasks that are CPU-bound may also benefit from task JVM reuse by taking advantage of runtime optimizations applied by the HotSpot JVM. After running for a while, the HotSpot JVM builds up enough information to detect performance-critical sections in the code and dynamically translates the Java byte codes of these hot spots into native machine code. This works well for long-running processes, but JVMs that run for seconds or a few minutes may not gain the full benefit of HotSpot. In these cases, it is worth enabling task JVM reuse.
Another place where a shared JVM is useful is for sharing state between the tasks of a job. By storing reference data in a static field, tasks get rapid access to the shared data.
轉載地址:http://jerrylead.iteye.com/blog/1195335
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26613085/viewspace-1098382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Yarn的JVM重用功能—uberYarnJVM
- OBJECT_ID的重用Object
- OBJECT_ID的重用(二)Object
- 重用其他程式庫
- UITableViewCell重用機制UIView
- iOS開發-UITableView的重用機制iOSUIView
- Oracle with重用子查詢Oracle
- Javascript中的Trait與程式碼重用JavaScriptAI
- golang slice 和 string 重用Golang
- Hadoop2.7實戰v1.0之JVM引數調優HadoopJVM
- oracle資料庫中索引空間的重用Oracle資料庫索引
- 多路徑重用歸檔日誌
- 另眼看重用開發工具
- 關於索引空間的重用的幾個場景索引
- 含有SilverLight專案的程式碼重用
- ios基礎之UITableViewCell的重用(帶示例原創)iOSUIView
- 提高Java程式碼可重用性的三個措施Java
- oracle中的sql%rowcount(R2)OracleSQL
- R2的版本由來薦
- WPF中的命令模式:打造清晰、可重用的程式碼利器模式
- OSB(Oracle Secure Backup) 磁帶重用方法Oracle
- XML - Schema之資料型別重用XML資料型別
- Selenium webdriver Java 封裝與重用WebJava封裝
- java優化程式設計-物件重用Java優化程式設計物件
- 元件重用需要專人負責 (轉)元件
- JVM的概述JVM
- 程式碼質量第 2 層 - 可重用的程式碼
- SAP ABAP Gateway Client 的 ABAP 實現,重用 HTTP ConnectionGatewayclientHTTP
- 使用 Spring Boot 構建可重用的模擬模組Spring Boot
- Google Inbox 是如何跨平臺重用程式碼的?Go
- 過去兩年中我對程式碼重用的體驗
- 提高Java程式碼可重用性的三個措施 (轉)Java
- Rational Functional Tester 中可重用的物件識別機制Function物件
- 增強 React 列表渲染:乾淨且可重用的模式React模式
- ThreadLocal執行緒重用時帶來的問題thread執行緒
- 【JVM】JVM系列之JVM體系(一)JVM
- 多重web應用中webapp. root重用的問題WebAPP
- 重用體系理論實際應用的初步探索(轉)