【发布时间】:2014-07-23 08:39:22
【问题描述】:
我正在尝试使用以下代码将文件从本地存储复制到 hdfs。如果我使用命令列出文件,即 hadoop fs -ls Alert,它可以工作,但在复制文件时它不起作用。
这是我的代码。
<html><%@ page import="java.util.*,java.io.*"%>
<%@ page import="java.lang.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.nio.file.Files"%>
<%@ page import="java.nio.file.Paths"%>
<%@ page import="java.nio.file.attribute.PosixFilePermission"%>
<body>
<font color=black>
<%
String jobId=request.getParameter("jobId");
String jobStatus=request.getParameter("jobStatus");
String displayName=request.getParameter("displayName");
String name=request.getParameter("name");
String description=request.getParameter("description");
String frequency=request.getParameter("frequestuency");
String lastModifiedAt=request.getParameter("lastModifiedAt");
String createdAt=request.getParameter("createdAt");
String createdBy=request.getParameter("createdBy");
String opPath=request.getParameter("opPath");
String env=request.getParameter("env");
PrintWriter writer = new PrintWriter("/var/lib/tomcat7/webapps/ROOT/log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.println("Rule Name : "+name);
writer.println("Rule Display Name : "+displayName);
writer.println("Rule Description : "+description);
writer.println("Rule env : "+env);
writer.println("Rule frequency : "+frequency);
writer.println("Rule last modified at : "+lastModifiedAt);
writer.println("Rule created at : "+createdAt);
writer.println("Rule created by : "+createdBy);
writer.println("Notification Path : "+opPath);
writer.close();
Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
perms.add(PosixFilePermission.OWNER_READ);
perms.add(PosixFilePermission.OWNER_WRITE);
perms.add(PosixFilePermission.OWNER_EXECUTE);
perms.add(PosixFilePermission.GROUP_READ);
perms.add(PosixFilePermission.GROUP_WRITE);
perms.add(PosixFilePermission.GROUP_EXECUTE);
perms.add(PosixFilePermission.OTHERS_READ);
perms.add(PosixFilePermission.OTHERS_WRITE);
perms.add(PosixFilePermission.OTHERS_EXECUTE);
Files.setPosixFilePermissions(Paths.get("/var/lib/tomcat7/webapps/ROOT/log.txt"), perms);
Process p = Runtime.getRuntime().exec("/usr/local/hadoop/bin/hadoop fs -copyFromLocal /var/lib/tomcat7/webapps/ROOT/log.txt Alert/Notify");
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null )
{
out.println(disr);
disr = dis.readLine();
}
%>
</body>
</font>
</html>
甚至 -mkdir、-rmr 等都可以完美运行。我认为从 ROOT 文件夹复制文件存在一些问题。
我是否需要做更多的事情,特别是复制文件。
感谢任何帮助。
【问题讨论】:
标签: jsp hadoop runtime.exec