设为首页 收藏本站
查看: 1089|回复: 0

[经验分享] 一次Hadoop开发思路分享

[复制链接]

尚未签到

发表于 2018-10-30 08:46:18 | 显示全部楼层 |阅读模式
  困扰了自己1周的一个问题终于得到解决了,感谢给我帮助的同学,同时记录下来分享给大家.
  问题简化描述:

  •   HDFS存在这样格式的文件:用户ID    主题ID    用户对此主题的偏好分数score。
  •   现在要求实现对给定的几个主题T1,T2,T3,...TN,每个主题要求筛选出指定数量的用户ID是M1,M2,M3,...MX。
  •   希望尽可能根据score来选出偏好的用户ID,并且主题之间的用户ID不可以重复。
  •   另外HDFS上distinct的用户ID数量是大于等于M1+M2+M3+...+MX的。
  思路分析:
  问题有几个关键点,第一,不重复,第二,数量上要满足,第三,偏好分数score。
  如何保证,主题之间的用户不重复呢?
  其实就是完成,一个用户只能属于一个主题的过程,当然,我们可以很简单的对一个用户下的所有偏好分数进行排序,取出最偏好的主题。
  虽然这样避免了重复的问题,可是问题来了,如果偏好主题T1要求的数量是100W,而仅仅只有90W的用户ID对T1最偏好,这该如何补数呢?又如何通过程序来自动化的实现这个过程呢?越想越复杂!
  这个问题好像有点类似于高考填自愿的问题,我们每一个人会填写几个志愿,但是我们终究只会被一个院校录取,这是怎么做到的呢?是否可以从中借鉴呢?
  首先,我们根据HDFS的内容,写一个MapReduce完成一次计算,形成下面的用户志愿HDFS内容:
  用户ID   主题ID-A:score1;主题ID-B:score2;...
  很简单,希望得到一个用户ID下面按照score desc排序的主题列表,上面一行其实就是说:
  用户ID的第一志愿是主题A,第二志愿是主题B...。
  ------------------------------------------
  接下来,形成下面的一个列表list信息:
  主题A   count-A
  主题B   count-B
  主题C   count-C
  ...
  按照主题需要的用户ID的数量进行ASC排序。
  ------------------------------------------
  下面,我们就来看如何进行主题选择用户的过程:
  我们首先选择对数量要求最少的主题A完成下面的MapReduce计算:
DSC0000.jpg

  这样,我们就完成了主题A的用户筛选问题。
  接下来,我们取出list中数量要求比A多一点的主题B,那么它怎么取用户呢?
  很简单,我们只需要在MAP处理阶段,传递主题A生成的结果HDFS路径(路径下面的文件内容当然是主题A的用户)用于reduce阶段取用户时进行过滤。
  那么,主题C又如何取用户呢?
  类似的,只需要给MAP多传递主题A,主题B已经占用的用户信息用于过滤,其他处理操作不变!
  其实,我们可以发现,上面的MapReduce其实可以是一个通用的程序,类似于COMMAND:
  hadoop jar XXX.jar 主题ID 数量  [input1,input2,input3,...] 用户志愿HDFS路径 输出路径
  其中input1,input2,input3,...是可选的,其实就是用于用户过滤的。
  最后,我们可以写一个Shell脚本,根据list的内容来进行重复调用上面的COMMAND,通过传递不同的参数信息达到目的,这样我们就可以自动化实现上面的要求了!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628250-1-1.html 上篇帖子: hadoop三----基于hadoop伪分布式整合hive和hbase 下篇帖子: hadoop扫盲
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表