集群模式下的异常,但在eclipse

时间:2016-11-03 16:25:44

标签: hadoop cloudera

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

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

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

任何方向或想法?感谢

在eclipse

下完美运行

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 4pm

尝试使用HDFS绝对路径的luanch命令

  

" hadoop jar class-examples-1-1.0.0-SNAPSHOT.jar   stock.intro.MR2Screener1" /user/cloudera/companylistNASDAQ.csv"   " /用户/ Cloudera的/输出/ 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)

2 个答案:

答案 0 :(得分: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. 现在你有一个清晰的日志;查找引发的第一个致命错误。它应该在日志的顶部。
  8. 我复制了错误并在应用程序日志中查找了第一个错误。这是:

    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中运行。

    你的老师......

答案 1 :(得分:0)

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

java version numbers on stack overflow

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

DOES 在现实生活中发生!