zoukankan      html  css  js  c++  java
  • mapreduce 变量共享

     mapreduce 全局变量共享

    在编写MapReduce程序时,经常会遇到这样的问题,全局变量如何保存?如何让每个处理都能获取保存的这些全局变量?使用全局变量是不可避免的,但是 在MapRdeuce中直接使用代码级别的全局变量是不现实的。主要是因为继承Mapper基类的Map阶段类的运行和继承Reducer基类的 Reduce阶段类的运行都是独立的,并不共享一个Java虚拟机的资源,因此,下面介绍三种在MapReduce编程中相对有效的设置全局共享数据的方 法。

    1,读写HDFS文件

    在MapReduce框架中,Map Task和Reduce Task都运行在Hadoop集群的节点上,所以Map和Reduce Task、甚至不同的Job都可以通过读写HDFS中预定好的同一文件来实现全局共享数据。具体实现是利用Hadoop 的Java API来完成,需要注意的是,多个Map或Reduce的写操作会产生冲突,覆盖原有数据。

    这种方法的优点是能够实现读写,也比较直观,但是缺点是需要共享一些很小的全局数据也需要使用IO,这将占用系统资源,增加作业完成的资源消耗。

    2,配置Job属性

    在MapReduce执行过程中,task可以读取Job的属性。基于这个特性,我们可以在任务启动之初利用Configuration类中的 set(String name,String value)将一些简单的全局数据封装到作业的配置属性中,然后task再利用Configuration中的get(String name)获取配置到属性中的全局数据。

    这种方法的优点是简单,资源消耗小,但是对量比较大的共享数据显得比较无力。(个人推荐这种)

    3,使用DistributedCache

    DistributedCache是MapReduce为应用提供缓存文件的只读工具,它可以缓存文本文件,压缩文件和jar文件等。在使用时,用户可以 在作业配置中使用本地或HDFS文件的URL来将其设置成共享缓存文件。在作业启动之后和task启动之前,MapReduce框架会将可能需要的缓存文 件复制到执行任务节点的本地。

    这种方法的优点是每个Job共享文件只会子啊启动之后复制一次,并且它适用与大量的共享数据,而缺点是它是只读的。

    下面是一个简单的使用DistributedCache的例子。

    1)将要缓存的文件复制到HDFS上

    bin/hadoop fs -copyFromLocal lookup /myapp/lookup

    2)启动作业的属性配置,并设置待缓存文件

    Configuration conf =new Configuration();
    DistributedCache.addCacheFile(newURL("/myapp/lookup #lookup"),conf);

    3)在Map函数中使用DistributedCache

    publicstatic class  Map extendsMapper<Object, Text, Text,Text>{
     
    privatePath[] localArchives;
     
    privatePah[] localFiles;
     
    publicvoid setup(Context context) throws IOException,InterruptedException{
     
    //获取缓存文件
     
    Configuration conf =new Configuration();
     
    localArchives = DistributedCache.getLocalCacheArchives(conf);
     
    localFiles = DistributedCache.getLocalCacheFiles(conf);
     
    }
     
    publicvoid map(K key, V value, Context context)throwsIOException{
     
    //使用缓存文件中获取的数据
     
    ...
     
    Context.collect(k,v);
     
    }
     
    }

    转载:https://www.cnblogs.com/qquan/articles/4923058.html

     
  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/51python/p/10897084.html
Copyright © 2011-2022 走看看