gpt4 book ai didi

jsp - 在jsp中使用Runtime.getRuntime()。exec()。除copy(copyFromLocal)外的所有命令均不起作用

转载 作者:行者123 更新时间:2023-12-02 21:46:24 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将文件从本地存储复制到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文件夹复制文件存在一些问题。

我是否需要做更多的事情,特别是用于复制文件。

任何帮助表示赞赏。

最佳答案

抱歉,您之前的误导是错误的。这个问题实际上是在hadoop的存储系统(hdfs)中造成的,我认为这绝对是tomcat或jsp的问题。我想在发现问题后立即删除该问题,但后来我认为这会使其他人受益,因为我在两天内都找不到任何内容。

我发现这最终可以帮助我Permission denied at hdfs

我想-copyFromLocal或-put需要具有一些权限,只需在hdfs-site.xml中添加以下内容,然后运行它就可以了。

 <property>
<name>dfs.permissions</name>
<value>false</value>
</property>

我也在php中尝试了同样的方法,它比jsp或servlet麻烦得多。

这是我最终在php中所做的
<?php
if( $_GET["jobId"] || $_GET["jobStatus"] )
{
echo "Job Id ". $_GET['jobId']. "<br />";
echo "Job Status ". $_GET['jobStatus']. "";
}
$jobId=$_GET["jobId"];
$jobStatus=$_GET["jobStatus"];
$displayName=$_GET["displayName"];
$name=$_GET["name"];
$description=$_GET["description"];
$frequency=$_GET["frequestuency"];
$lastModifiedAt=$_GET["lastModifiedAt"];
$createdAt=$_GET["createdAt"];
$createdBy=$_GET["createdBy"];
$opPath=$_GET["opPath"];
$env=$_GET["env"];
$file = fopen("log.txt","w");
echo fwrite($file,"Job ID : ".$jobId."\n"."Job Status : ".$jobStatus."\n"."Display Name : ".$displayName."\n"."Name : "."\n"."Description : ".$description."\n"."Frequency : ".$frequency."\n"."Last Modified At".$lastModifiedAt."\n"."Created At".$createdAt."\n"."Created By : ".$createdBy);
fclose($file);
chmod("log.txt", 0777);
$last_line = system('/usr/local/hadoop/bin/hadoop fs -put /var/www/html/log.txt /user/hduser/Alert/', $retval);
$last_line = system('/usr/local/hadoop/bin/hadoop fs -ls /user/hduser/Alert/', $retval);
echo '<pre>';
$output2 = exec('hadoop fs -copyFromLocal /var/www/html/log.txt /user/hduser/Alert/Notify');
echo '
</pre>
<hr />' . $last_line . '
<hr />' . $retval;
'<hr />' . $output1;

?>

关于jsp - 在jsp中使用Runtime.getRuntime()。exec()。除copy(copyFromLocal)外的所有命令均不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com