【问题标题】:To debug map reduce jobs in eclipse在eclipse中调试map reduce作业
【发布时间】:2014-10-29 05:30:58
【问题描述】:

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

【问题讨论】:

  • 我也试过了,但不成功
  • 由于作业是分布式的,无法实时调试
  • 但是...我使用eclipse启动了所有服务,并且可以调试一些类文件..但是我无法创建完整的调试环境
  • 你是在本地处理单节点吗?
  • 是的...我只在单节点集群中工作..

标签: java eclipse hadoop mapreduce


【解决方案1】:

我不知道可以做你正在寻找的东西的 Eclipse 工具。如果您正在寻找可能的解决方案,以下将在 java 中工作。

import java.util.logging.Logger;

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    1. 本地模式
    2. 伪分布式模式
    3. 完全分布式模式(集群)

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

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

    1. 在本地模式下运行 hadoop 以进行调试,以便映射器和缩减器任务在单个 JVM 中运行,而不是在单独的 JVM 中运行。下面的步骤可以帮助你做到这一点。

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

    (export HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8008")

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

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

    3. 为 Eclipse 创建调试配置并将端口设置为 8008 - 典型的东西。为此,请转到调试器配置并创建一个新的远程 Java 应用程序类型的配置并在设置中将端口设置为 8080。

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

    就是这样。

    【讨论】:

    • 我在第 3 步之后进行了以下小改动:第 3 步:只需按照此处的建议将“hdfs://”更改为本地:wiki.apache.org/hadoop/HowToDebugMapReducePrograms。第 5 步。我没有将 eclipse 调试配置配置为使用特定端口。第 6 步:像往常一样在 Eclipse 中使用调试模式 - 将为输入文件中的每一行在映射器函数中命中一个断点。
    • 这是另一篇文章,展示了如何将 java 调试器附加到特定端口。 javarevisited.blogspot.com/2011/02/…
    【解决方案3】:

    我创建了一个 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,
    将 /j01/srv/hadoop-2.7.3 替换为您的 hadoop 安装主路径
    2) mkdir -p /home/hadroop/input
    复制 src/main/resources/input.txt 到 /home/hadoop/input/

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

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多