BigData 学习记录(五)

MR(MapReduce)运行过程

client程序--》提交job至JobTracker--》分配job ID--》JobTracker检查输入文件存在,输出文件不存在--》进行输入分片--》Jobtracker分配资源--》初始化job(初始化就是创建一个正在运行的job对象(封装任务和记录信息),以便JobTracker跟踪job的状态和进程。)--》为每一个任务创建map任务--》任务分配(运行taskTracker与JobTracker进行沟通)--》执行任务--》任务完成,job状态为成功

MR作业处理(K:key,V:value)

文件    Map输入    Map进程    Map输出-Reduce输入  Reduce进程   Reduce输出

Input -->   Splitting -->   Mapping -->   Shuffling -->   Reducing -->  Output(Hdfs)

K1,V1  K2,V2                         K3,V3

输入--》分片--》分片执行Mapper run函数(setUp--while{map}--cleanUp)--》自定义combiner、sort、shuffling(数据处理,排序,merge整合)--》每个Reducer执行run(setUp--while{reduce}--cleanUp)函数--》输出到磁盘

(Input-->Splitting-->Mapping-->Shuffling)

MAP工作流程:

Map作业从输入数据中抽取出键值对(K1,V1),每一个键值对都作为参数传递给map函数,map函数产生的中间键值对(K2,V2)被缓存在内存中。

Map对数据进行两次排序: 1 每次溢出时,磁盘上产生一个溢写文件,溢写文件对溢出的数据划分好相应的分区(对应reduce),并排序 --第一次排序

2 结束时,将所有溢出时的溢写文件进行分区(对应reduce)排序整合  --第二次排序

(Shuffling)

MAP-Reduce交接:

1.缓存的中间键值(K2,V2)对会被定期(溢出时或指定时间内)写入本地磁盘,而且被分为R个区,R的大小是由用户定义的,将来每个区会对应一个Reduce作业;这些中间键值对的位置会被通报给master,master负责将信息转发给Reduce worker。

2.master通知分配了Reduce作业的worker它负责的分区在什么位置(肯定不止一个地方,每个Map作业产生的中间键值对都可能映射到所有R个不同分区),当Reduce worker把所有它负责的中间键值对都读过来后,先对它们进行排序,使得相同键的键值对聚集在一起。因为不同的键可能会映射到同一个分区也就是同一个Reduce作业(谁让分区少呢),所以排序是必须的(将所有Map进程产生的已经整合过的溢写文件提取相应的分区,并排序整合--第三次排序)。

(Shuffling-->Reducing-->Output(Hdfs))

reduce工作流程:

reduce worker遍历排序后的中间键值对(K2,V2),对于每个唯一的键,都将键与关联的值传递给reduce函数,reduce函数产生的输出(K3,V3)会添加到这个分区的输出文件中。

FileOutputFormat  --MapReduce使用OutputFormat类将数据输出存入文件中,其基本与InputFormat类似。输出没有分块,每个Reducer将它的输出直接写到自己的文件中。输出文件存在于一    个共有目录当中,一般被命名为part-nnnnn,nnnnn是Reducer的分区ID。

FileInputFormat  --继承InputFormat抽象类实现List和CreateRecordReader方法

1.FileInputFormat实现了InputFormat的getSplits()方法,将输入的文件划分为InputSplit(输入块)。

2.protected List listStatus(JobContext job ) throws IOException递归获取输入数据中的文件,其中的job包含前面的那几个参数,是系统的配置Configuration

3.切分之后有RecordReader来读取,FileInputFormat没有对应的RecordReader,他的两个子类:SequenceFileInputFormat二进制形式存放的键/值文件TextInputFormat是文本文件 的处理,他们的createRecordReader()分别返回SequenceFileRecordReader,LineRecordReader实例

InputSplit:包含一个以字节为单位的长度和一组储存位置。一个分片并不包含数据本身,而是指向数据的引用。存储位置供MapReduce系统使用以便将map任务尽量放在分片数据附近,而长度用来排序分片,以便优先处理最大的分片,从而最小化作业运行时间。

MapReduce程序:

1.获取配置信息 Configuration

2.新建Job

3.编写Mapper类和Reduce类

4.Job设置运行时的Mapper和Reduce类

5.Job设置输入输出文件

6.Jop设置输出参数类型

7.Job进程等待

8.Job进程结束

时间: 2024-08-07 12:59:09

BigData 学习记录(五)的相关文章

