`
yymmiinngg
  • 浏览: 180178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hadoop状态页面的Browse the filesystem链接无效的问题

阅读更多

NameNode '192.168.1.164:9000'

Started: Tue Jul 06 14:37:10 CST 2010
Version: 0.20.2, r911707
Compiled: Fri Feb 19 08:07:34 UTC 2010 by chrisdo
Upgrades: There are no upgrades in progress.

Browse the filesystem
Namenode Logs

Cluster Summary

4 files and directories, 1 blocks = 5 total. Heap Size is 16.12 MB / 888.94 MB (1%)
Configured Capacity : 1.59 TB
DFS Used : 72 KB
Non DFS Used : 120.87 GB
DFS Remaining : 1.47 TB
DFS Used% : 0 %
DFS Remaining% : 92.57 %
Live Nodes : 2
Dead Nodes : 0


NameNode Storage:

Storage Directory Type State
/opt/hadoop/data/dfs.name.dir IMAGE_AND_EDITS Active


 

Hadoop , 2010.

 

  以上是我们安装完成,并且正常运行后的HDFS状态页面(访问地址:http://210.66.44.88:50070/dfshealth.jsp),其中的Browse the filesystem 是查看文件系统的入口,但是有可能会出现无法访问的问题,我就遇到过,上网查了很久的解决办法都无果,后来我通过firebug拦截请求发现,Browse the filesystem这个链接的页面会跳转到另外一个页面,而这个页面的地址是http://192.168.1.164:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=%2F( 192.168.1.164是服务器的内网地址,在masters和slaves文件中配置的是局域网IP),但是需要通过外网才能访问(类似于http://210.66.44.88:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=%2F才行),这就是问题所在。

  我们来看看nn_browsedfscontent.jsp的源代码:

package org.apache.hadoop.hdfs.server.namenode;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.URLEncoder;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.SkipPageException;
import org.apache.hadoop.util.ServletUtil;
import org.apache.jasper.runtime.HttpJspBase;
import org.apache.jasper.runtime.JspSourceDependent;
import org.apache.jasper.runtime.ResourceInjector;

public final class nn_005fbrowsedfscontent_jsp extends HttpJspBase
  implements JspSourceDependent
{
  private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();
  private static Vector _jspx_dependants;
  private ResourceInjector _jspx_resourceInjector;

  //此处是将请求随机转发到一个DataNode节点上
  public void redirectToRandomDataNode(NameNode nn, HttpServletResponse resp)
    throws IOException
  {
    String nodeToRedirect;
    int redirectPort;
    FSNamesystem fsn = nn.getNamesystem();
    String datanode = fsn.randomDataNode();

    if (datanode != null) {
      redirectPort = Integer.parseInt(datanode.substring(datanode.indexOf(58) + 1));
      nodeToRedirect = datanode.substring(0, datanode.indexOf(58));
    }
    else {
      nodeToRedirect = nn.getHttpAddress().getHostName();
      redirectPort = nn.getHttpAddress().getPort();
    }
    // 此处是得到服务器的名称(hostname)
    String fqdn = InetAddress.getByName(nodeToRedirect).getCanonicalHostName();
    String redirectLocation = "http://" + fqdn + ":" + redirectPort + "/browseDirectory.jsp?namenodeInfoPort=" + nn.getHttpAddress().getPort() + "&dir=" + URLEncoder.encode("/", "UTF-8");

    resp.sendRedirect(redirectLocation);
  }

  public Object getDependants()
  {
    return _jspx_dependants;
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
  {
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;
    try
    {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);

      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
      this._jspx_resourceInjector = ((ResourceInjector)application.getAttribute("com.sun.appserv.jsp.resource.injector"));

      out.write(10);
      out.write("\n\n<html>\n\n<title></title>\n\n<body>\n");

      NameNode nn = (NameNode)application.getAttribute("name.node");
      redirectToRandomDataNode(nn, response);

      out.write("\n<hr>\n\n<h2>Local logs</h2>\n<a href=\"/logs/\">Log</a> directory\n\n");

      out.println(ServletUtil.htmlFooter());

      out.write(10);
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)) {
        out = _jspx_out;
        if ((out != null) && (out.getBufferSize() != 0))
          out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

  从代码可以看出,当我们点击Browse the filesystem 时后台会将请求随机转发到一台DataNode节点,使用的是slaves文件中配置的服务器列表所反解的域名或主机名,而通过局域网IP未能反解出域名和主机名,所以用的是IP,这样就出问题了,解决办法有两个:视redirectToRandomDataNode方法内生成的URL而定,如果反转域名是主机名的话,你只需要修改本地HOSTS映射就可以了(推荐使用Windows Hosts Editor,软件地址:http://yymmiinngg.iteye.com/blog/360779);如果反转出的域名是主机局域网IP的话,那就需要配置slaves和masters使用域名或外网IP

分享到:
评论
1 楼 haha_hyq 2014-07-16  
好牛逼!  你真会学习!   帮了我大忙了!

相关推荐

    Hadoop from the beginning: The basics

    The author helps you familiarize yourself with the various commands that you can use to perform various tasks within the Hadoop system. The author also helps you know how to write MapReduce programs ...

    一步一步跟我学习hadoop(6)----hadoop利用FileSystem API 执行hadoop文件读写操作

    在Hadoop生态系统中,`FileSystem API`是核心组件之一,它提供了一套接口,使得开发者可以方便地进行文件系统的操作,如读取、写入、移动和删除文件。本篇文章将详细讲解如何利用`FileSystem API`执行Hadoop文件的...

    hadoop权威指南代码(Hadoop: The Definitive Guide code)

    例如,如何使用Kerberos实现认证,如何监控Hadoop集群的状态,以及如何通过调整参数来优化Hadoop的性能。 通过阅读《Hadoop权威指南》并实践书中的代码,读者可以系统地学习Hadoop及其生态系统,掌握大数据处理的...

    Hadoop The Definitive Guide, 4th Edition.pdf

    The fourth edition covers Hadoop 2 exclusively. The Hadoop 2 release series is the current active release series and contains the most stable versions of Hadoop. There are new chapters covering YARN ...

    The Hadoop Distributed File System

    通过对HDFS的基本原理、架构设计及其与其他Hadoop组件之间关系的深入了解,可以帮助我们更好地利用这一技术解决实际问题。随着技术的不断进步和发展,HDFS将继续发挥重要作用,推动大数据处理领域的创新与发展。

    hadoop权威指南英文第四版Hadoop_ The Definitive Guide, 4th Edition

    他从2006年开始为Hadoop项目作出贡献,最初专注于优化Hadoop在Amazon EC2和S3服务上的运行,之后又解决了许多问题,包括改进MapReduce API、增强Hadoop网站和设计对象序列化框架等。Tom White不仅在软件开发上有天赋...

    Hadoop The Definitive Guide

    《Hadoop:The Definitive Guide》是O'REILLY出版社出版的一本关于Apache Hadoop的权威指南,目前流行的是第四版。这本书为读者提供了一个全面的Hadoop学习平台,内容涵盖了如何构建和维护一个既可靠又可扩展的...

    Moving Hadoop to The Cloud epub

    Moving Hadoop to The Cloud 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Hadoop the definition guide

    4. Hadoop生态系统:在提供的部分内容中,提到了“Apache Hadoop and the Hadoop Ecosystem”,强调了Hadoop不仅仅是一个单一的工具,而是一个由多个不同组件构成的生态系统。这个生态系统包括了数据存储、处理、...

    java项目Hadoop依赖包

    在Java项目中,Hadoop是一个不可或缺的开源框架,主要用于处理和存储海量数据。这个"java项目Hadoop依赖包"包含了MapReduce和HDFS(Hadoop Distributed File System)的相关组件,是构建分布式大数据处理系统的基础...

    Hadoop: The Definitive Guide, 4th Edition

    Hadoop: The Definitive Guide, 4th Edition Get ready to unlock the power of your data. With the fourth edition of this comprehensive guide, you’ll learn how to build and maintain reliable, scalable,...

    Hadoop The Definitive Guide, 4th Edition(英文版).pdf

    《Hadoop The Definitive Guide, 4th Edition》是Hadoop领域的经典之作,由O'Reilly Media出版,为读者提供了全面深入的Hadoop知识体系。这本书是第四版,相较于之前的版本,它更新了Hadoop生态系统的最新发展,并对...

    Hadoop和Kerberos:超越大门的疯狂Hadoop and Kerberos: The Madness Beyond the Gate

    - **测试连接**:通过kinit命令获取TGT,并尝试访问Hadoop服务来验证配置是否正确。 #### 总结 Hadoop与Kerberos的结合不仅提高了数据的安全性,还增强了系统的稳定性和可靠性。通过使用Kerberos进行认证和授权,...

    Hadoop集群服务器与本地连接

    《Hadoop集群服务器与本地连接:Eclipse集成与实践指南》 在大数据处理领域,Hadoop作为开源的分布式计算框架,扮演着至关重要的角色。Eclipse作为一种强大的Java开发环境,两者结合可为开发者提供便捷的Hadoop应用...

    hadoop常见问题及解决方法

    hadoop常见问题及解决方法 Hadoop是大数据处理的重要工具,但是在安装和使用Hadoop时,可能会出现一些常见的问题,这些问题可能会导致Hadoop无法正常工作,或者无法达到预期的性能。下面是Hadoop常见的问题及解决...

Global site tag (gtag.js) - Google Analytics