调试 Apache Slider 包?

Debug Apache Slider package?

我完成了 Slider Memcached 教程并成功 package/deploy/start memcached 容器;然而,当我打包一个自定义应用程序时,基本上是一个 Java jar 加上依赖项,容器永远不会成功启动。

应用程序页面显示应用程序处于 FINISHED/FAILED 状态并具有此诊断信息: http://quickstart.cloudera:8088/cluster/app/application_1439926335194_0001

诊断:应用程序实例不稳定:- 组件 MYAPP 失败 'recently' 6 次(启动时 4 次);阈值为 5 - 最后一次失败:主机 quickstart.cloudera 上的失败 container_1439926335194_0001_01_000008 (0):http://quickstart.cloudera:19888/jobhistory/logs//quickstart.cloudera:8041/container_1439926335194_0001_01_000008/ctx/MYUSER

诊断容器问题的部分挑战是日志在应用程序完成后消失。 http://quickstart.cloudera:8042/node/containerlogs/container_1439926335194_0001_01_000001/MYUSER

滑块有一个故障排除页面,表明您可以在应用程序完成后保留日志: http://slider.incubator.apache.org/docs/troubleshooting.html

配置 YARN 以更好地调试 一种有助于调试的配置是告诉节点管理器在容器完成后将数据保留一小段时间

<!-- 10 minutes after a failure to see what is left in the directory-->
<property>
  <name>yarn.nodemanager.delete.debug-delay-sec</name>
  <value>600</value>
</property>

并且我在Yarn - Configuration - NodeManager Base Group - Advanced - Localized Dir Delection Delay中找到了这个设置,并将其从默认的0改为1200;然而,即使在我部署客户端配置并重新启动 Nodemanager + Yarn,甚至重新启动 VM 之后,日志仍然会在容器完成时被删除。

我正在处理 CDH 5.3.0 Vitrualbox VM 映像,当我启动程序包时,集群 + 服务似乎工作正常。

编辑:

我在日志中看到的唯一错误是:

角色实例 RoleInstance 失败

2015-08-19 10:59:21,819 [AMRM 回调处理程序线程] 错误 appmaster.SliderAppMaster - 角色实例 RoleInstance{role='SIMHASH', id='container_1439926335194_0002_01_000003', container=ContainerID=container_1439926335194_0002_01_000003 nodeID=quickstart.cloudera:8041 http=quickstart.cloudera:8042 priority=1073741825 resource=, createTime=1440007115649, startTime=1440007115674, released=false, roleId=1, 主机=quickstart.cloudera、hostURL=http://quickstart.cloudera:8042、state=5、placement=null、exitCode=0、command='python ./infra/agent/slider-agent/agent/main.py --label container_1439926335194_0002_01_000003___SIMHASH --zk-quorum localhost:2181 --zk-reg-path /registry/users/c4/services/org-apache-slider/simhash1 > /slider-agent.out 2>&1 ; '、diagnostics=''、output=null、environment=[LANGUAGE="en_US.UTF-8", AGENT_WORK_ROOT="$PWD", HADOOP_USER_NAME="C4", AGENT_LOG_ROOT="", PYTHONPATH="./infra/agent/slider-agent/", LC_ALL="en_US.UTF-8", SLIDER_PASSPHRASE="8R9ZPw3aZ20GFydi3OqvEtwYhh1qzfQBmWv6BjXepg3PCcyS8m", LANG="en_US.UTF-8"]} 失败

简答

查看容器日志以获取 运行 应用程序的输出。

详情:

我通过容器 Web UI 找到了容器日志(在 Cloudera VM 上是 http://quickstart.cloudera:8042/node/allContainers

我的应用程序有 2 个容器,第一个只显示我之前查看的日志,指示容器是成功还是失败;第二个有许多有用信息的日志(命令/错误/滑块代理/status_command)。

它们是暂时的,但我能够在应用程序终止之前查看它们。

slider-agent.out 里面只有这一行:

找不到记录器的处理程序"root"

但是 slider-agent.log 给了我我正在寻找的信息,基本上是执行 Java 命令行的 stderr / stdout,这非常有帮助。

INFO 2015-08-19 14:07:28,422 AgentToggleLogger.py:40 - 队列结果:{'componentStatus':[], 'reports': [{'actionId': 你'4-1', 'clusterName': 你'myapp1', 'exitcode': 1, 'reportResult':是的, 'role': u'MYAPP', 'roleCommand': 你'开始', 'serviceName': 你'myapp1', 'status': 'FAILED', 'stderr': '2015-08-19 14:07:28,268 - 执行命令时出错 ..., 'stdout': '2015-08-19 14:07:23,261 - 执行[\'/usr/java/latest/bin/java -Xmx256m -classpath ..., 'structuredOut': '{}', 'taskId': 4}]}