集群模式下的异常,但在eclipse下运行可以正常工作

问题描述 投票:1回答:2

我不知道为什么我的Hadoop项目无法在命令行下执行

hadoop jar class-examples-1-1.0.0-SNAPSHOT.jar stock.intro.MR2Screener1 "companylistNASDAQ.csv" output/mr2_screener1

异常消息显示对我没有有用的信息= _ =

任何方向或想法? 谢谢

在日食下完美运作

inline

通过命令行运行的部分异常日志

2016-11-03 09:14:13,448 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 30206 for container-id container_1478145101159_0003_01_000001: 131.6 MB of 2 GB physical memory used; 1.6 GB of 4.2 GB virtual memory used
2016-11-03 09:14:14,084 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exit code from container container_1478145101159_0003_01_000001 is : 1
2016-11-03 09:14:14,085 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1478145101159_0003_01_000001 and exit code: 1
ExitCodeException exitCode=1: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:578)
    at org.apache.hadoop.util.Shell.run(Shell.java:481)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:763)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:213)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

完整日志

https://gist.github.com/anonymous/242e22801f289d38f30182ff44cd317d

https://gist.githubusercontent.com/anonymous/242e22801f289d38f30182ff44cd317d/raw/86ddf748700c0cc4cbc5d63dc3e6327833b308fb/hadoop_cluster.log

2016-11-03下午4点更新

用HDFS绝对路径尝试了luanch命令

“hadoop jar class-examples-1-1.0.0-SNAPSHOT.jar stock.intro.MR2Screener1”/user/cloudera/companylistNASDAQ.csv“”/ user / cloudera / output / mr2_screener1“”

Runner to remedy this.
16/11/03 16:24:42 INFO input.FileInputFormat: Total input paths to process : 1
16/11/03 16:24:42 INFO mapreduce.JobSubmitter: number of splits:1
16/11/03 16:24:42 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1478145101159_0007
16/11/03 16:24:42 INFO impl.YarnClientImpl: Submitted application application_1478145101159_0007
16/11/03 16:24:43 INFO mapreduce.Job: The url to track the job: http://quickstart.cloudera:8088/proxy/application_1478145101159_0007/
16/11/03 16:24:43 INFO mapreduce.Job: Running job: job_1478145101159_0007
16/11/03 16:24:52 INFO mapreduce.Job: Job job_1478145101159_0007 running in uber mode : false
16/11/03 16:24:52 INFO mapreduce.Job:  map 0% reduce 0%
16/11/03 16:24:52 INFO mapreduce.Job: Job job_1478145101159_0007 failed with state FAILED due to: Application application_1478145101159_0007 failed 2 times due to AM Container for appattempt_1478145101159_0007_000002 exited with  exitCode: 1
For more detailed output, check application tracking page:http://quickstart.cloudera:8088/proxy/application_1478145101159_0007/Then, click on links to logs of each attempt.
Diagnostics: Exception from container-launch.
Container id: container_1478145101159_0007_02_000001
Exit code: 1
Stack trace: ExitCodeException exitCode=1:
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:578)
    at org.apache.hadoop.util.Shell.run(Shell.java:481)
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:763)
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:213)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
hadoop cloudera
2个回答
0
投票

您只能在Eclipse中运行类示例,而不能在集群上运行

虽然这个问题是在课堂上提出并回答的,但也许我并不完全清楚,所以让我再试一次。


我给你的代码不会在集群上运行,因为集群使用的是用Java 1.7编译的Hadoop 2.6.0。

但是它在Eclipse中运行,因为Eclipse在单机模式下运行Hadoop和您使用的是Java 1.8编译。


你怎么调试这个


您提供日志文件非常棒,但是当您按照作业输出中的链接到终端时获得了您提供的日志文件,这最终使您获得了http://quickstart.cloudera:8042 / logs / yarn-yarn -nodemanager-quickstart.cloudera.log

我赞赏你找到这个滚动日志,面向管理员。 但是,这不是最有用的日志文件。

您需要使用作业中引用的日志文件(HW1,第1部分)。

在群集上运行时,用于调试的日志存储在HDFS下

/var/log/hadoop-yarn/apps/cloudera/logs

使用Hue很容易读取日志文件

  1. 在VM上的浏览器中打开Hue。
  2. 选择“FileBrowser”
  3. 在FileBrowser中,导航/ var / log / hadoop-yarn / apps / cloudera / logs /
  4. 找到失败的应用程序(最近运行的应用程序位于列表的底部)
  5. 单击以打开应用程序的日志 - 它将以二进制形式显示。
  6. 要使其清晰,请在左侧面板中选择“ 以文本形式查看
  7. 现在你有一个清晰的日志; 查找引发的第一个FATAL错误 它应该是日志的顶部。

我复制了错误并在应用程序日志中查找了第一个错误。 这里是:

2016-11-06 11:18:37,017 FATAL [main]     org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster

java.lang.UnsupportedClassVersionError:    stock/intro/SectorCountWithFilter$StockSectorMapper : Unsupported major.minor version 52.0

UnsupportedClassVersionError

Java虚拟机(JVM)在尝试读取支持Java版本的类文件时抛出UnsupportedClassVersionError。 在我们的例子中,Hadoop集群JVM可以处理高达1.7的Java版本,并且您的代码是使用Java 1.8在Eclipse中编译的。

我们怎么知道JVM在运行什么? 好吧,看看错误,我们可以看到MRApplicationMaster启动时会出现此错误 - 因此MRApplicationMaster JVM无法链接您的类文件。 如您所知,这是在您的作业开始处理时在Hadoop集群上启动的JVM。 一旦放弃,其他任何事情都无关紧要。 然后可能会出现各种错误,因为作业启动已中止,但您应该忽略这些错误并专注于出现的第一个错误。

我们可以得出结论,我们看到的主要错误是在集群上运行的Java版本与用于编译代码的Java版本之间存在不匹配。

我们该如何解决? 在我们的例子中,唯一要做的是在Eclipse中引用不同的JRE - 并在pom.xml中更改maven编译选项。

顺便说一句,不要理会几乎所有关于这个错误的博客传播的可怕建议:你不能只看你的机器上的java版本来找出JVM运行的版本。 使用$ java -version将无法解决我们的问题,并且充其量只能为不可靠的修复提供随意的基础。

在VM群集上运行的Hadoop的构建使用java = 1.7.0_67。


多么可怕的兔子洞。 请在Eclipse中运行。

你的老师...


0
投票

谷歌搜索“java主要次要版本”将为您提供确切的Java版本。 例如

堆栈溢出的java版本号

这肯定是一个棘手的问题,但是理解这些消息是什么的症状是很好的,因为它们非常神秘(出于某些无法解释的原因......为什么它不能用我们理解的语言告诉我们?)

确实发生在现实生活中!

© www.soinside.com 2019 - 2024. All rights reserved.