IDEA项目中实现伪分布的MapReduce作业的问题

来源:互联网 发布:linux ioremap 失败 编辑:程序博客网 时间:2024/06/11 11:05

概要

这篇文章并不是介绍如何搭建伪分布的hadoop集群,也不是介绍如何实现一个MR作业并提交的,只是一篇记录了自己在尝试实现伪分布集群上跑MR作业时遇到的一个问题

背景

搭好伪分布的hadoop集群,写好一个简单的MR作业并在客户端提交,貌似没什么问题,但是当我把hadoop(yarn和hdfs)停了之后,发现作业还是可以跑。所以我怀疑自己跑的是单机模式

验证

怎么验证呢?hadoop用的配置类是org.apache.hadoop.conf.Configuration,在API文档里可以看到这几句话:

Unless explicitly turned off, Hadoop by default specifies two resources, loaded in-order from the classpath:

  • core-default.xml: Read-only defaults for hadoop.
  • core-site.xml: Site-specific configuration for a given hadoop installation.

于是,我在代码中加了一句:System.out.println(conf.get("fs.defaultFS")) 得到的结果是file:/// ,由此可见,该作业的确没有使用伪分布的配置,而是直接单机运行了。

修改

为了将单机模式修改为伪集群模式运行,最重要的是要解决配置问题,因为客户端需要读取到配置文件才知道HDFS的位置,所以,需要将core-site.xml 文件拷贝一份放到工程类路径下。具体做法是:在作业运行的驱动类的maven项目模块的src/main目录下建好resources目录,将core-site.xml 放到其中即可。注意,如果该配置文件在resources文件夹的子目录中时(为了管理配置文件方便需要建子目录),Configuration类自动读取不到,因此要在代码中读取配置文件。例如配置文件在resources下的Hadoop文件夹中,需要这样写:

Configuration.addDefaultResource("Hadoop/core-site.xml");

ps:如果工程源文件的文件夹已经加入配置文件而查看maven编译后的target目录却不包含该配置文件,可以让maven同步一下,例如IDEA中可以右键单击项目,选择maven一栏的”Generate Sources and Update Folders”

0 0
原创粉丝点击