我想使用eclipse调试Map-reduce作业(pig,hive)。也就是说,在hadoop源java文件中设置断点并在运行map-reduce作业时检查元素。为此,我使用eclipse启动了所有服务,我可以调试一些类文件。但是我无法创建整个调试环境。谁能告诉我怎么样?
答案 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种不同模式下在本地环境中运行:
通常,您将在伪分布式模式下运行本地hadoop设置,以利用HDFS和Map Reduce(MR)。但是,您无法在此模式下调试MR程序,因为每个Map / Reduce任务将在单独的JVM进程中运行,因此您需要切换回本地模式,您可以在单个JVM进程中运行MR程序。
以下是在本地环境中进行调试的快速简单步骤:
以本地模式运行hadoop进行调试,因此mapper和reducer任务在单个JVM中运行,而不是在单独的JVM中运行。以下步骤可帮助您完成此任务。
配置HADOOP_OPTS以启用调试,这样当您运行Hadoop作业时,它将等待调试器连接。下面是在8080端口调试相同的命令。
(导出HADOOP_OPTS =“ - agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = 8008”)
将core-site.xml中的fs.default.name值配置为file:/// from hdfs://。您不会在本地模式下使用hdfs。
将mapred-site.xml中的mapred.job.tracker值配置为local。这将指示Hadoop在单个JVM中运行MR任务。
为Eclipse创建调试配置并将端口设置为8008 - 典型的东西。为此,请转到调试器配置并创建新的Remote Java Application配置类型,并在设置中将端口设置为8080.
运行您的hadoop作业(它将等待调试器连接),然后使用上述配置以调试模式启动Eclipse。确保先确定一个断点。
多数民众赞成。
答案 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