配置:在win7中使用eclipse,在win7上虚拟一个linux,在linux里安装hadoop。
目的:在eclipse中编写mapreduce程序,连接到hadoop上直接调试执行。
遇到的几个问题如下:
eclipse与hadoop-eclipse-plugin版本问题:试了很多版本,确定eclipse3.3.2版本+hadoop-0.20.2版本可用。hadoop插件就是hadoop自带的。
如果出现问题,把eclipse workspace清空,因为之前试用的plugin会影响到eclipse的环境。
连接问题:
在linux中用 ifconfig 命令查看虚拟机的ip,在eclipse连接时,使用该ip。hadoop配置文件中,都使用ip,不用主机名,比如 core-xml.site mapred master slave
在windows c盘的C:\Windows\System32\drivers\etc目录下修改 hosts文件,将虚拟机的ip和主机名加进去。
连接的时候,在edit hadoop location时,使用的配置和linux下的hadoop配置要一致。
以上基本可以run on hadoop,但是,想通过在线调试,出现了一个很棘手的问题:
在hadoop 的mapred-site.xml配置:
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx200m -agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y</value>
</property>
在eclipse中的edit hadoop location 配置中也要配置 mapred.child.java.opts。
但是,出现以下问题:
12/07/10 10:46:57 WARN mapred.JobClient: Error reading task outputhttp://hadoop:50060/tasklog?plaintext=true& taskid=attempt_201207101045_0001_m_000016_0&filter=stdout
12/07/10 10:46:57 WARN mapred.JobClient: Error reading task outputhttp://hadoop:50060/tasklog?plaintext=true&taskid=attempt_201207101045_0001_m_000016_0&filter=stderr
正在寻找解决方法:
弄了半天,发现是内存不够引起的问题,因为设置的调试环境会另起一个进程,虚拟机可用内存不够起两个-Xmx200m的进程(一个运行,一个调试)。修改-Xmx200m为
-Xmx100m,这样连运行都不行了。所以,至少在这样的环境下是不能进行在线调试的。