`
liuxinglanyue
  • 浏览: 562677 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hadoop学习笔记之四:运行MapReduce作业做集成测试

阅读更多

转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=10633

引言
通过本系列的前篇文章用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学习笔记.rar

      五、Hadoop学习笔记之四:运行MapReduce作业做集成测试 集成测试是在整个系统或部分系统组合后进行的测试,对于Hadoop项目,这通常意味着在真实或模拟的Hadoop集群上运行MapReduce作业。通过集成测试,可以验证应用...

      完整图文版 阿里巴巴数据产品平台 大数据与云计算技术系列教程 Hadoop之Hive学习笔记(共63页).pdf

      元数据服务器负责存储关于表和分区的信息,客户端用于编写查询并提交任务,执行引擎则根据提交的任务生成MapReduce作业在Hadoop集群上运行。 - **Hive和Hadoop关系**:Hive是构建在Hadoop生态系统之上的,依赖于...

      大数据学习笔记

      ### 大数据学习笔记知识点概览 #### 第一部分:Spark学习 ##### 第1章:Spark介绍 - **1.1 Spark简介与发展** - **背景**:随着大数据处理需求的增长,传统的Hadoop MapReduce框架虽然提供了强大的计算能力,但...

      pig学习笔记

      ### Pig学习笔记精要 **Pig** 是一个在 **Hadoop** 平台上用于数据分析的高级工具,它提供了一种非程序化的数据流语言,称为 **Pig Latin** ,来处理大规模的数据集。Pig 的设计目的是为了简化 **MapReduce** 的...

      hive学习笔记精华版

      【Hive学习笔记精华版】 Hive是大数据处理领域中的一款重要工具,它基于Hadoop构建,主要用于数据仓库和数据分析。作为一个离线处理系统,Hive可以将结构化的数据文件映射成数据库表,允许用户使用类似SQL的查询...

      Spark学习笔记

      ### Spark学习笔记 #### Spark概览 ##### 1. Spark简介 - **定义**:Apache Spark是一种快速且通用的大规模数据处理系统,旨在为大规模数据处理提供高效的支持。 - **起源**:Spark最初由美国加州大学伯克利分校的...

      hive笔记,亲测可用,绝对的

      - **使用内嵌Derby作为元数据库**:这种方式适用于单机测试或学习目的,但不适合生产环境下的使用,因为Derby数据库不具备多用户访问的支持。 - 准备工作:确保安装Hive的机器上有Hadoop环境(安装目录,HADOOP_...

      大数据开发

      2. **笔记1-step.hadoop+zk+hbase.txt**:Hadoop是Apache基金会开源的大数据处理框架,核心组件包括HDFS(分布式文件系统)和MapReduce(分布式计算模型)。Zookeeper是另一个Apache项目,用作分布式服务的协调器,...

      大数据学习笔记.pdf

      1.3 Spark与Hadoop集成 ................................................................................................ 7 1.4 Spark组件 ....................................................................

      python大数据开发配套笔记代码

      它们提供了一套完整的测试解决方案,包括单元测试、集成测试和断言机制,确保代码的正确性和稳定性。 最后,版本控制工具Git是软件开发过程中的重要组成部分,它帮助团队协作和追踪代码变化。Python的Git库如...

      Spark学习笔记(一)Spark初识【特性、组成、应用】

      相较于MapReduce,Spark 在内存计算中减少了磁盘I/O,从而提高了运行速度,有时甚至能提升100倍。 2. 易用性:Spark 提供了丰富的编程接口,支持Java、Python和Scala,同时内置了80多种高级算法,简化了开发过程。...

      大数据211&212-javaee项目实践.zip

      在这个压缩包中,很可能是包含了相关的代码示例、课程笔记、项目文档等资源,帮助学习者深入理解和掌握大数据技术与Java EE平台的集成应用。 【描述】"大数据211&212-javaee项目实践.zip" 没有提供额外的信息,但...

      java代码-20大数据一 05

      10. **测试和调试**:在处理大数据时,单元测试和集成测试必不可少,JUnit和Mockito等工具可以帮助进行这些工作。 通过main.java文件,我们可以预期看到如何初始化和配置大数据框架,定义MapReduce作业,或者设置...

      aws-csa-2017:适用于AWS认证解决方案架构师的研究笔记-2017

      - EMR(Elastic MapReduce):基于Hadoop的分布式大数据处理。 7. 无服务器计算: - Lambda:事件驱动的计算服务,无需预置或管理服务器。 - API Gateway:构建、管理和保护API。 8. DevOps工具: - ...

      大数据P-

      大数据P-:这是一个关于大数据处理和分析的主题,可能涉及到P代表的数据处理框架,如Hadoop的MapReduce或Spark的Pandas库。在这个领域,我们通常处理海量数据,这些数据超过了单机系统的处理能力,因此需要分布式...

      ehr-extraction

      6. MapReduce或Spark:对于大规模EHR数据处理,可能会使用到Hadoop的MapReduce或Apache Spark进行分布式计算。 7. 数据挖掘与机器学习:EHR数据可用于预测疾病、研究流行病学趋势等,需要数据挖掘和机器学习算法,...

      ceph官网文档pdf版

      - 包括配置 Hadoop 以便支持 CephFS、执行 MapReduce 任务等内容。 - **Libcephfs (JavaDoc)** - 提供了 Java 开发者使用 Libcephfs 的文档。 - 包括类库结构、函数签名等信息。 - **cephfs-journal-tool** - ...

      Full_Stack_Data_Science:将提供我所有与数据科学相关的工作

      5. 机器学习:包括监督学习(如线性回归、逻辑回归、决策树、随机森林、支持向量机、神经网络)、无监督学习(如聚类、主成分分析)、强化学习以及集成学习(如梯度提升机、AdaBoost)等算法。 6. 深度学习:深度...

      High_Performance_Programming:Git repo voor het vak高性能编程2de jaar AI

      9. **分布式计算**:介绍如Hadoop、Spark等分布式计算框架,以及MapReduce编程模型。 10. **GPU编程**:对于图形处理单元的编程,如CUDA或OpenCL,用于加速特定类型的工作负载。 11. **Python性能优化**:如何在...

    Global site tag (gtag.js) - Google Analytics