dfshealth.jsp
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:10k
源码类别:

网格计算

开发平台:

Java

  1. <%@ page
  2.   contentType="text/html; charset=UTF-8"
  3.   import="javax.servlet.*"
  4.   import="javax.servlet.http.*"
  5.   import="java.io.*"
  6.   import="java.util.*"
  7.   import="org.apache.hadoop.fs.*"
  8.   import="org.apache.hadoop.hdfs.*"
  9.   import="org.apache.hadoop.hdfs.server.namenode.*"
  10.   import="org.apache.hadoop.hdfs.server.datanode.*"
  11.   import="org.apache.hadoop.hdfs.server.common.Storage"
  12.   import="org.apache.hadoop.hdfs.server.common.Storage.StorageDirectory"
  13.   import="org.apache.hadoop.hdfs.protocol.*"
  14.   import="org.apache.hadoop.util.*"
  15.   import="java.text.DateFormat"
  16.   import="java.lang.Math"
  17.   import="java.net.URLEncoder"
  18. %>
  19. <%!
  20.   JspHelper jspHelper = new JspHelper();
  21.   int rowNum = 0;
  22.   int colNum = 0;
  23.   String rowTxt() { colNum = 0;
  24.       return "<tr class="" + (((rowNum++)%2 == 0)? "rowNormal" : "rowAlt")
  25.           + ""> "; }
  26.   String colTxt() { return "<td id="col" + ++colNum + ""> "; }
  27.   void counterReset () { colNum = 0; rowNum = 0 ; }
  28.   long diskBytes = 1024 * 1024 * 1024;
  29.   String diskByteStr = "GB";
  30.   String sorterField = null;
  31.   String sorterOrder = null;
  32.   String NodeHeaderStr(String name) {
  33.       String ret = "class=header";
  34.       String order = "ASC";
  35.       if ( name.equals( sorterField ) ) {
  36.           ret += sorterOrder;
  37.           if ( sorterOrder.equals("ASC") )
  38.               order = "DSC";
  39.       }
  40.       ret += " onClick="window.document.location=" +
  41.           "'/dfshealth.jsp?sorter/field=" + name + "&sorter/order=" +
  42.           order + "'" title="sort on this column"";
  43.       
  44.       return ret;
  45.   }
  46.       
  47.   public void generateNodeData( JspWriter out, DatanodeDescriptor d,
  48.                                     String suffix, boolean alive,
  49.                                     int nnHttpPort )
  50.     throws IOException {
  51.       
  52.     /* Say the datanode is dn1.hadoop.apache.org with ip 192.168.0.5
  53.        we use:
  54.        1) d.getHostName():d.getPort() to display.
  55.            Domain and port are stripped if they are common across the nodes.
  56.            i.e. "dn1"
  57.        2) d.getHost():d.Port() for "title".
  58.           i.e. "192.168.0.5:50010"
  59.        3) d.getHostName():d.getInfoPort() for url.
  60.           i.e. "http://dn1.hadoop.apache.org:50075/..."
  61.           Note that "d.getHost():d.getPort()" is what DFS clients use
  62.           to interact with datanodes.
  63.     */
  64.     // from nn_browsedfscontent.jsp:
  65.     String url = "http://" + d.getHostName() + ":" + d.getInfoPort() +
  66.                  "/browseDirectory.jsp?namenodeInfoPort=" +
  67.                  nnHttpPort + "&dir=" +
  68.                  URLEncoder.encode("/", "UTF-8");
  69.      
  70.     String name = d.getHostName() + ":" + d.getPort();
  71.     if ( !name.matches( "\d+\.\d+.\d+\.\d+.*" ) ) 
  72.         name = name.replaceAll( "\.[^.:]*", "" );    
  73.     int idx = (suffix != null && name.endsWith( suffix )) ?
  74.         name.indexOf( suffix ) : -1;
  75.     
  76.     out.print( rowTxt() + "<td class="name"><a title=""
  77.                + d.getHost() + ":" + d.getPort() +
  78.                "" href="" + url + "">" +
  79.                (( idx > 0 ) ? name.substring(0, idx) : name) + "</a>" +
  80.                (( alive ) ? "" : "n") );
  81.     if ( !alive )
  82.         return;
  83.     
  84.     long c = d.getCapacity();
  85.     long u = d.getDfsUsed();
  86.     long nu = d.getNonDfsUsed();
  87.     long r = d.getRemaining();
  88.     String percentUsed = StringUtils.limitDecimalTo2(d.getDfsUsedPercent());    
  89.     String percentRemaining = StringUtils.limitDecimalTo2(d.getRemainingPercent());    
  90.     
  91.     String adminState = (d.isDecommissioned() ? "Decommissioned" :
  92.                          (d.isDecommissionInProgress() ? "Decommission In Progress":
  93.                           "In Service"));
  94.     
  95.     long timestamp = d.getLastUpdate();
  96.     long currentTime = System.currentTimeMillis();
  97.     out.print("<td class="lastcontact"> " +
  98.               ((currentTime - timestamp)/1000) +
  99.               "<td class="adminstate">" +
  100.               adminState +
  101.               "<td align="right" class="capacity">" +
  102.               StringUtils.limitDecimalTo2(c*1.0/diskBytes) +
  103.               "<td align="right" class="used">" +
  104.               StringUtils.limitDecimalTo2(u*1.0/diskBytes) +      
  105.               "<td align="right" class="nondfsused">" +
  106.               StringUtils.limitDecimalTo2(nu*1.0/diskBytes) +      
  107.               "<td align="right" class="remaining">" +
  108.               StringUtils.limitDecimalTo2(r*1.0/diskBytes) +      
  109.               "<td align="right" class="pcused">" + percentUsed +
  110.               "<td class="pcused">" +
  111.               ServletUtil.percentageGraph( (int)Double.parseDouble(percentUsed) , 100) +
  112.               "<td align="right" class="pcremaining`">" + percentRemaining +
  113.               "<td title=" + ""blocks scheduled : " + d.getBlocksScheduled() + 
  114.               "" class="blocks">" + d.numBlocks() + "n");
  115.   }
  116.   
  117.   
  118.   public void generateConfReport( JspWriter out,
  119.   FSNamesystem fsn,
  120.   HttpServletRequest request)
  121.   throws IOException {
  122.   long underReplicatedBlocks = fsn.getUnderReplicatedBlocks();
  123.   FSImage fsImage = fsn.getFSImage();
  124.   List<Storage.StorageDirectory> removedStorageDirs = fsImage.getRemovedStorageDirs();
  125.   String storageDirsSizeStr="", removedStorageDirsSizeStr="", storageDirsStr="", removedStorageDirsStr="", storageDirsDiv="", removedStorageDirsDiv="";
  126.   //FS Image storage configuration
  127.   out.print("<h3> NameNode Storage: </h3>");
  128.   out.print("<div id="dfstable"> <table border=1 cellpadding=10 cellspacing=0 title="NameNode Storage">n"+
  129.   "<thead><tr><td><b>Storage Directory</b></td><td><b>Type</b></td><td><b>State</b></td></tr></thead>");
  130.   
  131.   StorageDirectory st =null;
  132.   for (Iterator<StorageDirectory> it = fsImage.dirIterator(); it.hasNext();) {
  133.       st = it.next();
  134.       String dir = "" +  st.getRoot();
  135.   String type = "" + st.getStorageDirType();
  136.   out.print("<tr><td>"+dir+"</td><td>"+type+"</td><td>Active</td></tr>");
  137.   }
  138.   
  139.   long storageDirsSize = removedStorageDirs.size();
  140.   for(int i=0; i< storageDirsSize; i++){
  141.   st = removedStorageDirs.get(i);
  142.   String dir = "" +  st.getRoot();
  143.   String type = "" + st.getStorageDirType();
  144.   out.print("<tr><td>"+dir+"</td><td>"+type+"</td><td><font color=red>Failed</font></td></tr>");
  145.   }
  146.   
  147.   out.print("</table></div><br>n");
  148.   }
  149.   public void generateDFSHealthReport(JspWriter out,
  150.                                       NameNode nn,
  151.                                       HttpServletRequest request)
  152.                                       throws IOException {
  153.     FSNamesystem fsn = nn.getNamesystem();
  154.     ArrayList<DatanodeDescriptor> live = new ArrayList<DatanodeDescriptor>();
  155.     ArrayList<DatanodeDescriptor> dead = new ArrayList<DatanodeDescriptor>();
  156.     jspHelper.DFSNodesStatus(live, dead);
  157.     sorterField = request.getParameter("sorter/field");
  158.     sorterOrder = request.getParameter("sorter/order");
  159.     if ( sorterField == null )
  160.         sorterField = "name";
  161.     if ( sorterOrder == null )
  162.         sorterOrder = "ASC";
  163.     // Find out common suffix. Should this be before or after the sort?
  164.     String port_suffix = null;
  165.     if ( live.size() > 0 ) {
  166.         String name = live.get(0).getName();
  167.         int idx = name.indexOf(':');
  168.         if ( idx > 0 ) {
  169.             port_suffix = name.substring( idx );
  170.         }
  171.         
  172.         for ( int i=1; port_suffix != null && i < live.size(); i++ ) {
  173.             if ( live.get(i).getName().endsWith( port_suffix ) == false ) {
  174.                 port_suffix = null;
  175.                 break;
  176.             }
  177.         }
  178.     }
  179.         
  180.     counterReset();
  181.     
  182.     long total = fsn.getCapacityTotal();
  183.     long remaining = fsn.getCapacityRemaining();
  184.     long used = fsn.getCapacityUsed();
  185.     long nonDFS = fsn.getCapacityUsedNonDFS();
  186.     float percentUsed = fsn.getCapacityUsedPercent();
  187.     float percentRemaining = fsn.getCapacityRemainingPercent();
  188.     out.print( "<div id="dfstable"> <table>n" +
  189.        rowTxt() + colTxt() + "Configured Capacity" + colTxt() + ":" + colTxt() +
  190.        StringUtils.byteDesc( total ) +
  191.        rowTxt() + colTxt() + "DFS Used" + colTxt() + ":" + colTxt() +
  192.        StringUtils.byteDesc( used ) +
  193.        rowTxt() + colTxt() + "Non DFS Used" + colTxt() + ":" + colTxt() +
  194.        StringUtils.byteDesc( nonDFS ) +
  195.        rowTxt() + colTxt() + "DFS Remaining" + colTxt() + ":" + colTxt() +
  196.        StringUtils.byteDesc( remaining ) +
  197.        rowTxt() + colTxt() + "DFS Used%" + colTxt() + ":" + colTxt() +
  198.        StringUtils.limitDecimalTo2(percentUsed) + " %" +
  199.        rowTxt() + colTxt() + "DFS Remaining%" + colTxt() + ":" + colTxt() +
  200.        StringUtils.limitDecimalTo2(percentRemaining) + " %" +
  201.        rowTxt() + colTxt() +
  202.         "<a href="dfsnodelist.jsp?whatNodes=LIVE">Live Nodes</a> " +
  203.         colTxt() + ":" + colTxt() + live.size() +
  204.        rowTxt() + colTxt() +
  205.         "<a href="dfsnodelist.jsp?whatNodes=DEAD">Dead Nodes</a> " +
  206.         colTxt() + ":" + colTxt() + dead.size() +
  207.                "</table></div><br>n" );
  208.     
  209.     if (live.isEmpty() && dead.isEmpty()) {
  210.         out.print("There are no datanodes in the cluster");
  211.     }
  212.   }%>
  213. <%
  214.   NameNode nn = (NameNode)application.getAttribute("name.node");
  215.   FSNamesystem fsn = nn.getNamesystem();
  216.   String namenodeLabel = nn.getNameNodeAddress().getHostName() + ":" + nn.getNameNodeAddress().getPort();
  217. %>
  218. <html>
  219. <link rel="stylesheet" type="text/css" href="/static/hadoop.css">
  220. <title>Hadoop NameNode <%=namenodeLabel%></title>
  221.     
  222. <body>
  223. <h1>NameNode '<%=namenodeLabel%>'</h1>
  224. <div id="dfstable"> <table>   
  225. <tr> <td id="col1"> Started: <td> <%= fsn.getStartTime()%>
  226. <tr> <td id="col1"> Version: <td> <%= VersionInfo.getVersion()%>, r<%= VersionInfo.getRevision()%>
  227. <tr> <td id="col1"> Compiled: <td> <%= VersionInfo.getDate()%> by <%= VersionInfo.getUser()%>
  228. <tr> <td id="col1"> Upgrades: <td> <%= jspHelper.getUpgradeStatusText()%>
  229. </table></div><br>       
  230. <b><a href="/nn_browsedfscontent.jsp">Browse the filesystem</a></b><br>
  231. <b><a href="/logs/">Namenode Logs</a></b>
  232. <hr>
  233. <h3>Cluster Summary</h3>
  234. <b> <%= jspHelper.getSafeModeText()%> </b>
  235. <b> <%= jspHelper.getInodeLimitText()%> </b>
  236. <a class="warning"> <%= JspHelper.getWarningText(fsn)%></a>
  237. <%
  238.     generateDFSHealthReport(out, nn, request); 
  239. %>
  240. <hr>
  241. <%
  242. generateConfReport(out, fsn, request);
  243. %>
  244. <%
  245. out.println(ServletUtil.htmlFooter());
  246. %>