1.关于run on hadoop的问题:
在未用hadoop eclipse插件前,我以为通过hadoop eclipse 插件不但可以管理hdfs,还可以自动打包程序,并帮我自动设置Configuration对象的mapred.jar属性值。但用了之后,才发现,这个插件只能管理hdfs,至于打包程序等操作,还得自己手动进行。我用的hadoop 版本为1.2.1,hadoop eclipse插件个人亲自编译生成,保证无任何问题,我一开始用的是MyEclipse后来换成Eclipse,但试用了,仍存在这个问题。"run
as——>run on hadoop"并未弹出如下所示窗口:
而是直接运行了,效果跟"run as——>run configurations——>填写参数值——>run"的效果一致。
不知道是不是这个hadoop 1.2.1版本的ecipse插件都存在这个问题,还是我个人使用出现的问题,如果有哪位童鞋们知道这个问题,可以赐教下!
2.关于通过ecipse设置hadoop运行模式的问题:
说先,我们要明确hadoop的运行模式以及各种运行模式的区别,参考如下:
(1)独立模式<standalone>(也叫本地模式<local
mode>)
独立模式完全运行在本地,不会加载任何MapReduce服务,因而不会涉及Mapreduce最核心的代码实现。
独立模式无需运行任何守护进程(daemon),所有程序都在单个JVM上执行。由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段。
(2)分布式模式(pseudo-distributed model)
其中,分布模式分为两种:伪分布式模式和全分布式模式。
a.伪分布式模式:
伪分布式模式即为“单点集群”,在该模式下所有的守护进程均会运行在单个节点上。
b.全分布模式(fully distributed model)
Hadoop守护进程运行在一个真实的集群上,如NameNode、SeconeNameNode、Jobtracker、TaskTracker等分别运行在不同机器上。
注:其中,独立模式和单机模式均运行在单机环境中。
在特定模式下运行Hadoop需要关注两个因素:正确设置属性和启动Hadoop守护进程。
下表列举了配置各种模式所需要的最小属性集合:
组件名称 |
属性名称 |
独立模式 |
伪分布模式 |
全分布模式 |
Common |
fs.default.name |
file:///(默认) |
hdfs://localhost/ |
hdfs://namenode/ |
HDFS |
dfs.replication |
N/A |
1 |
3(默认) |
MapReduce |
mapred.job.tracker |
local(默认) |
localhost:8021 |
jobtracker:8021 |
在独立模式下,将使用本地文件系统(默认为本地文件系统,也可以设置文件系统为hdfs)和本地MapReduce作业运行;在分布式模式下,将启动HDFS和MapReduce守护进程。
在明晰了上述区别后,我们再说在eclipse中运行hadoop程序的问题。
注:在这里,我们不区分伪分布式模式和全分布式模式,把他们都叫做分布式模式。
在eclipse中运行hadoop程序可以采用本地立模式和分布式模式,如果没有设置mapred.job.tracker属性值的话,默认采用本地模式运行。本地模式中,文件系统可以使用本地文件系统(file:///)也可以使用HDFS文件系统(hdfs://),如果使用hdfs文件系统的话,则需要设置fs.default.name属性。本地模式中,mapreduce等一系列过程直接运行在ecipse启动的单个JVM进程内,程序的运行完全与hadoop集群没有任何关系(不使用hdfs文件系统的前提下),这时,你如果关闭了hadoop集群,对程序的运行没有任何影响(不使用hdfs文件系统的前提下)。
如果设置了mapred.job.tracker属性值的话,则采用分布式模式运行,eclipse在此其实是充当了“client”的角色,将程序提交给jobtracker,有jobtracker来分配和管理任务的运行。其实就是说eclipse把任务提交给hadoop集群了,这时,你打开jobtracker或者namenode、datanode的对应的网页监控页面的话,可以看到运行状态和日志。
注:上面所说的设置mapred.job.tracker属性值和设置fs.default.name属性值可以在程序中设置Configuration对象或者分别将mapred-site.xml文件(对应mapred.job.tracker配置)、core-site.xml、hdfs-site.xml(这两个文件对应fs.default.name配置)分别放入eclipse
hadoop工程的环境变量中去。