关于在eclipse上能运行Map但无法运行Reduce的解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于在eclipse上能运行Map但无法运行Reduce的解决方法相关的知识,希望对你有一定的参考价值。

参考技术A 今日我在eclipse上运行Map/Reduce框架进行数据分析的时候遇到了一个很奇怪的错误:
一开始我发现运行程序之后也没在控制台报错,也生成了目标目录,但一直出不来统计好的数据文件。
我先通过位置标记输出来判断各个类的加载是否正常,
发现Map是可以正常加载执行的,但是Reduce一直无法加载执行。
然后我通过设置,让其在运行时显示日志信息,再运行。
文末会分享设置显示日志信息的方法。

这一次便发现了如下的报错:

日志中的报错信息:
java.lang.Exception: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in localfetcher#1at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529)Caused by: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in localfetcher#1at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)at org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:319)at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask.run(Unknown Source)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)Caused by:(1)]java.io.FileNotFoundException: E:/tmp/hadoop-Alan%20Yang/mapred/local/localRunner/Alan%20Yang/jobcache/job_local214639494_0001/attempt_local214639494_0001_m_000003_0/output/file.out.indexat org.apache.hadoop.fs.RawLocalFileSystem.open(RawLocalFileSystem.java:200)at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767)at (2)]org.apache.hadoop.io.SecureIOUtils.openFSDataInputStream(SecureIOUtils.java:156)at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:70)at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:62)at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:57)at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.copyMapOutput(LocalFetcher.java:124)at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.doCopy(LocalFetcher.java:102)at org.apache.hadoop.mapreduce.task.reduce.LocalFetcher.run(LocalFetcher.java:85)2017-07-12 16:19:02,616 INFO [org.apache.hadoop.mapreduce.Job] - Job job_local214639494_0001 failed with state FAILED due to: NA2017-07-12 16:19:02,663 INFO [org.apache.hadoop.mapreduce.Job] - Counters: 22File System CountersFILE: Number of bytes read=62223FILE: Number of bytes written=176635984FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=898750946HDFS: Number of bytes written=0HDFS: Number of read operations=140HDFS: Number of large read operations=0HDFS: Number of write operations=10Map-Reduce FrameworkMap input records=2629660Map output records=2626091Map output bytes=26260910Map output materialized bytes=31513152Input split bytes=1210Combine input records=0Spilled Records=2626091Failed Shuffles=0Merged Map outputs=0GC time elapsed (ms)=496Total committed heap usage (bytes)=7754743808File Input Format Counters Bytes Read=163038920

按照通常的排错思路,后面的错误往往是前面的错误导致产生的,所以我先入为主的直接去搜索 error in shuffle in localfetcher的解决办法,发现几乎都在说是内存的问题。百般尝试始终是毫无成效。

后来当我往下看的时候发现其实日志给出了大概的错误原因,是路径的问题。这一下子就找到了正确的方向。通过查找资料,发现有的朋友通过修改默认的路径即可解决,我尝试了一下,结果只是换个路径报错而已。这就耐人寻味了,我再自己看了看这条报错信息,里面用到了我的Windows的用户名,但是中间的空格变成了%20,在路径中出现%这意味着什么?配过环境变量的人都知道。我一下子恍然大悟。很有可能是Windows用户名的问题。所以我去修改了Windows本机的用户名,把空格去掉。一下子就解决了!!!

