引言
通过本系列的前篇文章用MRUnit做单元测试介绍可以很容易对MapReduce进行单元测试,这很必要,可以较早的发现一些代码逻辑的问题。只有单元测试是不够的,我们需要对MapReduce任务进行集成测试,要进行集成测试,得先懂得如何将MapReduce 作业在hadoop集群中运行起来。
准备工作
以windows环境为例:
安装jdk,设置环境变量JAVA_HOME为jdk安装目录
安装Cygwin,安装时注意选择安装软件包openssh – Net 类,安装完成将cygwin/bin加入环境变量path。
确认ssh。打开cygwin命令行,分别执行以下命令
安装sshd:$ ssh-host-config
启动sshd服务:$ net start sshd
检查可登录localhost:$ ssh localhost
下载稳定的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里加入以上配置,运行mvn assembly:assembly命令就可以打包了。
单机运行
单台机器、单线程运行、不需要启动hadoop进程,利于调试,但没有模拟hadoop集群多个进程的情况,只支持一个reducer。
$ bin/hadoop jar --config standalone path/xx.jar WordCount input output
用–config指定单机运行时的配置目录(示例中配置目录文件夹名为standalone,在0.20.2版本这个文件夹可以为空目录,不要别的配置文件)
WordCount为包含运行作业main函数的的类,如果有包名需要加上包名。
Input文件夹下放置输入的文件。
output为输出的目录,在运行job前需保证该目录不存在,否则会报错。
伪分布式运行
单台机器,启动hadoop所有进程(如NameNode, DataNode, TaskTracker, JobTracker, SecondaryNameNode),较好的模拟hadoop集群情况。
conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
格式化分布式文件系统:$ bin/hadoop namenode –format
启动hadoop进程:$ bin/start-all.sh
检查是否启动成功,可访问以下url
NameNode – http://localhost:50070/
JobTracker – http://localhost:50030/
如果不能访问,检查logs目录下的日志分析原因。
将输入文件复制到分布式文件系统:$ bin/hadoop fs -put local input
运行作业:$ bin/hadoop jar path/xx.jar WordCount input output
检查输出:$ bin/hadoop fs -cat output/*
停止hadoop进程:$ bin/stop-all.sh
完全分布式运行测试
完全分布式运行需要利用多台机器,实现hadoop的分布式集群,通过高仿真环境进行集成测试。关于完全分布式运行测试环境搭建可见Cluster Setup。
集成测试总结
在掌握了如何运行hadoop作业后,测试要做的事就是通过脚本/代码将这个过程自动化起来,一般流程是:
预设置(准备输入文件、启动hadoop进程等)->运行作业->输出结果跟预期结果的对比->报告导致失败的原因。
在运行集成测试时需要考虑几个问题:
集成环境的搭建:需要考虑机器资源,维护成本。
输入构造:在单元测试时我们可以很容易的构造一些小的键值对,其输出结果可以很好的预期,但在集成测试时小文件意义已经不大了,我们需要仿真的大批量的数据来发现程序的问题,仿真度越高,发现问题的可能性越大。
输出分析: 我们面对的输入是仿真的海量数据,不可能做输出结果的精确预期,需要借助日志或对输出进行二次分析。在开发时需要考虑这些情况,将有用信息通过日志或输出的方式存储。在完全分布式模式运行,日志散落在各台机器上,如何有效获取这些日志集中起来做分析?这个我们可以借助Scribe工具。同样,输出结果也可能为海量数据,如何高效对此进行分析,这可能需要针对输出数据编写测试的MapReduce任务来分析结果。
相关推荐
Hadoop学习总结之四:Map-Reduce的过程解析
(2):运行MapReduce (5):查看运行结果 (6)网页上查看MapReduce任务 2.矩阵相乘实验(matrix) (1)写matrix代码并把代码生成jar包 (2)运行命令 (1):把linus下的文件放到hdfs上 (2):运行MapReduce (3...
Hadoop学习总结之五:Hadoop的运行痕迹
mrjob:在 Hadoop 或Amazon Web Services上运行MapReduce 作业
Hadoop学习总结之一:HDFS简介
Hadoop 用mapreduce实现Wordcount实例,绝对能用
Hadoop学习总结之二:HDFS读写过程解析
- 在EMR、Google Cloud Dataproc、您自己的Hadoop集群或本地(用于测试)上运行作业。 - 编写多步骤作业(一个map-reduce步骤进入下一个步骤) - 在EMR或您自己的Hadoop集群上轻松启动Spark作业 - 在Hadoop中复制您...
05.hadoop上课笔记之hadoop5mapreduce和yarn
Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。
Maven坐标:org.apache.hadoop:hadoop-mapreduce-client-core:2.5.1; 标签:core、apache、mapreduce、client、hadoop、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html...
Hadoop 学习笔记.md
深入解析MapReduce架构设计与实现原理》由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入分析了RPC框架、客户端、JobTracker、TaskTracker和Task等MapReduce...
深入解析MapReduce架构设计与实现原理》由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入分析了RPC框架、客户端、JobTracker、TaskTracker和Task等MapReduce...
Hadoop技术内幕 深入理解MapReduce架构设计与实现原理 高清完整中文版PDF下载
在hadoop平台上,用mapreduce编程实现大数据的词频统计
hadoop学习笔记,hadoop简介,适用于hadoop入门,讲解hadoop安装,使用,基本原理,大数据,分布式等概念
hadoop 学习笔记,从搭建环境开始到具体实验。包括hdfs配置,yarn配置,分布式配置,如何编写mapreuduce 一步一步手把手,最后项目是hadoop 与 javaweb
Maven坐标:org.apache.hadoop:hadoop-mapreduce-client-jobclient:2.6.5; 标签:apache、mapreduce、jobclient、client、hadoop、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index....
压缩文件中包含了Hadoop生态系统、体系架构及特点,三大基本组件HDFS,MapReduce,YARN的学习笔记,文件为Markdown格式,进行了详细功能介绍说明,可以帮助大家学习hadoop的三大组件或者作为一份详细资料备份,帮助...