hadoop题0221答题.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用MR开发过哪些应用?思路? 精准广告推荐。 要求:统计微博日志中每条微博中对商品关键字的关注度。 日志格式: 微博id 微博内容 结果格式: 微博id 关键字1:关注度,关键字2:关注度……. 答:关注度权重W=TF*log(N/DF)。 TF:关键字在该条微博中出现的次数 DF:出现关键字的微博条数 N:微博的总条数。 思路:三个MR。 第一个mapreduce:计算TF、N。map中使用IK分词器(IKSegmenter)分出词组,计算TF(key:关键字_微博id,value:出现次数),并记录微博条数(key:count,value:1)。自定义分区,指定两个reduce,输出到两个文件中。 第二个mapreduce:以第一个mapreduce的输出作为输入,计算DF(key:关键字,value:微博条数)。 第三个mapreduce:计算关注度权重。将前两个mapreduce的输出作为输入。在setup()中预先读取TF、N、DF。 好友推荐 reduce: 人2 人3 人3 人2 人4 人1 人1 人4 ……. Combiner: 人1 (人2,人3,人3) 人2 (人4,人1,) 人3 (人1,人1) 人4 (人2) ……. Map: 人1 人2 人1 人3 人3 人1 人2 人4 人2 人1 人3 人1 人1 人3 人4 人2 ……. 原始数据: 人1 人2 人1 人3 人3 人1 人2 人4 ……. Map阶段:以主作为key,从作为value输出,同时以从作为key,主作为value输出 Reuduce阶段:将value存入set结构,set结构能够去重,然后对set数组自身做笛卡尔机运算,即双重循环,循环过程中去重每个元素自身与自身的推荐。 轨迹分析 Map/reduce接口体系,源码类结构关系? (1)体系 整个编程模型位于应用程序层和MapReduce执行器之间,可以分为两层,第一层是最基本的Java api,主要有5个可编程组件,分别是InputFormat、mapper、partitioner、reducer、outputformat,hadoop自带了很多直接可用的inputformat、partitioner、outputformat,大部分情况下,用户只需要编写mapper和reducer即可。第二层是工具层,位于基本Java API之上,主要提供了4个编程工具包: Jobcontrol:方便用户编写有依赖关系的作业,这些作业往往构成一个有向图(DAG), Chainmapper/chainreducer:方便用户编写链式作业。(???) Hadoop streaming:方便用户采用非java语言编写作业 Hadoop pipes:专门为c/c++程序员编写mapreduce程序提供的工具包。 (2)API类结构 旧版存放着org.apache.hadoop.mapred包中,新版API则放在org.apache.hadoop.mapreduce包及子包中。 上下文封装:易用性和扩展性。好处:首先函数参数列表经封装后变短;其次需要修改或添加某些变量或函数时,只需要修改修改后的上下文类。 (上下文概念和平时将参数封装为实体类有区别吗???) 序列化:要求key、value均可序列化,即让对应类实现其Writable接口,由于key是排序的关键字,还需实现WritableComparable接口。 回调机制,上述5个编程组件全是回调接口。 新旧API提交作业的区别: (3)API解析 InputFormat: 功能:a、数据切分,将数据切分为若干个split,以确定maptask个数以及对应的split。b、为Mapper提供输入数据,给定某个split,将其解析成key/value对。 新版api在形式上与旧版差别较大,但仅仅是对之前一些类的封装,增强易用性和扩展性。对于基类FileInputFormat,新版api的inputsplit划分算法不再考虑用户设定的map task个数,而用mapred.max.split.size(记为maxSize)代替,即InputSplit大小的计算公式为splitSize=max{minSize,min{maxSize,blockSize}} OutputFormat接口 getRecordWriter方法返回RecordWriter类型,该类中的方法wrier将一个key/value写入文件。在task执行过程中,mapreduce框架会将map()或者reduce()函数产生的结果传入write方法。 自带Outputformat实现,与InputFormat实现对应: FileOutFormat主要有以下两个功

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档