引言

  通过本系列的前篇文章用MRUnit做单元测试介绍可以很容易对MapReduce进行单元测试,这很必要,可以较早的发现一些代码逻辑的问题。只有单元测试是不够的,我们需要对MapReduce任务进行集成测试,要进行集成测试,得先懂得如何将MapReduce作业在hadoop集群中运行起来。

  准备工作

  以windows环境为例:
  安装jdk,设置环境变量JAVA_HOME为jdk安装目录
  安装Cygwin,安装时注意选择安装软件包openssh–Net类,安装完成将cygwin/bin加入环境变量path。
  确认ssh。打开cygwin命令行,分别执行以下命令
  安装sshd:$ssh-host-config
  启动sshd服务:$netstartsshd
  检查可登录localhost:$sshlocalhost
  下载稳定的hadoop版本,点此选择下载,我选择的是0.20.2版本。
  下载后解压,编辑conf/hadoop-env.sh,修改JAVA_HOME为jdk安装目录。

  至此,Windows环境下的Hadoop的安装和配置完成,为了运行还需要打包MapReduce作业。我们用maven的assembly插件来将程序打包。
配置如下:

  <build>
  <plugins>
  <plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
  <descriptorRefs>
  <descriptorRef>jar-with-dependencies</descriptorRef>
  </descriptorRefs>
  </configuration>
  </plugin>
  </plugins>
  </build>

  在pom.xml里加入以上配置,运行mvnassembly:assembly命令可以打包了。

  单机运行

  特点:

  单台机器、单线程运行、不需要启动hadoop进程,利于调试,但没有模拟hadoop集群多个进程的情况,只支持一个reducer。

  运行方式:

  $bin/hadoopjar--configstandalonepath/xx.jarWordCountinputoutput

  注意点:

  用–config指定单机运行时的配置目录(示例中配置目录文件夹名为standalone,在0.20.2版本这个文件夹可以为空目录,不要别的配置文件)

  WordCount为包含运行作业main函数的的类,如果有包名需要加上包名。
  Input文件夹下放置输入的文件。
  Output为输出的目录,在运行job前需保证该目录不存在,否则会报错。

  伪分布式运行

  特点:

  单台机器,启动hadoop所有进程(如NameNode,DataNode,TaskTracker,JobTracker,SecondaryNameNode),较好的模拟hadoop集群情况。