- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 EMR 流作业 (Python),它通常工作正常(例如,10 台机器处理 200 个输入)。然而,当我针对大型数据集(12 台机器处理总共 6000 个输入,每个输入大约 20 秒)运行它时,经过 2.5 小时的处理后,我得到以下错误:
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 143
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:372)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:586)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:441)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:377)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
如果我没看错的话,子进程失败,代码为 143,因为有人向流作业发送了 SIGTERM 信号。
我的理解对吗?如果是这样:EMR 基础设施何时会发送 SIGTERM?
最佳答案
我知道发生了什么,所以如果其他人遇到类似问题,这里有一些信息。
对我来说关键是查看“jobtracker”日志。这些位于 S3 上任务的日志/文件夹中,位于:
<logs folder>/daemons/<id of node running jobtracker>/hadoop-hadoop-jobtracker-XXX.log.
有多行如下:
2012-08-21 08:07:13,830 INFO org.apache.hadoop.mapred.TaskInProgress
(IPC Server handler 29 on 9001): Error from attempt_201208210612_0001_m_000015_0:
Task attempt_201208210612_0001_m_000015_0 failed to report status
for 601 seconds. Killing!
所以我的代码超时了,它被杀死了(它超过了 10 分钟的任务超时)。 10 分钟我没有做任何 I/O,这当然不是预期的(我通常每 20 秒做一次 I/O)。
然后我发现了这篇文章:
http://devblog.factual.com/practical-hadoop-streaming-dealing-with-brittle-code
“在我们的一个科学项目中,我们有一些 Hadoop Streaming 作业在 ruby 上运行并依赖 libxml 来解析文档。这造成了一场完美的糟糕 Storm ——网络充满了非常糟糕的 html,而 libxml 偶尔会出现进入无限循环或彻底的段错误。在某些文档中,它总是段错误。”
它成功了。我一定遇到了其中一种“libxml 进入无限循环”的情况(我大量使用 libxml——只使用 Python,而不使用 Ruby)。
我的最后一步是触发跳过模式(此处的说明:Setting hadoop parameters with boto?)。
关于python - 亚马逊弹性 MapReduce - SIGTERM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970646/
当前在我的 Windows 机器上使用 Codeception 运行 PHPUnit 时出现错误: [PHPUnit_Framework_Exception] Use of undefined con
当我的 Dockerfile 以 结尾时 CMD node . docker 使用命令 /bin/sh -c "node ." 运行该容器而不是简单的 node . (我知道,我可以用 CMD ["n
在Airflow v2.6.3上,我每天运行Spark作业。每隔一段时间,DAG中的成功作业都会通过EMR传感器重试该作业。重试的作业将显示“此实例的状态已在外部设置为up_for_retry。正在终
$ cat SIGTERM #!/bin/bash set -eu flag_file=$(xdg-user-dir DESKTOP)/SIGTERM-TRAPPED trap 'touch "$fl
我有一个单线程进程,它不会因 kill -TERM 而死亡。过程 信号掩码不显示 SIGTERM 被阻止。我正在执行“杀死” 根。我可以使用 SIGKILL 终止进程,但这是更大范围的一部分 系统,我
我有一个 bash 脚本调用 run.sh启动多个进程 #!/bin/bash proc1 & proc2 & proc3 & final # this runs until sigterm 当我执行
我正在摆弄多处理和信号。我正在创建一个池,并让工作人员捕获 SIGTERM。没有明显的原因,我观察到子进程随机接收 SIGTERM 。这是一个 MWE: import multiprocessing
Java 有没有办法处理接收到的 SIGTERM? 我正在运行一个 java 服务,但不想在用户注销时关闭我的 java 服务。 只想覆盖 sigterm 关闭处理程序,但保留其余信号的处理程序。 d
操作系统 (Linux) 可以向进程发送 SIGTERM 吗?如果是,什么时候?在什么情况下?例如,当我的进程写入不正确的地址内存时,操作系统会向它发送 SIGSEGV。提前致谢 最佳答案 Can O
我正在 try catch SIGTERM 信号并在来自 Linux 守护进程的处理程序中打印一条消息: void SigStop_Handler(int sig) { D(printf("**
我有一个简单的守护进程可以归结为 #include #include #include #include #include #include bool running = true; st
Java中有没有办法处理收到的SIGTERM? 我正在运行 java 服务,但不想在用户注销时关闭我的 java 服务。 只想覆盖 sigterm 关闭处理程序,但保留其余信号的处理程序。 detai
我有一个通过响应信号来运行的 C 程序。一些信号导致父进程 fork 。这允许在父级继续响应信号的同时进行其他处理。 当父级收到 SIGTERM 时,我希望 fork 的子级也收到 SIGTERM。在
我正在做这样的事情 def exitHandler(self, *args): self.stopThreads() sys.exit(2) 然后我在我的 self.run 中注册了该
我用c设计了一个消息传递接口(interface),用于在我的系统中运行的不同进程之间提供通信。该接口(interface)为此目的创建 10-12 个线程,并使用 TCP 套接字提供通信。 它工作正
我有一个可以启动和关闭进程的类。但似乎并没有关闭该进程。 我的python代码,还有其他方法,但它们工作得很好。: class KismetInstance: """Creates a kis
我的守护进程(仅限 Linux)具有以下信号处理程序: static void signal_handler(int id, siginfo_t *si, void *context) { i
有一个守护进程有两个线程:th1,th2。 th2 使用 read(2) 读取套接字。 如果我用 SIGTERM 终止守护进程,th1 会捕获并处理信号(设置终止标志),在调用守护进程析构函数之后,它
我的程序如下: #include #include #include #include int main() { struct sigaction new_sa; struct
如果 Python 接收到 SIGTERM 但没有为其注册信号处理程序,默认情况下会在幕后做什么? 最佳答案 基于 Thomas Wouters 的回答,python 没有为 SIGTERM 信号注册
我是一名优秀的程序员,十分优秀!