【bigdata学习记录1】【转】 一篇对大数据深度思考的文章,让你认识并读懂大数据

在写这篇文章之前,我发现身边很多IT人对于这些热门的新技术.新趋势往往趋之若鹜却又很难说的透彻,如果你问他大数据和你有什么关系?估计很少能说出一二三来.究其原因,一是因为大家对新技术有着相同的原始渴求,至少知其然在聊天时不会显得很"土鳖";二是在工作和生活环境中真正能参与实践大数据的案例实在太少了,所以大家没有必要花时间去知其所以然. 我希望有些不一样,所以对该如何去认识大数据进行了一番思索,包括查阅了资料,翻阅了最新的专业书籍,但我并不想把那些零散的资料碎片或不同理解论述简单规整并堆

Linux 学习记录 五(软件的安装升级)

一.gcc gcc是Linux上面最标准的C语言的编译程序,用来源代码的编译链接. gcc -c hello.c 编译产生目标文件hello.o gcc -O hello.c 编译产生目标文件,并进行优化 gcc -o hello hello.c 生成hello这个可执行的二进制文件 缺点:命令的冗余性,如果 C 语言程序中包含对其他函数或者程序的引用,那么其他程序也要编译成目标文件,然后一起编译成可执行文件,才能运行成功.一个大的程序引用是非常多的,所以用gcc来编译,显得很冗余. 二.mak

Ansible学习记录五:PlayBook学习

0.介绍 Playbooks 是 Ansible 管理配置.部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等 类似于一组任务集,定义好像项目,组织结构,配置文件等信息,通过task将所要做的事情一步一步的组织在一起就是完整的Playbook 官方Demo资料:https://github.com/ansible/ansible-examples Playbooks是采用YMAL语言结构,基础语法请参考:http://docs.ansibl

产品需求文档的学习记录(五)

在产品和技术领域里都有UML的技能知识,而对于产品人员的UML则更多的是指用例图,也就是我所称呼的用户流程图.在讲PRD文档写作的第二篇文章里,我提到了用户流程图的制作,实际上用户流程图是我在产品规则的初期对用例图的一种结构化的表达方式,由于以结构化的方式描述用例太抽象,缺少逻辑性表达,并且那篇文章更偏向于功能性用户流程,还不是实际意义上的用例,因此今天我补文一篇,细讲一下UML用例图和用例文档. 用例文档是由多个用例组成的一份文档,主要用于技术开发与测试使用,他是PRD中的重要辅助文档,用于讲

Oracle学习记录 五 Centos6.4 64bit下安装oracle

错误记录: Invalid source path '../stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles' specified for unzip. 这个错误应该是我只解压了第一个压缩包,没有解压第二个. 2. 还有一个问题就是按照开始安装的时候,说什么color的问题,这个我在网上看了些,不过,我直接把系统登出一次,重新用oracle登录就没事了. 3. [INS-32021] Insufficient disk space on thi

loadrunner学习记录五

1.HTTP的GET请求 这里以访问百度为例,地址http://www.baidu.com/s?wd=mobile,表示在百度上搜索mobile.具体脚本如下(有注释) Lr script代码   Action() { int status; lr_start_transaction("send"); web_reg_find("Search=Body",//这里说明在Body的范围内查找 "SaveCount=ret_Count",//这里表示

BigData 学习记录(四)

HDFS的IO操作 1.数据完整性 为了保证数据的完整性,一般采用数据校验技术: 1.奇偶校验技术 2.md5,sha1等校验技术 3.CRC-32循环冗余校验技术 4.ECC内存纠错校验技术 HDFS数据完整性 1.HDFS以透明方式校验所有写入的数据,可以通过io.bytes.per.checksum属性设置,字节数默认是512 字节,创建一个单独的校验和,如果节点检测数据错误,就会报CheckSumException异常. 2.除了在读取数据时进行验证,数据节点也会在后台运行一个线程 Da

Spring学习记录(五)---bean的作用域scope

作用域:singleton:单例,整个应用中只创建一个实例(默认) prototype:原型,每次注入时都新建一个实例 session:会话,每个会话创建一个实例 request:请求,每个请求创建一个实例 默认情况下,bean都是单例的,在下面这样时初始化,调用各个bean的构造函数 1 <bean id="person" class="com.guigu.spring.autowire.Person" 2 p:name="Tom" &g

SpringMVC学习记录(五)--表单标签

在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 1.引入标签头文件 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> 2.form标签 使