分享

解决hadoop 0.21.0 web下载文件失败的BUG

starrycheng 发表于 2013-10-25 10:44:36 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 6333
坛子里面有一位朋友提出过这个,详见贴
"

后面我也遇到了相同的,找了很多方法,都无法解决,最后和同事分析源代码才找到了的原因。
先说一下解决方法吧。
在hadoop0.21.0的源文件路径下找到这个文件:
/org/apache/hadoop/hdfs/server/namenode/StreamFile.java
找到方法getDFSClient(),把其中的 name.conf 改成 datanode.conf,效果如下:
[ol]
  • /** getting a client for connecting to dfs */
  •   protected DFSClient getDFSClient(HttpServletRequest request)
  •       throws IOException, InterruptedException {
  •     final Configuration conf =
  •       (Configuration) getServletContext().getAttribute("datanode.conf");
  •    
  •     UserGroupInformation ugi = getUGI(request, conf);
  •     DFSClient client = ugi.doAs(new PrivilegedExceptionAction() {
  •       @Override
  •       public DFSClient run() throws IOException {
  •         return new DFSClient(nameNodeAddr, conf);
  •       }
  •     });
  •    
  •     return client;
  •   }
  •   [/ol]复制代码
    然后把这个类重新编译并更新到 $HADOOP_HOME/hadoop-hdfs-0.21.0.jar文件中(注意更新前备份原文件)
    然后重新启动集群即可。
    原因:
    分析异常栈可以发现,是由于StreamFile在取name.conf的时候,取到的是一个空对象。而实际上,我们请求
    的是DN,DN在启动的时候其httpserver(变量infoserver)根本没有设置name.conf属性而设置了datanode.conf属性!
    查看源码会发现,其实NN和DN加载的conf其实是一样的,我们只需要把name.conf改成datanode.conf即可!
  • 已有(2)人评论

    跳转到指定楼层
    xiaolongwu1987 发表于 2013-10-25 10:44:36
    我现在奇怪的是,新部署的hadoop 0.21.0却不报这个错误,完全正常使用,很奇怪。。。
    回复

    使用道具 举报

    atsky123 发表于 2013-10-25 10:44:36
    回复 2# liw_goldgov
    我重装过好几次了,一点下载就抛异常~~~
    但是为嘛你出现时好时坏我就不清楚了,为毛吗?吗?吗?吗?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐上一条 /2 下一条