我想做以下任务:
我在主节点的 Eclipse 中运行了 MapReduce 应用程序,例如 WordCount,我想看看工作节点是如何使用 Eclipse 工作的,因为我知道本地 mapreduce 作业和完全分布式的 mapreduce 作业之间存在一些不同的工作流程。
有没有办法做到这一点?
您可以在本地运行任务,请参阅如何调试 Map/Reduce 程序:
首先让所有东西在本地运行器中运行(可能在一个小的输入上)。您可以通过在配置中将作业跟踪器设置为“本地”来完成此操作。本地运行器可以在调试器下运行并在您的开发机器上运行。
设置此配置变量的一种非常快速且简单的方法是在运行作业之前包含以下行:
conf.set("mapred.job.tracker", "local");
您可能还希望这样做以使输入和输出文件位于本地文件系统中,而不是在分布式 Hadoop 中文件系统(HDFS):conf.set("fs.default.name", "local");
您还可以在 hadoop-site.xml 中设置这些配置参数。当程序运行时,配置文件 hadoop-default.xml、mapred-default.xml 和 hadoop-site.xml 应该出现在程序的类路径中的某个位置。
如果您想在真实集群中调试任务,则必须将调试选项添加到 Java 开始行(例如-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000
),然后将 Eclipse 远程连接到等待的 Java 进程。例如,您可以设置mapred.map.child.java.opts
. 有几个例子如何做到这一点,尽管如何做到这一点的细节有所不同:
一旦您了解目标是将-agentlib:...
参数传递给 Java 命令行以启用远程调试器以便 Eclipse 可以附加一些东西,那么具体如何实现就变得无关紧要了。不过,我会避开 hadoop-env.sh 修改。
AFAIK Cloudera 有一个带有预配置 Eclipse 的 VM 映像,用于本地 M/R 任务开发,请参阅操作方法:在 Cloudera 的 QuickStart VM 中将 Eclipse 与 MapReduce 一起使用