在eclipse中调试map reduce作业

时间:2014-10-29 05:30:58

标签: java eclipse hadoop mapreduce

我想使用eclipse调试Map-reduce作业(pig,hive)。也就是说,在hadoop源java文件中设置断点并在运行map-reduce作业时检查元素。为此,我使用eclipse启动了所有服务,我可以调试一些类文件。但是我无法创建整个调试环境。谁能告诉我怎么样?

3 个答案:

答案 0 :(得分:1)

我不知道一个可以做你想要的eclipse工具。如果您正在寻找可能的解决方案,以下将适用于Java。

import java.util.logging.Logger;

对于调试java map reduce文件,您可以为每个类(驱动程序,映射器,reducer)使用java logger。

Logger log = Logger.getLogger(MyClass.class.getName());

要检查元素/变量,只需使用:

log.info( "varOne: " + varOne );

这些日志行可以打印在您工作的管理页面中。

答案 1 :(得分:1)

这里要记住的基本事情是调试Hadoop MR作业将类似于Eclipse中任何远程调试的应用程序。

如您所知,Hadoop可以在3种不同模式下在本地环境中运行:

  1. 本地模式
  2. 伪分布式模式
  3. 完全分布式模式(群集)
  4. 通常,您将在伪分布式模式下运行本地hadoop设置,以利用HDFS和Map Reduce(MR)。但是,您无法在此模式下调试MR程序,因为每个Map / Reduce任务将在单独的JVM进程中运行,因此您需要切换回本地模式,您可以在单个JVM进程中运行MR程序。

    以下是在本地环境中进行调试的快速简单步骤:

    1. 以本地模式运行hadoop进行调试,因此mapper和reducer任务在单个JVM中运行,而不是在单独的JVM中运行。以下步骤可帮助您完成此任务。

    2. 配置HADOOP_OPTS以启用调试,这样当您运行Hadoop作业时,它将等待调试器连接。下面是在8080端口调试相同的命令。

    3. (导出HADOOP_OPTS =“ - agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = 8008”)

      1. 将core-site.xml中的fs.default.name值配置为file:/// from hdfs://。您不会在本地模式下使用hdfs。

      2. 将mapred-site.xml中的mapred.job.tracker值配置为local。这将指示Hadoop在单个JVM中运行MR任务。

      3. 为Eclipse创建调试配置并将端口设置为8008 - 典型的东西。为此,请转到调试器配置并创建新的Remote Java Application配置类型,并在设置中将端口设置为8080.

      4. 运行您的hadoop作业(它将等待调试器连接),然后使用上述配置以调试模式启动Eclipse。确保先确定一个断点。

      5. 多数民众赞成。

答案 2 :(得分:0)

我创建了一个eclipse项目来调试通用的mapreduce程序,例如WordCount.java,在Eclipse中运行独立的hadoop。但我还没有尝试过hive / pig特定的mapreduce工作。该项目位于https://github.com/drachenrio/hadoopmr,可以使用

下载
git clone https://github.com/drachenrio/hadoopmr

该项目是使用Ubuntu 16.04.2,Eclipse Neon.3 Release(4.6.3RC2),jdk1.8.0_121,hadoop-2.7.3环境创建的。

快速设置
1)项目导入Eclipse后,打开.classpath,
用你的hadoop安装主路径替换/j01/srv/hadoop-2.7.3 2)mkdir -p / home / hadroop / input
将src / main / resources / input.txt复制到/ home / hadoop / input /

准备运行/调试WordCount.java mapreduce作业 阅读README.md了解更多详情 如果您更喜欢手动创建项目,请参阅stackoverflow中的另一个answer