Mapreduce执行过程
splitSize=Mash.max(minSize,Math.min(maxSize,blockSize))
数据块大小一般与分片大小相同
Block数据块------分片
FileSplit FilrInputFormat 继承,重写可以设置字节的K.V
分片------K.V(一条数据,一对K.V)
分区器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
原文地址:https://www.cnblogs.com/huzicourenao/p/11019350.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 两个CSS知识点:BFC和选择器权重
- C语言入门系列之9.预处理
- Python爬虫常见异常及解决办法
- 理解nodejs中js和c++的通信原理
- 如何使用FFmpeg将互联网直播点播平台内直播视频流转化为HLS流?
- 记一次nodejs问题排查
- 使用Go语言编译互联网视频直播点播平台EasyDSS出现ld returned 1 exit status错误
- c/c++补完计划(四): 字节对齐和虚继承
- Python 不用selenium 带你高效爬取京东商品评论
- 《闲扯Redis六》Redis五种数据类型之Hash型
- rocketmq学习2
- Python全栈(八)Flask项目实战之1.项目搭建
- 一起来读开源项目的代码-Agar.io为例
- C语言入门系列之11.文件和文件操作
- 自己动手改造 Jetpack LiveData