我不知道为什么我的Hadoop项目无法在命令行下执行
hadoop jar class-examples-1-1.0.0-SNAPSHOT.jar stock.intro.MR2Screener1 "companylistNASDAQ.csv" output/mr2_screener1
异常消息显示对我没有有用的信息= _ =
任何方向或想法? 谢谢
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
用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)
您只能在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很容易读取日志文件
我复制了错误并在应用程序日志中查找了第一个错误。 这里是:
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
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。
你的老师...
谷歌搜索“java主要次要版本”将为您提供确切的Java版本。 例如
这肯定是一个棘手的问题,但是理解这些消息是什么的症状是很好的,因为它们非常神秘(出于某些无法解释的原因......为什么它不能用我们理解的语言告诉我们?)
它确实发生在现实生活中!