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("\t");
            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函数中加载分布式缓存。

转载于:https://www.cnblogs.com/mfryf/p/5360306.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Eclipse中查看JDK类库的源代码

转自&#xff1a;http://www.cnblogs.com/wuhenke/archive/2011/06/22/2087134.html 核心提示&#xff1a;在Eclipse中查看JDK类库的源代码&#xff01;&#xff01;&#xff01; 设置&#xff1a; 1.点 window- Preferences - Java - Installed JRES 2.此时Installed JRES右边…

[单选题]PHP函数,mail($param1, $param2, $param3),其中的$param2参数包含什么?

信息的内容 信息的发送地址 信息的回复地址 信息的主题正确答案&#xff1a;转载于:https://www.cnblogs.com/pizishui/p/5361848.html

不使用加减乘除实现加法

思路&#xff1a; 例如: a5&#xff0c;b9&#xff0c;ab14 a转换为二进制形式为101&#xff0c;b转换为二进制形式为1001&#xff0c;其和转换为二进制形式为1110。 对于二进制形式的相加&#xff0c;可分两步进行操作&#xff1a; 1&#xff09;先不考虑进位&#xff0c;则01…

VLC 源代码结构

From&#xff1a; http://blog.csdn.net/jack_incredible/article/details/7301155 译者&#xff1a;捞刀客 VLC源代码目录树 本节介绍VLC源代码目录树结构&#xff0c;以期使开发者对源代码的分布结构有一个整体的认识。下面的目录按照字母顺序列出&#xff0c;右边为该目录包…

让开!!!谁也别拦着我封装React组件!

1简介 我是歌谣 放弃很容易 但是坚持一定很酷 喜欢我就一键三连哈 2前言 在我们的工作生活中 每次学习一个框架我们就不免要封装组件 而具备封装一个完美组件的能力 我称之为"优秀" 3准备工作 父组件 <Geyao/> 子组件 import React, { Component } from re…

UI-UIButton、UILable、UITextField总结

UIButton按钮 第一、UIButton的定义 UIButton *button[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种&#xff0c; typedef enum { UIButtonTypeCustom 0, 自定义风格 UIButtonTypeRoundedRect, 圆角矩形 UIButtonTypeDetailDisclosure, 蓝色小…

JAVA中线程同步的方法

1、wait方法。 2、notify方法和notifyAll方法。3、synchronized关键字。

ffmpeg教程

From&#xff1a; http://blog.csdn.net/cffishappy/article/details/7352898 概要 电影文件有很多基本的组成部分。首先&#xff0c;文件本身被称为容器Container&#xff0c;容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着&#xff0c;你有一…

如何实现在一个网页中弹出多个不同的小窗口

【1、最基本的弹出窗口代码】 其实代码非常简单&#xff1a; 1 <script language"javascript"> 2 <!-- 3 window.open (page.html) 4 --> 5 </script> 因为着是一段javascript代码&#xff0c;所以它们应该放在<script language"jav…

实现Parcelable接口

2019独角兽企业重金招聘Python工程师标准>>> 1 官方例子 public class MyParcelable implements Parcelable {private int mData;public int describeContents() {return 0;}public void writeToParcel(Parcel out, int flags) {out.writeInt(mData);}public static…

在Linux下编写C程序,怎么检查程序是否有内存泄漏?

From: http://bbs.chinaunix.net/thread-908769-1-1.html 如题。 ------------------------------- 找到了! http://www.valgrind.org/ 同时附一个转自 http://blog.chinaunix.net/u/18381/showart.php?id162015 的示例: #include <stdlib.h> void f(void) { i…

【蓝桥杯】历届试题 错误票据

历届试题 错误票据 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述某涉密单位下发了某种票据&#xff0c;并要在年终全部收回。 每张票据有唯一的ID号。全年所有票据的ID号是连续的&#xff0c;但ID的开始数码是随机选定的。 因为工作人员疏忽&#xff0c;在…

apue源码编译

http://www.apuebook.com/ 可以下载源码src.tar.gz 修改配置文件 编辑源码解压生成的apue.2e文件夹下的Make.defines.linux 修改WKDIR/home/var/apue.2e为你的apue.2e目录&#xff0c;比如我的apue源码解压在/usr/local,那我就改为&#xff1a; WKDIR/usr/local/apue .2e 然后…

一个跨平台的 C++ 内存泄漏检测器

From&#xff1a;http://www.ibm.com/developerworks/cn/linux/l-mleak2/index.html 内存泄漏对于C/C程序员来说也可以算作是个永恒的话题了吧。在Windows下&#xff0c;MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏。在Linux下&#xff0c;相对来说就没…

PAT 1039. 到底买不买(20)

题目链接&#xff1a;https://www.patest.cn/contests/pat-b-practise/1039 解题思路&#xff1a;自己刚开始想的是用两个字符串来做&#xff0c;搜别人题解的时候发现别人一种很好的解题思路&#xff0c;是用string做的&#xff0c;感觉做的很巧妙 具体的代码如下&#xff1a;…

ios UIPickerView 技巧集锦

重新实现 UIPickerView 参考资料: http://www.cocoachina.com/bbs/read.php?tid85374 http://www.cocoachina.com/iphonedev/toolthain/2011/1205/3663.html 设置循环滚动 设置 UIPickerView 的数据源数量为很大的规模, 取数据时对行数进行取模, 从而实现循环滚动的效果. 在每…

PHP-递归扫描目录和删除目录

(1) 通过递归扫描目录并打印 // php递归扫描目录 function scanMyDir($path){// 打开目录$dh opendir($path);echo <ul>;// 循环读取目录while(($file readdir($dh)) ! false){// 先要过滤掉当前目录.和上一级目录..if($file . || $file ..) continue;// 为了能够显示…

std::map的insert和下标[]访问

From: http://www.cnblogs.com/kex1n/archive/2011/11/16/2251520.html 在map中插入元素 改变map中的条目非常简单&#xff0c;因为map类已经对[]操作符进行了重载 enumMap[1] "One"; enumMap[2] "Two"; ..... 这样非常直观&#xff0c;但存在一个性…

Delphi工具之TDUMP

TDUMP是一个命令行程序&#xff0c;它输出.exe或.dll&#xff08;以及其他文件类型&#xff09;文件的结构。 TDUMP位于Delphi安装目录下的Bin目录里&#xff0c;如下&#xff1a; 缺省时&#xff0c;TDUMP的输出显示到屏幕上&#xff1b; 用户可以将TDUMP的输出定向到一个文本…

《与mysql零距离接触》视屏学习笔记

1、数据表的增删改查操作(crud)&#xff1a; 对于表&#xff1a; 增&#xff1a;create table XXXX 删&#xff1a;drop table XXXX 改&#xff1a;alter table XXXX rename to XXXX 查&#xff1a;select * from XXXX 对于行&#xff1a; 增&#xff1a;insert into XXXX(…