%@ 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.fs.*" import="org.apache.hadoop.dfs.*" import="org.apache.hadoop.io.*" import="org.apache.hadoop.conf.*" import="org.apache.hadoop.net.DNS" import="java.text.DateFormat" %> <%! static JspHelper jspHelper = new JspHelper(); public void generateDirectoryStructure( JspWriter out, HttpServletRequest req, HttpServletResponse resp) throws IOException { String dir = req.getParameter("dir"); if (dir == null || dir.length() == 0) { out.print("Invalid input"); return; } String namenodeInfoPortStr = req.getParameter("namenodeInfoPort"); int namenodeInfoPort = -1; if (namenodeInfoPortStr != null) namenodeInfoPort = Integer.parseInt(namenodeInfoPortStr); DFSClient dfs = new DFSClient(jspHelper.nameNodeAddr, jspHelper.conf); UTF8 target = new UTF8(dir); if( !dfs.isDirectory(target) ) { // a file LocatedBlock[] blocks = dfs.namenode.open(dir); DatanodeInfo [] locations = blocks[0].getLocations(); if (locations.length == 0) { out.print("Empty file"); } else { DatanodeInfo chosenNode = jspHelper.bestNode(blocks[0]); String fqdn = InetAddress.getByName(chosenNode.getHost()). getCanonicalHostName(); String datanodeAddr = chosenNode.getName(); int datanodePort = Integer.parseInt( datanodeAddr.substring( datanodeAddr.indexOf(':') + 1, datanodeAddr.length())); String redirectLocation = "http://"+fqdn+":" + chosenNode.getInfoPort() + "/browseBlock.jsp?blockId=" + blocks[0].getBlock().getBlockId() + "&blockSize=" + blocks[0].getBlock().getNumBytes() + "&filename=" + URLEncoder.encode(dir, "UTF-8") + "&datanodePort=" + datanodePort + "&namenodeInfoPort=" + namenodeInfoPort; resp.sendRedirect(redirectLocation); } return; } // directory DFSFileInfo[] files = dfs.listPaths(target); //generate a table and dump the info String [] headings = new String[5]; headings[0] = "Name"; headings[1] = "Type"; headings[2] = "Size"; headings[3] = "Replication"; headings[4] = "BlockSize"; out.print("