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

网格计算

开发平台:

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="java.net.*"
  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.protocol.*"
  12.   import="org.apache.hadoop.io.*"
  13.   import="org.apache.hadoop.conf.*"
  14.   import="org.apache.hadoop.net.DNS"
  15.   import="org.apache.hadoop.util.*"
  16.   import="org.apache.hadoop.net.NetUtils"
  17.   import="java.text.DateFormat"
  18. %>
  19. <%!
  20.   static JspHelper jspHelper = new JspHelper();
  21.   public void generateFileChunks(JspWriter out, HttpServletRequest req) 
  22.     throws IOException {
  23.     long startOffset = 0;
  24.     
  25.     int chunkSizeToView = 0;
  26.     String referrer = req.getParameter("referrer");
  27.     boolean noLink = false;
  28.     if (referrer == null) {
  29.       noLink = true;
  30.     }
  31.     String filename = req.getParameter("filename");
  32.     if (filename == null) {
  33.       out.print("Invalid input (file name absent)");
  34.       return;
  35.     }
  36.     String namenodeInfoPortStr = req.getParameter("namenodeInfoPort");
  37.     int namenodeInfoPort = -1;
  38.     if (namenodeInfoPortStr != null)
  39.       namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr);
  40.     
  41.     String chunkSizeToViewStr = req.getParameter("chunkSizeToView");
  42.     if (chunkSizeToViewStr != null && Integer.parseInt(chunkSizeToViewStr) > 0)
  43.       chunkSizeToView = Integer.parseInt(chunkSizeToViewStr);
  44.     else chunkSizeToView = jspHelper.defaultChunkSizeToView;
  45.     if (!noLink) {
  46.       out.print("<h3>Tail of File: ");
  47.       JspHelper.printPathWithLinks(filename, out, namenodeInfoPort);
  48.     out.print("</h3><hr>");
  49.       out.print("<a href="" + referrer + "">Go Back to File View</a><hr>");
  50.     }
  51.     else {
  52.       out.print("<h3>" + filename + "</h3>");
  53.     }
  54.     out.print("<b>Chunk size to view (in bytes, up to file's DFS block size): </b>");
  55.     out.print("<input type="text" name="chunkSizeToView" value=" +
  56.               chunkSizeToView + " size=10 maxlength=10>");
  57.     out.print("&nbsp;&nbsp;<input type="submit" name="submit" value="Refresh"><hr>");
  58.     out.print("<input type="hidden" name="filename" value="" + filename +
  59.               "">");
  60.     out.print("<input type="hidden" name="namenodeInfoPort" value="" + namenodeInfoPort +
  61.     "">");
  62.     if (!noLink)
  63.       out.print("<input type="hidden" name="referrer" value="" + 
  64.                 referrer+ "">");
  65.     //fetch the block from the datanode that has the last block for this file
  66.     DFSClient dfs = new DFSClient(jspHelper.nameNodeAddr, 
  67.                                          jspHelper.conf);
  68.     List<LocatedBlock> blocks = 
  69.       dfs.namenode.getBlockLocations(filename, 0, Long.MAX_VALUE).getLocatedBlocks();
  70.     if (blocks == null || blocks.size() == 0) {
  71.       out.print("No datanodes contain blocks of file "+filename);
  72.       dfs.close();
  73.       return;
  74.     }
  75.     LocatedBlock lastBlk = blocks.get(blocks.size() - 1);
  76.     long blockSize = lastBlk.getBlock().getNumBytes();
  77.     long blockId = lastBlk.getBlock().getBlockId();
  78.     long genStamp = lastBlk.getBlock().getGenerationStamp();
  79.     DatanodeInfo chosenNode;
  80.     try {
  81.       chosenNode = jspHelper.bestNode(lastBlk);
  82.     } catch (IOException e) {
  83.       out.print(e.toString());
  84.       dfs.close();
  85.       return;
  86.     }      
  87.     InetSocketAddress addr = NetUtils.createSocketAddr(chosenNode.getName());
  88.     //view the last chunkSizeToView bytes while Tailing
  89.     if (blockSize >= chunkSizeToView)
  90.       startOffset = blockSize - chunkSizeToView;
  91.     else startOffset = 0;
  92.     out.print("<textarea cols="100" rows="25" wrap="virtual" style="width:100%" READONLY>");
  93.     jspHelper.streamBlockInAscii(addr, blockId, genStamp, blockSize, startOffset, chunkSizeToView, out);
  94.     out.print("</textarea>");
  95.     dfs.close();
  96.   }
  97. %>
  98. <html>
  99. <head>
  100. <%JspHelper.createTitle(out, request, request.getParameter("filename")); %>
  101. </head>
  102. <body>
  103. <form action="/tail.jsp" method="GET">
  104. <% 
  105.    generateFileChunks(out,request);
  106. %>
  107. </form>
  108. <hr>
  109. <h2>Local logs</h2>
  110. <a href="/logs/">Log</a> directory
  111. <%
  112. out.println(ServletUtil.htmlFooter());
  113. %>