<%! /** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ %> <%@ page contentType="text/html; charset=UTF-8" import="javax.servlet.*" import="javax.servlet.http.*" import="java.io.*" import="java.util.*" import="java.net.*" import="org.apache.hadoop.hdfs.*" import="org.apache.hadoop.hdfs.server.namenode.*" import="org.apache.hadoop.hdfs.server.datanode.*" import="org.apache.hadoop.hdfs.server.common.*" import="org.apache.hadoop.hdfs.protocol.*" import="org.apache.hadoop.io.*" import="org.apache.hadoop.conf.*" import="org.apache.hadoop.net.DNS" import="org.apache.hadoop.security.token.Token" import="org.apache.hadoop.hdfs.security.token.block.BlockTokenIdentifier" import="org.apache.hadoop.util.*" import="org.apache.hadoop.net.NetUtils" import="org.apache.hadoop.security.UserGroupInformation" import="org.apache.hadoop.http.HtmlQuoting" import="java.text.DateFormat" %> <%! static JspHelper jspHelper = new JspHelper(); public void generateFileChunks(JspWriter out, HttpServletRequest req, Configuration conf ) throws IOException, InterruptedException { long startOffset = 0; int chunkSizeToView = 0; String tokenString = req.getParameter(JspHelper.DELEGATION_PARAMETER_NAME); String referrer = req.getParameter("referrer"); boolean noLink = false; if (referrer == null) { noLink = true; } String filename = HtmlQuoting.unquoteHtmlChars(req.getParameter("filename")); if (filename == null) { out.print("Invalid input (file name absent)"); return; } String namenodeInfoPortStr = req.getParameter("namenodeInfoPort"); int namenodeInfoPort = -1; if (namenodeInfoPortStr != null) namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr); String chunkSizeToViewStr = req.getParameter("chunkSizeToView"); if (chunkSizeToViewStr != null && Integer.parseInt(chunkSizeToViewStr) > 0) chunkSizeToView = Integer.parseInt(chunkSizeToViewStr); else chunkSizeToView = JspHelper.getDefaultChunkSize(conf); if (!noLink) { out.print("

Tail of File: "); JspHelper.printPathWithLinks(HtmlQuoting.quoteHtmlChars(filename), out, namenodeInfoPort, tokenString); out.print("


"); out.print("Go Back to File View
"); } else { out.print("

" + HtmlQuoting.quoteHtmlChars(filename) + "

"); } out.print("Chunk size to view (in bytes, up to file's DFS block size): "); out.print(""); out.print("  
"); out.print(""); out.print(""); if (!noLink) out.print(""); //fetch the block from the datanode that has the last block for this file UserGroupInformation ugi = JspHelper.getUGI(req, conf); DFSClient dfs = JspHelper.getDFSClient(ugi, jspHelper.nameNodeAddr, conf); List blocks = dfs.namenode.getBlockLocations(filename, 0, Long.MAX_VALUE ).getLocatedBlocks(); if (blocks == null || blocks.size() == 0) { out.print("No datanodes contain blocks of file "+filename); dfs.close(); return; } LocatedBlock lastBlk = blocks.get(blocks.size() - 1); long blockSize = lastBlk.getBlock().getNumBytes(); long blockId = lastBlk.getBlock().getBlockId(); Token accessToken = lastBlk.getBlockToken(); long genStamp = lastBlk.getBlock().getGenerationStamp(); DatanodeInfo chosenNode; try { chosenNode = jspHelper.bestNode(lastBlk); } catch (IOException e) { out.print(e.toString()); dfs.close(); return; } InetSocketAddress addr = NetUtils.createSocketAddr(chosenNode.getName()); //view the last chunkSizeToView bytes while Tailing if (blockSize >= chunkSizeToView) startOffset = blockSize - chunkSizeToView; else startOffset = 0; out.print(""); dfs.close(); } %> <%JspHelper.createTitle(out, request, request.getParameter("filename")); %>
<% Configuration conf = (Configuration) application.getAttribute(JspHelper.CURRENT_CONF); generateFileChunks(out, request, conf); %>

Local logs

Log directory <% out.println(ServletUtil.htmlFooter()); %>