zoukankan      html  css  js  c++  java
  • hadoop 分布式缓存

    Hadoop 分布式缓存实现目的是在所有的MapReduce调用一个统一的配置文件,首先将缓存文件放置在HDFS中,然后程序在执行的过程中会可以通过设定将文件下载到本地具体设定如下:

    public static void main(String[] arge) throws IOException, ClassNotFoundException, InterruptedException{
        
            Configuration conf=new Configuration();
            conf.set("fs.default.name", "hdfs://192.168.1.45:9000");
            FileSystem fs=FileSystem.get(conf);
            fs.delete(new Path("CASICJNJP/gongda/Test_gd20140104"));
            
            conf.set("mapred.job.tracker", "192.168.1.45:9001");
            conf.set("mapred.jar", "/home/hadoop/workspace/jar/OBDDataSelectWithImeiTxt.jar");
            Job job=new Job(conf,"myTaxiAnalyze");
            
            
            DistributedCache.createSymlink(job.getConfiguration());//
            try {
                DistributedCache.addCacheFile(new URI("/user/hadoop/CASICJNJP/DistributeFiles/imei.txt"), job.getConfiguration());
            } catch (URISyntaxException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }            
            job.setMapperClass(OBDDataSelectMaper.class);
            job.setReducerClass(OBDDataSelectReducer.class);
            //job.setNumReduceTasks(10);
            //job.setCombinerClass(IntSumReducer.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(Text.class);
            
            FileInputFormat.addInputPath(job, new Path("/user/hadoop/CASICJNJP/SortedData/20140104"));
            FileOutputFormat.setOutputPath(job, new Path("CASICJNJP/gongda/SelectedData"));
            
            System.exit(job.waitForCompletion(true)?0:1);
            
        }

        代码中标红的为将HDFS中的/user/hadoop/CASICJNJP/DistributeFiles/imei.txt作为分布式缓存

    public class OBDDataSelectMaper extends Mapper<Object, Text, Text, Text> {
        String[] strs;
        String[] ImeiTimes;
        String timei;
        String time;
        private java.util.List<Integer> ImeiList = new java.util.ArrayList<Integer>();

        protected void setup(Context context) throws IOException,
                InterruptedException {

            try {
                Path[] cacheFiles = DistributedCache.getLocalCacheFiles(context
                        .getConfiguration());
                if (cacheFiles != null && cacheFiles.length > 0) {
                    String line;
                    BufferedReader br = new BufferedReader(new FileReader(
                            cacheFiles[0].toString()));
                    try {
                        line = br.readLine();
                        while ((line = br.readLine()) != null) {
                            ImeiList.add(Integer.parseInt(line));
                        }
                    } finally {
                        br.close();
                    }
                }
            } catch (IOException e) {
                System.err.println("Exception reading DistributedCache: " + e);
            }
        }

        public void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {

            try {
                strs = value.toString().split(" ");
                ImeiTimes = strs[0].split("_");
                timei = ImeiTimes[0];
                if (ImeiList.contains(Integer.parseInt(timei))) {
                    context.write(new Text(strs[0]), value);
                }
            } catch (Exception ex) {

            }
        }
    }

    上述标红代码中在Map的setup函数中加载分布式缓存。

  • 相关阅读:
    实验楼之Linux快捷、用户及文件权限、文件查看
    《生物信息学》——李霞;;生信概念
    MySQL 之 导出导入数据
    MySQL 之 扩展例子
    MySQL之创、增、删、改、查
    R 中数据导入
    神经网络,25个术语
    Python之文件输入输出,
    爬虫之BeautifulSoup, CSS
    Linux软连接和硬链接
  • 原文地址:https://www.cnblogs.com/mfryf/p/5360306.html
Copyright © 2011-2022 走看看