|
@@ -13,21 +13,51 @@
|
|
|
<%!
|
|
|
static JspHelper jspHelper = new JspHelper();
|
|
|
|
|
|
- public void generateDirectoryStructure(JspWriter out, HttpServletRequest req)
|
|
|
+ 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);
|
|
|
- DFSFileInfo[] files = dfs.listPaths(new UTF8(dir));
|
|
|
+ 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";
|
|
@@ -48,7 +78,8 @@
|
|
|
}
|
|
|
|
|
|
jspHelper.addTableHeader(out);
|
|
|
- jspHelper.addTableRow(out, headings);
|
|
|
+ int row=0;
|
|
|
+ jspHelper.addTableRow(out, headings, row++);
|
|
|
String cols [] = new String[5];
|
|
|
for (int i = 0; i < files.length; i++) {
|
|
|
//Get the location of the first block of the file
|
|
@@ -57,47 +88,30 @@
|
|
|
LocatedBlock[] blocks = dfs.namenode.open(files[i].getPath());
|
|
|
DatanodeInfo [] locations = blocks[0].getLocations();
|
|
|
if (locations.length == 0) {
|
|
|
- cols[0] = files[i].getPath();
|
|
|
- cols[1] = "file";
|
|
|
- cols[2] = Long.toString(files[i].getLen());
|
|
|
- cols[3] = Short.toString(files[i].getReplication());
|
|
|
- cols[4] = Long.toString(files[i].getBlockSize());
|
|
|
- jspHelper.addTableRow(out, cols);
|
|
|
- continue;
|
|
|
+ cols[0] = files[i].getName();
|
|
|
+ } else {
|
|
|
+ String datanodeUrl = req.getRequestURL()+"?dir="+
|
|
|
+ URLEncoder.encode(files[i].getPath(), "UTF-8") +
|
|
|
+ "&namenodeInfoPort=" + namenodeInfoPort;
|
|
|
+
|
|
|
+ cols[0] = "<a href=\""+datanodeUrl+"\">"+files[i].getName()+"</a>";
|
|
|
}
|
|
|
- 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 datanodeUrl = "http://"+fqdn+":" +
|
|
|
- chosenNode.getInfoPort() +
|
|
|
- "/browseBlock.jsp?blockId=" +
|
|
|
- blocks[0].getBlock().getBlockId() +
|
|
|
- "&blockSize=" + files[i].getBlockSize() +
|
|
|
- "&filename=" + URLEncoder.encode(files[i].getPath(), "UTF-8") +
|
|
|
- "&datanodePort=" + datanodePort +
|
|
|
- "&namenodeInfoPort=" + namenodeInfoPort;
|
|
|
- cols[0] = "<a href=\""+datanodeUrl+"\">"+files[i].getPath()+"</a>";
|
|
|
cols[1] = "file";
|
|
|
- cols[2] = Long.toString(files[i].getLen());
|
|
|
+ cols[2] = DFSShell.byteDesc(files[i].getLen());
|
|
|
cols[3] = Short.toString(files[i].getReplication());
|
|
|
- cols[4] = Long.toString(files[i].getBlockSize());
|
|
|
- jspHelper.addTableRow(out, cols);
|
|
|
+ cols[4] = DFSShell.byteDesc(files[i].getBlockSize());
|
|
|
}
|
|
|
else {
|
|
|
String datanodeUrl = req.getRequestURL()+"?dir="+
|
|
|
URLEncoder.encode(files[i].getPath(), "UTF-8") +
|
|
|
"&namenodeInfoPort=" + namenodeInfoPort;
|
|
|
- cols[0] = "<a href=\""+datanodeUrl+"\">"+files[i].getPath()+"</a>";
|
|
|
+ cols[0] = "<a href=\""+datanodeUrl+"\">"+files[i].getName()+"</a>";
|
|
|
cols[1] = "dir";
|
|
|
- cols[2] = "0";
|
|
|
- cols[3] = Short.toString(files[i].getReplication());
|
|
|
- cols[4] = Long.toString(files[i].getBlockSize());
|
|
|
- jspHelper.addTableRow(out, cols);
|
|
|
+ cols[2] = "";
|
|
|
+ cols[3] = "";
|
|
|
+ cols[4] = "";
|
|
|
}
|
|
|
+ jspHelper.addTableRow(out, cols, row++);
|
|
|
}
|
|
|
jspHelper.addTableFooter(out);
|
|
|
String namenodeHost = jspHelper.nameNodeAddr.getHostName();
|
|
@@ -110,13 +124,21 @@
|
|
|
%>
|
|
|
|
|
|
<html>
|
|
|
-
|
|
|
+<HEAD>
|
|
|
+<STYLE TYPE=text/css>
|
|
|
+<!--
|
|
|
+BODY
|
|
|
+ {
|
|
|
+ font-face:sanserif;
|
|
|
+ }
|
|
|
+-->
|
|
|
+</STYLE>
|
|
|
<title>Hadoop DFS Directory Browsing</title>
|
|
|
+</HEAD>
|
|
|
|
|
|
<body>
|
|
|
-
|
|
|
<%
|
|
|
- generateDirectoryStructure(out,request);
|
|
|
+ generateDirectoryStructure(out,request,response);
|
|
|
%>
|
|
|
<hr>
|
|
|
|