• 修改Hadoop作业调度算法过程解析


    最近几个星期一直在修改hadoop的计算能力调度算法,遇到了这样那样的问题。

    我修改的版本是hadoop-0.20.2

    第一步:

    将hadoop的源码加载到eclipse中配置使用ant编译

    第二步:

    根据需要修改源码

    第三步:

    使用ant编译修改内容,这里要提醒的就是要保证编译平台的JDK和运行平台的JDK相同

    ant编译的方法是:首先到$HadoopHome/src/contrib/capacity-scheduler目录下

    直接输入ant就可以编译,编译成功后会提示生产的JAR文件在$HadoopHome/build/contrib/capacity-scheduler 中。

    重要的是如果修改了capacity-scheduler外的其他内容(主要在MapReduce中)也需要将修改后的整个Hadoop编译

    而且要在编译capacity-scheduler之前进行编译。编译整个hadoop会在build文件夹下看到hadoop-0.20.2-dev-capacity-scheduler.jar

    第四步:

    将hadoop-0.20.2-dev-capacity-scheduler.jar重命名为hadoop-0.20.2-capacity-scheduler.jar

    以及将hadoop-${version}-capacity-scheduler.jar重新名为hadoop-0.20.2-capacity-scheduler.jar

    覆盖集群中响应的JAR重新启动集群就可以了


    以上是成功的步骤,但是在整个过程中总会出现错误,下面具体分析一下我遇到的错误:

    我是在windows 下编译的在ubuntu中搭建的集群,开始的时候两个平台的JDK不一致,

    导致了:java.lang.UnsupportedClassVersionError 的错误 所以要保证JDK一致

    有时候会遇到org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible build versions: namenode BV = ; datanode BV = 911707

    这个错误的原因是因为datanode的版本和NameNode的版本不一致。我将生成的hadoop-0.20.2-dev-capacity-scheduler.jar重命名后覆盖到DataNode的$HadoopHome 中


  • 相关阅读:
    vue过滤器filters
    vue指令
    java命令
    mysql的information_schema表
    es6 Object的keys values entries方法
    mysql information_schema.INNODB_TRX
    流动相似性例子
    【转】time 模块详解(时间获取和转换)
    查找——平衡二叉树的实现(代码超详细注释)
    py中变量名的“秘密”
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3143214.html
Copyright © 2020-2023  润新知