eclipse控制台不显示MapReduce程序日志的解决方法:
使用Hadoop2.6.0,在eclipse下面调试mapreduce程序的时候,控制台不打印程序运行时的日志,而是显示如下信息:
log4j:WARN No appenders could be found for logger (org.apache.[Hadoop]
log4j:WARN Please initialize the log4j system properly.
log4j:WARN [hadoop] See noconfig for more info.
说明没有配置log4j.properties文件。这虽然不影响程序的正常运行,但是看不到日志难免不爽。解决方法:把Hadoop2.6.0的安装目录下面的/etc/hadoop/目录下面的log4j.properties文件拷贝放到MapReduce工程的src目录下面。

Magnolia 6.0 无法在 Eclipse+Tomcat 上运行(带有服务模块但未发布)

【中文标题】Magnolia 6.0 无法在 Eclipse+Tomcat 上运行(带有服务模块但未发布)【英文标题】:Magnolia 6.0 not working on Eclipse+Tomcat (with serve module without publishing) 【发布时间】:2019-01-03 03:13:10 【问题描述】:

我正在尝试为 Magnolia 6.0 (Eclipse+Tomcat9) 设置开发环境 启用“不发布服务模块”时出现错误。 当我禁用此选项时,项目运行正常。

初始化 Log4J 无法加载配置文件 [WEB-INF/config/default/log4j2.xml],出现 IOException :Can't load configuration file: WEB-INF/config/default/log4j2.xml

2019-01-03 05:01:20,058 INFO info.magnolia.init.MagnoliaServletContextListener :加载的属性源:[DefaultMagnoliaConfigurationProperties 与源:[SystemPropertySource][ServletContextPropertySource 来自 WEB-INF/config/default/magnolia.properties][ ModulePropertiesSource 来自模块 [core, dam, freemarker-support, lang-da, lang-el, periscope-api, speech-recognizer, categorization-support, ce-product-descriptor,imaging-support, publishing-core, resource-loader, rest-client,rest-integration,config,i18n,publishing-receiver,publishing-sender,rest-services,缓存,内容类型,渲染,ui-framework-core,virtual-uri,dam-jcr,ehcache3,成像, resteasy-client、tasks-app、模板、ui-framework、resources、scheduler、ui-admincentral、ui-framework-jcr、ui-mediaeditor、about-app、cache-app、groovy、log-tools、magnolia-resources-模板、消息应用程序、页面、密码管理器、发布应用程序、资源应用程序、安全应用程序、站点、任务管理、ui-contentapp、ca che-browser-app, 联系人, dam-app, dam-imaging, dam-template, definitions-app, jcr-browser-app, jcr-tools, mail, mte-imaging, periscope-core, site-app, admincentral, form, mte, rest-content-delivery, javascript-models, mtk, rssaggregator, 分类, lang-ar, lang-cs, lang-de, lang-es, lang-fi, lang-fr, lang-he, lang- hr, lang-hu, lang-id, lang-it, lang-ja, lang-ko, lang-nl, lang-no, lang-pl, lang-pt, lang-pt_BR, lang-ru, lang-sk, lang-sq, lang-sv, lang-tr, lang-zh_CN, lang-zh_TW, webapp]][InitPathsPropertySource]]

木兰许可证

版本号:6.0 核心版本:6.0.0 构建:2018 年 11 月 30 日(修订版 16e89c4505ccdb0a46dd3abd3348c3a5129e361b 未知) 版本:社区版 提供者:Magnolia International Ltd. (info@magnolia-cms.com) 2019-01-03 05:01:20,205 INFO info.magnolia.cms.beans.config.ConfigLoader:初始化内容存储库 2019-01-03 05:01:20,205 信息 info.magnolia.repository.DefaultRepositoryManager:加载 JCR 2019-01-03 05:01:20,221 错误 info.magnolia.repository.DefaultRepositoryManager:无法加载配置文件:WEB-INF/config/default/repositories.xml java.io.IOException:无法加载配置文件:WEB-INF/config/default/repositories.xml

【问题讨论】:

【参考方案1】:

你找到解决办法了吗?

你的 tomcat9 在哪里? ,您是否检查过您的工作区文件夹权限? 它基本上暗示tomcat似乎无法从您的eclipse工作区位置找到文件

【讨论】:

以上是关于关于在eclipse上能运行Map但无法运行Reduce的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eclipse + Robot Editor (RED) 修复内容帮助以建议内置关键字?

关于一个C语言写的代码无法运行出结果

RED 无法识别标准库(RobotFW 4.0)

请问:在windows下双击.jar文件无法运行,但cmd下-jar命令可以运行

求助:为啥我编的C++程序在自己电脑上能正常运行,但编译后挂在后台linux系统下就总是运行一半后出错,

eclipse 安卓运行一直跳转到调试模式