我正在尝试在工作完成后收到通知。为此,我使用以下链接作为引用。我无法让它工作。我在互联网上找不到太多关于它的东西。我正在使用 tomcat 作为在我使用 servlet 的地方建立通知 url 点的方法。
http://hadoopi.wordpress.com/2013/09/18/hadoop-get-a-callback-on-mapreduce-job-completion/
根据我的说法,这是 servlet 显然不应该工作,因为我没有直接从我应该提交参数的另一个页面调用它。在这里,我需要一个监听器来获取来自 hadoop 的调用,然后获取将提交给 servlet 的 jobId 和 jobStatus,但我不知道如何实现。
import java.io.*;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Serv extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
pw.close();
}
public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
pw.close();
}
}
这是我的 Toolrunner 运行函数中用于通知的代码部分。
conf.set("job.end.notification.url", "http://localhost:8080/Serv?jobId=$jobId&jobStatus=$jobStatus");
conf.setInt("job.end.retry.attempts", 3);
conf.setInt("job.end.retry.interval", 1000);
我认为可能还有很多工作要做才能让它发挥作用。
我对 php 进行了同样的尝试,并相应地更改了代码。
编辑 我得到它的一部分,我必须将输出记录在一个文件或其他地方,以便在调用 Servlet 时它应该将输出记录到一个文件,即创建一个具有作业 ID 和作业状态的文件。所以我按如下方式更改了我的 Servlet 代码,但仍然没有创建文件。
import java.io.*;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Serv extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
PrintWriter writer = new PrintWriter("log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.close();
pw.close();
}
public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
PrintWriter writer = new PrintWriter("log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.close();
pw.close();
}
}
感谢任何帮助。
最佳答案
这就是我最终使它工作的方法。 我之前所做的是一些愚蠢的事情,我试图回应输出。这显然对我来说似乎是错误的,但当调用 Servlet 时我必须在某处记录输出并没有让我明白,所以我将输出写入一个有效的文件。
行 String path = getServletContext().getRealPath("/"); 在这里很重要,因为它设置了根目录的路径,否则它会拒绝写入日志文件的权限。
import java.io.*;
import java.util.Enumeration;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class Serv extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
String path = getServletContext().getRealPath("/");
PrintWriter writer = new PrintWriter(path+"log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.close();
pw.close();
}
public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
String jobId=req.getParameter("jobId");
String jobStatus=req.getParameter("jobStatus");
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
pw.println("JobId: \n"+jobId);
pw.println("JobStatus: \n"+jobStatus);
String path = getServletContext().getRealPath("/");
PrintWriter writer = new PrintWriter(path+"log.txt", "UTF-8");
writer.println("Job ID : "+jobId);
writer.println("Job Status : "+jobStatus);
writer.close();
pw.close();
}
}
关于tomcat - 在 Hadoop 中实现作业结束通知监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857524/
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我需要在RubyonRails中实现无向图G=(V,E)并考虑构建一个Vertex和一个Edge模型,其中Vertex有_多条边。由于边恰好连接两个顶点,您将如何在Rails中执行此操作?您是否知道任何有助于实现此类图表的gem或库(对重新发明轮子不感兴趣;-))? 最佳答案 不知道有任何现有库在ActiveRecord之上提供图形逻辑。您可能必须实现自己的Vertex、EdgeActiveRecord支持的模型(请参阅Rails安装的rails/activerecord中的vertex.rb和edge.rb/test/fixtur
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述
基本上,我只是试图在满足特定条件时停止程序运行其余行。unlessraw_information.firstputs"Noresultswerereturnedforthatquery"breakend然而,在程序运行之前我得到了这个错误:Invalidbreakcompileerror(SyntaxError)执行此操作的正确方法是什么? 最佳答案 abort("Noresultswerereturnedforthatquery")unlesscondition或unlessconditionabort("Noresultswer
我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够