我正在构建可以像Hadoop Web UI一样从HDFS创建和删除目录和文件的Web应用程序,但是第一步失败了。我什至无法在HDFS中创建目录。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
// Extend HttpServlet class
public class Saurab extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String hdfsUri = "hdfs://saurab:9000/";
String dirName = "ekbana113";
FileSystem hdfs = null;
Configuration con = new Configuration();
try {
con.addResource(new Path("/home/saurab/hadoopec/hadoop/etc/hadoop/core-site.xml"));
con.addResource(new Path("/home/saurab/hadoopec/hadoop/etc/hadoop/hdfs-site.xml"));
hdfs = FileSystem.get(URI.create(hdfsUri), con); //hdfs is null, I don't know why ?
} catch (IOException e) {
e.printStackTrace();
}
try {
hdfs.mkdirs(new Path(hdfsUri + "/" + dirName)); // Null pointer exception
} catch (IOException e) {
e.printStackTrace();
}
}
}
我关注了this question
我正在使用tomcat服务器启动我的Web应用程序。 Hadoop已启动并正在运行。我创建了一个war文件,并将该warfile放在
/opt/tomcat/webapps/
中。然后我做了saurab:8080/servlet-name/mapper-url
这是正确的做法,还是我做错了什么?
最佳答案
您的Servlet没有@WebServlet
批注。您创建了web.xml
吗?如果不是,则应将@WebServlet
批注添加到servlet或创建WEB-INF / web.xml并在其中编写URL映射。另外,您应该访问http://saurab:8080/warfile-name/mapped-url
。
如果您的war文件名为test1.war,并且在@WebServlet(urlPatterns = { "/test2" })
之前添加了public class Saurab extends HttpServlet {
,则可以访问http://saurab:8080/test1/test2
。
关于java - 使用Java Servlet在HDFS内创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443051/