架构师训练营第 1 期 -week12

用户头像
习习
关注
发布于: 2020 年 12 月 07 日

问题1



在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?



之前的公司是互联网医疗,对大数据有如下应用:



  • 电子病历,根据患者特征,识别出某些重点关注的疾病案例,实时预警,监控,预测,并通过大屏展示数据



  • 影像数据,根据病变特性进行机器学习,自动识别病变的案例



  • 不良药物反应上报,根据病历中的某些患者特征,识别出是否药物过敏,医疗器械应用,化妆品反应等重点关注的案例,然后自动上报到国家系统



问题2



分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?



INSERT OVERWRITE TABLE pv_users
SELECT pv.pageid, u.age
FROM page_view pv
JOIN user u
ON (pv.userid = u.userid);



page_view 表和 user 表结构与数据示例如下





整体过程





Map 函数



page_view &和user 两表的 JOIN 操作是通过 userid 关联的,所以 Map 操作的key为userid



page_view 表



| pageid | userid |

| :----: | :----: |

| 1 | 111 |

| 2 | 111 |

| 1 | 222 |



  • map函数输入参数(key,value,contex)

- key :value所在的偏移量

- value: page_view 表中的一行

- context:mapreduce的上下文



  • map函数输出List<Item>



输出是一个集合,其中集合的每个元素item是一根key,value键值对



- key: userid 的值



- value:是一个键值对,这个键值对的key是表id(这里用1代替),值是pageid,即:



| key: UserId | value: <TableId, PageId> |

| :---------: | :----------------------: |

| 111 | <1, 1> |

| 111 | <1, 2> |

| 222 | <1, 1> |



user 表



| userid | age |

| :----: | :--: |

| 111 | 25 |

| 222 | 32 |



  • map函数输入参数(key,value,contex)



- key :value所在的偏移量

- value: user 表中的一行

- context:mapreduce的上下文



  • map函数输出List<Item>



输出是一个集合,其中集合的每个元素item是一根key,value键值对



- key: userid 的值

- value:是一个键值对,这个键值对的key是表id(这里用2代替),值是age,即



输出如下所示:



| key: UserId | age: <TableId, Age> |

| :---------: | :-----------------: |

| 111 | <2, 25> |

| 222 | <2, 32> |



Shuffle



Shuffle 会将上述 两张表的map 输出结构按 userid排序以及分组,生成如下两张表的内容再交给不同的 Reduce 服务计算:



| key: UserId | value: <TableId, AgeOrPageId> |

| :---------: | :---------------------------: |

| 111 | <2, 25> |

| 111 | <1, 1> |

| 111 | <1, 2> |





| key: UserId | value: <TableId, AgeOrPageId> |

| :---------: | :---------------------------: |

| 222 | <2, 32> |

| 222 | <1, 1> |



Reduce



  • 输入



输入是shuffle函数的输出,即(key,values,contex)



- key :userId

- values:List<TableId, AgeOrPageId>

- context:mapreduce的上下文



  • 输出List<PageId,Age>



在输入的values中,pageid一定是表1的数据,age是表2的数据



所以只需要从 values 中过滤出 ages 和 pageIds 两个数组,然后对两个数组进行组合



- 第一个map[1,2]和[25]组合得到[1,25]和[2,25]



- 第二个map[1]和[32]组合得到[1,32]



最后结果为



| pageid | age |

| :----: | :--: |

| 1 | 25 |

| 2 | 25 |

| 1 | 32 |



用户头像

习习

关注

还未添加个人签名 2018.08.08 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 -week12