在学习过MapReduce框架的几个关键类和接口后(只是简单的说明了类或者接口的作用及使用方式,要想深入了解如何工作的就需要深入研究源代码了,这也是计划中的学习任务),接下来看看任务的执行和环境,主要涉及的还是一些参数。TaskTracker将mapper/reducer任务作为子进程在不同的jvm中执行,子任务继承了父进程TaskTracker的环境。用户可以通过 mapred.{map|reduce}.child.java.opts配置参数指定额外的选项,比如通过-Djava.library.path=<>指定运行时链接器搜索共享库的非标准的路径。如果mapred.{map|reduce}.child.java.opts参数包含符号@taskid@ ,那么使用MapReduce任务的taskid的值替换@taskid@ 。需要注意的是mapred.{map|reduce}.child.java.opts只用于管理从TaskTracker加载的子任务。
下面是一个包含多个参数和替换的例子,展示了jvm的GC日志,启动了无密码登录的JVM JMX代理(这样可以连接到控制台等以查看子进程内存,线程和取得线程dump),分别设置了map和reduce子jvm的最大堆大小为512MB和1024MB,通过java.library.path为子jvm添加了额外的路径。代码如下:
<property>