zoukankan      html  css  js  c++  java
  • Mapreduce执行过程

    Mapreduce执行过程

    splitSize=Mash.max(minSize,Math.min(maxSize,blockSize))

    数据块大小一般与分片大小相同

    Block数据块------分片

    FileSplit FilrInputFormat 继承,重写可以设置字节的K.V

    分片------K.V(一条数据,一对K.V)

    K.V---------Mapper类

    分区器HashPartitioner

    Mapper----------K.V.P(P:分区号,值一定为一个整数)

    K.V.P-------内存缓冲区(默认100M,当内存缓冲区大小到达60%时,自动触发溢写线程)

    溢写Spill To Disk---------1.[调用排序算法(快排算法)]如果没有用户自定义的比较器,就会调用K自己的比较器

    溢写--------2.[调用合并程序]用户自定义的Combiner类,如果用户没有定义合并器,则这步不存在

    溢写--------3.分区[分区1磁盘文件,分区2磁盘文件 ........]当磁盘中某个分区的文件数量>=3个,自动触发文件合并程序(合并程序继续调用排序算法(归并算法,内部有序,总体无序),合并成一个有序的分区磁盘文件

    分区磁盘文件触发拷贝线程(自动去所有map输出的机器上拷贝某一个分区1的所有数据,可能存在跨机器网络抓取数据)

    继续调用排序算法------迭代器(iterator)-----分组(1,用户自定义的分组比较器,2,用户自定义的排序比较器,3,K自己的比较器。没有1,才选2,没有1,2,才选3)-------再次形成一个迭代器(分组机制,相邻且相同的数据才形成一个迭代器,1条,2条,3条相同形成一个组,3条和4条比较不同,则4条分为另一组内,4条和5条比相同,则分为一组,不同,则4条单独成一组,依次比较分组,形成各组假迭代器。)如果排序不对,则分组一定不对

    假迭代器循环调用传参--------自己定义的Reducer类(循环执行,一个假迭代器执行一次),

    Reducer1只抓去^所有^块的分区1的数据

    Reducer2只抓去^所有^块的分区2的数据

    Reducer通过FileOutputFormat类生成HDFS结果文件

    特殊情况:当Mapper类输出的K.V.P已经是最终结果,则直接生成结果

    hadoop-hdfs-API

    在windows上部署hadoop包

    windows配置环境变量

    hadoop的bin目录,HADOOP_USER_NAME root

    配置eclipse,从Linux上拉取core-sit.xml,hdfs-site.xml文件

    java代码

    Configuration conf;加载配置文件

    FileSystem fs ;客户端

    fs =FileSystem.get(conf);

    创建目录

    @Test public void mkdir() throws Exception{ Path ifile=new Path("/ooxx"); if(fs.exists(ifile)){ fs.delete(ifile,true); } fs.mkdirs(ifile); }

    上传文件 @Test public void upload() throws Exception{ Path f = new Path("/ooxx/hello.txt/"); FSDataOutputStream output = fs.create(f); InputStream input = new BufferedInputStream(new FileInputStream(new File("D:reqlog.txt"))); IOUtils.copyBytes(input, output, conf,true);

    }

    }

    查看块的信息

    @Test

    public void blks(){

    Path i = new Path("/ooxx/hello.txt/");

    FileStatus ifile = fs.getFileStatus(i);

    BlockLocation[] blks = fs.getFileBlockLocations(ifile,0,ifile.getLen());

    for (BlockLocation b : blks){

    system.out.println(b);

    }

    }

    hdfs dfs -mkdir -p /user/root 命令行上传文件

    Hoodoop YARN

    资源框架

    用户写的分析程序------class------jar------>

    ResourceManager(资源管理)监控所有NodeManager1,NodeManager2....所有资源,开始分配资源,通知NM启动AppMaster进程(执行jar包程序)

    AppMaster向RM申请资源,并提交分片位置,RM按照就近原则返回资源的清单(1,node1,1个CPU,1G内存,2,node2,2,2),AppMaster按清单通知(所有的DataNode节点上都有NodeManager)node01启动相应的进程YarnChild进程

    App Master资源调度 调动container(容器,资源约束)

    一个作业有一个AppMaster调度,各作业间不受影响

    1:1=NodeManager(监管本台机器上的资源):DataNode

     

  • 相关阅读:
    android 学习
    android 学习
    阅读笔记《人月神话》1
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习(家庭记账本的开发 6)
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/huzicourenao/p/11019350.html
Copyright © 2011-2022 走看看