一、API的配置---Configuration类

  • API的配置:Hadoop提供了专门的API对资源进行配置,Configuration类的实例(在org.apache.hadoop.conf包)包括配置属性及其值的集合。每个属性是一个String类型,值的类型可能是以以下的多种类型:包括了Java基本类型(如boolean、int、long、float)和其他一些有用的类型。配置从给定资源中读取它们的属性,通常是名-值对构成的结构简单的XML文件

     <?xml version="1.0"?>
    <configuration>
    <property>
    <name>color</name>
    <value>yellow</value>
    <description>Color</description>
    </property> <property>
    <name>size</name>
    <value>10</value>
    <description>Size</description>
    </property> <property>
    <name>weight</name>
    <value>heavy</value>
    <final>true</final>
    <description>Weight</description>
    </property> <property>
    <name>size-weigth</name>
    <value>${size},${weight}</value>
    <description>Size and weight</description>
    </property>
    </configuration>
     Configuration conf = new Configuration();
    conf.addResource("configuration-1.xml");
    System.out.println(conf.get("color"));
    System.out.println(conf.getInt("size",0));
    System.out.println(conf.get("breadth","wide"));

  • 合并配置文件:在Hadoop中,core-default.xml文件定义系统的默认属性,而core-site.xml定义特定重写的属性。如果同时定义多个配置文件,那么后来加入的属性将会覆盖之前定义的属性,但是如果final被标记为true的时候,该属性将无法被覆盖,系统会报配置出错。
  • 扩展属性
    1. 配置的属性可以由其他属性或者系统属性来定义,如${size},${weigth}
    2. 系统属性定义属性,即System.setProperty("size",14),并且优先级高于文件资源所定义的属性
    3. 在命令行中使用JVM参数-Dproperty=value来重写属性

二、配置开发环境

  • conf选项:可以方便地切换配置文件
  • GenericOptionsParser,Tool和ToolRunner:GenericOptionsParser一个解释普通Hadoop命令行选项的类,可以根据应用需要在Configuration对象中进行设置,不过通常不这样使用,而是使用ToolRunnner,因为其实现了Tool接口,运行比较方便。

     public interface Tool extends Configurabel{
    int run(String [] args) throws Exception;
    }
     public class ConfigurationPrinter extends Configured implements Tool {
    static{
    Configuration.addDefaultResource("hdfs-default.xml");
    Configuration.addDefaultResource("hdfs-site.xml");
    Configuration.addDefaultResource("mapred-default.xml");
    Configuration.addDefaultResource("mapred-site.xml");
    } @Override
    public int run(String[] args) throw Exception{
    Configuration conf = getconf();
    for(Entry<String,String> entry:conf){
    System.out.printf("%s=%s\n",entry.getKey(),entry.getValue());
    }
    return 0;
    } public static void main(String[] args) throw Exception {
    int exitcode = ToolRunner.run(new ConfigurationPrinter,args);
    System.exit(exitCode);
    } }

三、编写单元测试

四、本地运行测试数据

五、在集群上运行

六、作业调优

  • 作业优化检查表格

    优化内容 最佳实践
    mapper的数量

    运行mapper需要多久时间?如果平均只运行几秒钟,则可以看是否能用能少的mapper运行

    更长的时间,通常是一分钟左右,时间的长度取决于使用的输入格式

    reducer的数量

    为了达到最高性能,reducer的数目应该比reducer槽的数目稍微少一点。这使得reducer能一

    次性完成任务,并在reducer阶段充分利用集群。

    combiner 作业能否充分利用combiner来减少通过shuffle传输数据
    中间值的产生 对map输出进行压缩能使作业执行更快
    自定义序列 如果正在使用自己定义的Writable对象或自定义的comparator,则必须确保已实现RawComparator
    shuffle运行 MapReduce shuffle可以对一些内存管理参数进行调整,将弥补性能上的不足。
  • HPROC分析工具:HPROC是一个JDK自带的分析工具,虽然只有基本的功能,但是同样能提供程序CPU运行和堆使用情况等相关有用的信息。

     conf.setProfileEnabled(true);//默认状态下,HPROF是关闭的,启用分析工具
    conf.setProfileParams("-agentlib:hprof=cpu=samples,heap=sites,depth=6,"+
    "force=n,thread=y,verbose=n,file=%s");//设置分析参数,既传到任务JVM的额外的命令行参数
    conf.setProfileTaskRange(true,"0-2");
    //指定分析的任务,第一个参数指明这是map任务的范围还是reduce任务的范围,如果是true代表是map,false代表的是reduce
    //第二个参数,指明要分析任务的ID

七、MapReduce的工作流

最新文章

  1. 闲说HeartBeat心跳包和TCP协议的KeepAlive机制
  2. [手机取证] Apple正在行动起来封堵后门?
  3. js鲸鱼
  4. JavaScript 里 new 出来的对象 怎么销毁它?
  5. MYSQL5.5和5.6参数的差异
  6. ANDROID_MARS学习笔记_S04_009_用java.lang.ref.SoftReference作缓存,android.os.Handler和new Thread异步加载略图片
  7. Java递归流程
  8. MyEclipse配置进行Hibernate逆映射
  9. perl 使用use utf8
  10. IDEA 无法运行Junit, 报错Class not found xxxx Empty test suite.
  11. CMS Collector and G1 Collector
  12. Flask框架基础--第一篇
  13. C 语言-----字符串和输入输出函数
  14. Swift 学习- 04 -- 字符串和字符
  15. 剑指offer——合并两个排序的链表——对象、引用和赋值初接触
  16. [转帖]ASP.NET Core的Kestrel服务器
  17. centos7忘记登录密码修改
  18. 【Redis】持久化
  19. python xml.etree.ElementTree模块
  20. Linux下GoAccess的安装与全部用法

热门文章

  1. css图片磨砂化
  2. 转:分享13款PHP开发框架
  3. LeetCode_Single Number II
  4. 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)
  5. MemSQL 3.1 发布,元方,你怎么看? - V2EX
  6. iframe切换内容页仍然能自适应大小代码(含js)
  7. Python Cookbook笔记
  8. psp个人软件过程需求文档
  9. 公告:CSDN博客频道新功能正式上线!
  10. H面试程序(10): 字符串包含问题