YARN上调度器开发


    和Hadoop1一样,YARN也支持可插入式的调度方式。本文将介绍如何在源码的基础上修改调度策略,并将其应用至Hadoop2上,以修改CapacityScheduler为例,其原理和过程如下。

原理

    Hadoop2编译好后的各组件生成的jar包会放在$HADOOP_HOME/share/hadoop目录,Hadoop运行过程中也会调用该文件夹下相应的jar包。因此修改源码后,将相应的组件导出为jar包并覆盖该文件夹的子目录相应的jar包即可。

     如果是调度器的话, 将$hadoop-2.3.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java包导出并覆盖到$HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.3.0.jar即可。      

步骤

step1.源码编译,并导入Eclipse

     ubuntu下hadoop-2.2.0的源码编译,参照:http://mmicky.blog.163.com/blog/static/15029015420136224315566/。注意,编译前一定要装好第三方库,编译源码前,还需修改一个bug:修改文件$hadoop-2.3.0-src/hadoop-common-project/hadoop-auth/pom.xml中的

<dependency>
   <groupId>org.mortbay.jetty</groupId> 
   <artifactId>jetty-util</artifactId>
   <scope>test</scope>
</dependency>
<dependency> 
   <groupId>org.mortbay.jetty</groupId>
   <artifactId>jetty</artifactId>
   <scope>test</scope> 
</dependency>

     编译好后,即可将其导入到eclipse。导入后,会出现很多类或者方法找不到JAR包,为了解决这个问题,需要将第三方JAR包导入工程中。方法如下:右击Project名称,在弹出的快捷菜单中选择“Properties”命令,将会弹出一个界面,然后在该界面中一次选择“Java Build Path”——>“Libraries”——>“Add External JARS...”,将$hadoop-2.3.0-src/hadoop-dist/target/hadoop-2.3.0.tar.gz解压后生成的目录中share/hadoop目录下各个子目录中lib文件夹下的JAR包导入工程。

step2.修改源码

     修改包“org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity”即可


step3.覆盖

     将/hadoop-2.3.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java包导出并覆盖到$HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.3.0.jar即可。 

相关内容