
在各个slave(datanode)上面有会有Map和Reduce执行代码。
在Job提交时,会打包该job的配置文件类文件,jar文件等,拷
贝到各个datanode上面,做本地执行的。
用户配置并将一个Hadoop作业提到Hadoop框架中,Hadoop框架会把这个作业分解成一系列map tasks 和reduce tasks。Hadoop框架负责task分发和执行,结果收集和作业进度监控。
下图给出了一个作业从开始执行到结束所经历的阶段和每个阶段被谁控制(用户 or Hadoop框架)。
下图详细给出了用户编写MapRedue作业时需要进行那些工作以及Hadoop框架自动完成的工作:
在编写MapReduce程序时,用户分别通过InputFormat和OutputFormat指定输入和输出格式,并定义Mapper和Reducer指定map阶段和reduce阶段的要做的工作。在Mapper或者Reducer中,用户只需指定一对key/value的处理逻辑,Hadoop框架会自动顺序迭代解析所有key/value,并将每对key/value交给Mapper或者Reducer处理。表面上看来,Hadoop限定数据格式必须为key/value形式,过于简单,很难解决复杂问题,实际上,可以通过组合的方法使key或者value(比如在key或者value中保存多个字段,每个字段用分隔符分开,或者value是个序列化后的对象,在Mapper中使用时,将其反序列化等)保存多重信息,以解决输入格式较复杂的应用。
22 用户的工作
用户编写MapReduce需要实现的类或者方法有:
(1) InputFormat接口
用户需要实现该接口以指定输入文件的内容格式。该接口有两个方法
其中getSplits函数将所有输入数据分成numSplits个split,每个split交给一个map task处理。getRecordReader函数提供一个用户解析split的迭代器对象,它将split中的每个record解析成key/value对。
Hadoop本身提供了一些InputFormat:
(2)Mapper接口
用户需继承Mapper接口实现自己的Mapper,Mapper中必须实现的函数是
void map(K1 key,
V1 value,
OutputCollector<K2,V2> output,
Reporter reporter
) throws IOException
其中,<K1 V1>是通过Inputformat中的RecordReader对象解析处理 的,OutputCollector获取map()的输出结果,Reporter保存了当前task处理进度。
Hadoop本身提供了一些Mapper供用户使用:
(3)Partitioner接口
用户需继承该接口实现自己的Partitioner以指定map task产生的key/value对交给哪个reduce task处理,好的Partitioner能让每个reduce task处理的数据相近,从而达到负载均衡。Partitioner中需实现的函数是
getPartition( K2 key, V2 value, int numPartitions)
该函数返回<K2 V2>对应的reduce task ID。
用户如果不提供Partitioner,Hadoop会使用默认的(实际上是个hash函数)。
(4)Combiner
Combiner使得map task与reduce task之间的数据传输量大大减小,可明显提高性能。大多数情况下,Combiner与Reducer相同。
(5)Reducer接口
用户需继承Reducer接口实现自己的Reducer,Reducer中必须实现的函数是
Hadoop本身提供了一些Reducer供用户使用:
(6)OutputFormat
用户通过OutputFormat指定输出文件的内容格式,不过它没有split。每个reduce task将其数据写入自己的文件,文件名为part-nnnnn,其中nnnnn为reduce task的ID。
Hadoop本身提供了几个OutputFormat:
3 分布式缓存
Haoop中自带了一个分布式缓存,即DistributedCache对象,方便map task之间或者reduce task之间共享一些信息,比如某些实际应用中,所有map task要读取同一个配置文件或者字典,则可将该配置文件或者字典放到分布式缓存中。
4 多语言编写MapReduce作业
Hadoop采用java编写,因而Hadoop天生支持java语言编写作业,但在实际应用中,有时候,因要用到非java的第三方库或者其他原因,要采用C/C++或者其他语言编写MapReduce作业,这时候可能要用到Hadoop提供的一些工具。
大数据的时代, 到处张嘴闭嘴都是Hadoop, MapReduce, 不跟上时代怎么行? 可是对一个hadoop的新手, 写一个属于自己的MapReduce程序还是小有点难度的, 需要建立一个maven项目, 还要搞清楚各种库的依赖, 再加上编译运行, 基本上头大两圈了吧。 这也使得很多只是想简单了解一下MapReduce的人望而却步。
本文会教你如何用最快最简单的方法编写和运行一个属于自己的MapReduce程序, let's go!
首先有两个前提:
1 有一个已经可以运行的hadoop 集群(也可以是伪分布系统), 上面的hdfs和mapreduce工作正常 (这个真的是最基本的了, 不再累述, 不会的请参考 >
心电监护仪有心跳的声音是正常的,如果是一个生音“滴————————”,那才是异常。还有就是有的心电监护仪有自动报警的功能,也发出这种声音,如果影响休息可以让护士把声音取消了。希望可以帮助你,记得给分哦
以前曾经做过十余年的编程,见识过不少程序员,其中有两位是比较厉害的。
第一位,J同学,非科班出身,粮食专业毕业的,之后在一个食品厂工作,因为比较清闲,于是他突发奇想,想考某个211的计算机研究生,就去买了书来看,但是要实践啊,他又没有计算机,就有空总去公司的电脑室蹭机器用,电脑室的人,就让他帮忙开发一个工资管理系统,不知道是不是想为难他,结果他研究生是没考上了,但是经过一个月的摸索之后,居然把工资系统给做出来了。让电脑室那些科班毕业的人脸上挂不住啊!
之后他就斗胆去了一个国内知名的企业应聘程序员,居然还给应聘上了,慢慢做到了华南区的技术总监,再后来他几个同事出来创业,高新挖走他。
他这个人就是传说中的怪侠,非常低调,朴素,不按时上班,不按时下班,工作效率非常高,爱抽烟,请教他什么问题,他一时想不出来的话,就去外面抽根烟,烟抽完了,回来就会有答案,反正非常神奇。
第二位,B同学,科班出身,211大学计算机研究生,当时是他的导师跟我们单位有来往,推荐过来的,我面试的他,惜话如金,听说他C语言非常厉害,但是当时我们做项目需要PB,他说他不会,我就说,那给你一个星期的时候,你回去学习一下,再来面试。一个星期后,再过来,给他一个小模块,很快就做出来,非常棒,之后,项目的技术难题,大部分都是他解决的。平时,他也不怎么跟我们来往,但是有事就做,也不打 游戏 ,按时上班,按时下班,非常讨厌加班。
遇到技术问题,下班后打电话给他,他不接的。有一次,我们第二天系统要上线,大家都在忙着测试,加班,他到点就走了,领导追到电梯门口,问他,XX哥,你走了,他说了一个字,是,就进电梯了。后来也是被高薪挖走,听说到现在40岁也还没结婚。
我们公司有一位非常厉害的程序员,基本上一个人当做一个排兵力使用。也就是说一个人写代码的效率基本上抵得上10+人的能力,一年随随便便写个几十万高质量的代码。这种人对编程语言的理解已经到了登峰造极的地步,且能够灵活自如地使用。
在自己编码能力强的同时,对架构的理解能力也是超强,一个大的系统能够很快地进行模块拆分,快速的定义不同模块间的交互接口,可以快速的安排任务下去。
另外代码的质量基本上没地说,导致跟着他的测试人员几乎发现不了Bug,这哥们在写代码的同时基本上顺手就把单元测试写好了,代码质量高的简直出奇。
当然了,至于学习什么新的开源框架或者新的技术架构,基本上就是2-3天的功夫,就可以全面掌握。
目前为止,公司一直当做宝一样供着。
我见过最厉害的程序员,是在2001年入职的一间香港电路板公司的电脑部经理,他也是最值得我尊重的程序员,那他最厉害的地方在哪里呢?
编程语言只懂Foxpro DOS版本,但所有的ERP流程,英文、管理方法说得滴水不漏,有一次和财务的同事聊天,才知道他的月薪达8万多。
很多程序员最怕大老板提问题,但在他的眼里,大老板提问题就是一个商机,多多少少都要老板加工资加设备。 高情商的表现就是无论下属或老板通通管理得服服帖帖,包括我自己,甚至老板还没有说话就己经知道老板的心思了。
老板分配的编程任务应期三天完成,绝对不过4天。软件开发效率的提高,自然要依赖下属心甘情愿的加班付出才行,做到这一点,真的是难能可贵。
最厉害也是我最佩的一点就是,40多岁了头发还没有一点白的迹象,每天高效率的工作,下班后就抛开工作的烦恼,尽情桑拿按摩享受。
我认为最厉害的程序员不是编程技术,而是如何利用编程技术,不知道你认不认同?
应该是读研时的学长,精通Java和Python,毕业后进去微软研究院工作。
当时和他在一个项目组,他独立完成了教学平台语言分析模块,NLP 模块。我们团队任何问题都能很快给出解决方法,前端后端都擅长。
当时我刚接触Linux,他就已经把Linux作为工作学习唯一的选择。经常用terminal *** 作,敲起代码太帅了
诚邀,本人在杭州华为研究所工作,之前在一家创业公司工作过,公司里一个工作10年的大神,撑着整个创业公司,老板总能拿到某些项目源代码,不同语言的,c c++ net java总之很多,给他,一礼拜就可以全懂了,所有语言基本都是1礼拜搞定(玩代码的都知道精通一门语言后学其他的特别容易,不外乎面向对象的,面向过程的,然后就是各种API )上手做项目,之前很多不懂的问题问他都可以从本质上分析得很明白,主要是基本上看几眼就可以知道哪里错了。或者大概方向,我后来去华为,都是他建议的,现在还在那公司的他听说是技术总监了,应该不怎么敲代码了。
核心的代码总是有那一两个程序员来实现的。比方说现在微信的一开始的核心代码。
比方说Linux的核心代码, 都是由林纳斯·托瓦兹编写的, 并且为了能够让开源社区的人一起进行开发, 又编写了Git版本控制。当你不满意某个软件或者系统的时候, 能够自己实现并制作出更好的也许就是厉害的程序员吧。一直到现在很多的系统分支都是来源于Linux的内核。
最后如何成为最厉害的程序员, 还是要学习基础核心的知识, *** 作系统, 数据结构, 算法, 编译原理, 计算机网络, 在这个基础上学习编程都是为了更好地实现自己的心中所想。为什么这样写, 这样写会产生什么效果。 为什么Golang最近这么热, 为什么鸿蒙会被看好, 它又和其他的有什么区别, 就可以自我判断, 而不是见风就是雨。
最后希望自己也成为那个最厉害的程序员。
很久以前,我用win98的时候有次我系统崩溃了,因为我是电脑白痴,我朋友给我介绍了一个高手来帮我修电脑。
他看了一下电脑,问我有没有98的盘,我说没有。
他想了一下,叫我把固定电话拿给他,我想修电脑要电话干什么,但人家是高手,我也不好说什么,就把电话拔下来给他了。
他把电话线空着的一头接在电脑的一个插孔内,然后进入dos,就开始在电话上不停的按着键,他按键的速度异常快,但是只按0,1两个键,我搞不懂这有什么用,但也不敢问,看了半个多小时,他还是不停的按这两个键,我徐徐的有些困,我问他这东西要搞多久,他说要几个小时,我给他倒了杯茶,就一个人去隔壁睡觉了。
醒来的时候,一看已经过了4个多小时,我起身到隔壁,看见他正在98里面调试,过了一会儿,他说,你试试,我坐上椅子用了一下,真的好了,我当时也不懂电脑,谢过人家就走了。 后来我慢慢对电脑有了了解,终于了解,原来当时那位高手是用机器语言编了一个98系统,我后来问我朋友那位高手的下落,我朋友说前几年去了美国之后,杳无音讯
五年前有幸在一家软件公司做产品经理。小的软件公司。坐标西安。招人还挺不好招的。虽然给的薪水还不错。但是真心不好招人。这种小软件公司没有名气。真正牛逼的人都不来。
百试几百人,包括做产品和前端的也算在里面。光程序员这块。有百分之六十的投简历的都是从某培训机构出来的。所以的项目经历。和待过的公司都是一模一样,有明显的人为的痕迹。
但是后来实在没有人手。招了一两个,差。差。差。真是差到极点
后来又经人推荐,招了一个,说是做安卓开发的。结果连个软件的心跳包都调不好。软件的升级这块都搞不定。最后还是我这个外行,逼着他。一点一点卡,才把软件升级这块稍微搞上路了。
说出来真是让大家笑话,华为的外包中软国际。有个孩子实在忍受不了里面的虐待,在里面工作了一年半。然后跳到我们公司。这个孩子,才是稍微让人可以用一下。就是起码。你给他的工作。他能完成。其他的人都是在摸鱼。因为这个公司的老板以前也不是做手机软件这块。没有资源,不认识人。
他是做电脑PC软件,到后面做BS系统多一点。其实这种没有技术含量,找的别人的框架。去修改。
普通人见不到最牛逼的程序员,最牛逼的程序员,一定是在最牛逼的软件或者互联网公司的深宫后院里面。还没出世的。就像当初的张小龙,史玉柱,裘伯君一样。
你现在能看的牛逼的,感觉牛逼的。都是因为你不懂这个。你才觉得牛逼。包括前几年比较活跃的黑客们,制造一些病毒。这都不是牛逼。包括熊猫烧香的李俊,普通人觉得他可牛逼了。但是真正的他出来后,去金山 360这种公司,提鞋别人都不要。
因为搞破坏不是牛逼。也不是自己水平有多牛逼。
我来讲一个我见过最厉害的程序员。
这个程序员是我第一份工作碰到的大牛,我的第一份工作在中兴通讯成都研究所,当时是做 *** 作系统研发的。
我们当时经常会做一些培训和技术分享,那时候我才入职3个月,我发现公司里有个人每次技术分享时候,就很多人去听,并且会议室爆满,连站的地方都没有,然后我有次也去听了一下, 第一每次目睹大牛的风采,因此 *** 作系统是最底层的研发工作,会涉及到内核这块知识,而linux内核知识特别抽象,看书根本很难看懂,但是这个大牛能把很难的东西讲的很容易理解,并且在会上面对大家的提问总是能对答如流,实在是厉害。
而后我通过公司里的老员工才了解到,这位大牛是自学成才的,他的文化程度才初中,破格录取到中兴通讯,当时是 *** 作系统部门的技术专家,他都能自己编写 *** 作系统,对各硬件都非常了解,也出了很多书。可见兴趣是最好的老师,让他能够在程序员中发光。
必须是ACM大神,楼天成,楼教主。不了解他的可以百度之。是个天才一般的存在。
几年前清华大学找同学玩,他那时是清华软件学院的学生,突然说要带我去见他的偶像,还说是最后的机会了,我们跑去计算机学院,当时博士正在答辩,通过在场的同学找到了他,他很腼腆的千呼万唤始出来。他们两在那里交流了半个多小时,最后互留了EMail,我跟他聊了些我专业的内容,他还蛮好说话。 后面还通过这位同学认识另一位ACM届大神,上海交大的戴文渊。我对编程略有了解,主要还是崇拜天才。
以上就是关于hadoop mapreduce的整个map/reduce过程里面map和reduce分别是在master上还是在slaver上执行全部的内容,包括:hadoop mapreduce的整个map/reduce过程里面map和reduce分别是在master上还是在slaver上执行、如何在Hadoop上编写MapReduce程序、如何快速地编写和运行一个属于自己的MapReduce例子程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)