| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 【Hadoop Streaming实践系列】 大规模字段提取的实践 -> 正文阅读 |
|
[大数据]【Hadoop Streaming实践系列】 大规模字段提取的实践 |
【Hadoop Streaming实践系列】 大规模字段提取的实践
FesianXu 20220829 at Baidu Search Team
前言本文介绍如何利用Hadoop Streaming任务进行数以十亿计的大规模字段提取。如有谬误请联系指出,本文遵守 CC 4.0 BY-SA 版权协议,转载请联系作者并注明出处,谢谢。 ? \nabla ? 联系方式: e-mail: FesianXu@gmail.com github: https://github.com/FesianXu 知乎专栏: 计算机视觉/计算机图形理论与应用 微信公众号: 机器学习杂货铺3号店 假设现在有两个数据库A和B,在A里面存储了几十亿的url,而在B中储存了数以百亿计的url对应的正排信息,这些正排信息通过json格式进行组织。如下所示
当然,数据库B里面的数据显然不是按照和数据库A一样的顺序排列的,这里只是为了举例方便而让他们具有一样的序而已。显然不可能对于每个来自于数据库A的url都在B里面遍历一遍以查找对应的正排信息,这样的计算复杂度将会是无法接受的
O
(
N
M
)
\mathcal{O}(NM)
O(NM),其中
N
N
N和
M
M
M分别是数据库A和B的数据量大小。那么如何通过MapReduce解决这个问题呢?我们知道在Map阶段,会对输入数据进行划分到不同节点中,由海量的节点进行相同的操作,等所有mapper任务结束后,会对输出进行汇聚,并且排序(sort),然后进行划分后在分配给每个reducer进行归并处理。我们发现,可以在mapper阶段,对数据库B的所有数据进行解析,并且把目标正排字段提取出来,同时对于数据库A的url,我们想办法让它在输出的时候总是和数据库B解析得到的正排字段“挨着”,这样我们的计算复杂度就缩减到了
O
(
N
+
M
)
\mathcal{O}(N+M)
O(N+M)。对于A的每条输出,我们可以为其加上一个标识符,表示其来自于数据库A,并且为了让其能一直排在B解析结果的前面,可以考虑将这个标识符设定为
同时解析出来的B数据和其正排信息,如下所示:
那么将所有mapper的输出进行合并,并且sort后,其输出如:
可以看到,如果B里有A对应url的正排信息的话,来自于A的数据总是在B的前面,通过这个线索即可完成url的正排字段提取。mapper和reducer的示意代码如下:
这里需要简单对reducer的代码进行解释,我们从上面的分析已经可以知道reducer的输入,来自于对A和B的解析结果,并且进行排序后的输出。因此reducer的目的很显然,就是判断当前url是否来自于A,同时其后继行来自于B并且url与A一致,那么就将其正排信息输出即可。同时,由于标识符为“AAAAA”,对于同一个url数据而言,来自于A的数据总是排序在前,来自于B的数据(由于是字典序更小的
那么我们的reducer运行结果和关键变量的结果如下表所示(运行到循环末尾处作为断点)
通过这种处理方法,能够将匹配不上的结果跳过,而将能匹配上的结果进行输出。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:59:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |