常见分布式基础设施系统设计图解(六):分布式 MR 系统

其实对于 MR(Map Reduce)系统来说,可能更重要的是分治和分步处理的思想,因为现在的基于 MR 的数据处理框架或者平台,在实现上数据处理往往已经和最经典的对于 MR 的理解(最早应该是来自 Google 的那篇论文)有了不少区别。当然,我还是按照之前的做法,把一个典型的 MR 系统简单图示画出来了,这个图相对比较简单。

  • 还是老规矩,虚线表示控制流,实线表示数据流。
  • 上半部分用户向 Master 这个 job 管理节点提交一个 job 的请求,这个请求被拆解为若干个 task,下半部分的 slave 节点完成 task 的跟踪和执行。
  • 具体执行逻辑上:
    • 首先的输入文件,可以是多个已经拆分了的小文件,也可以是一个大文件
[……]阅读全文

Hadoop 的 Secondary Sorting

map-reduce 这几天项目中使用 Hadoop 遇到一个问题,对于这样 key-value 的数据集合:id-biz object,对 id 进行 partition(比如根据某特定的 hash 算法 P),分为 a 份;使用数量为 b 的 reducer,在 reducer 里面要使用第三方组件进行批量上传;上传成文件,文件数量为 c,但是有两个要求:

  • 上述 a、b、c 都相等,从而使得每个 partition 的数据最终都通过同一个 reducer 上传到同一个文件中去;
  • 每个 reducer 中上传的数据要求 id 必须有序。

最开始,想到的办法是,为了保证 reducer 中的批量上传,需要使得传入 reducer 的 key 变成一个经过 hash 算法 A 计算得到的

[……]阅读全文

给我一把榔头,满世界都是钉子

hammer 一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做?

Hadoop 是一把威力巨大的榔头,在使用过 Hadoop 之后,看着任何东西都想把它给 map reduce 了。有一个关于 Jeff Dean 的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff Dean 是 map reduce 他的羊群。所以,我的办法是,把这个文件拆分成若干个小文件,在 map 过程用 hash 算法保证相同的单词落入一个文件(这点很重要),计算单词出现次数,在 reduce 过程取得重复次数最多的单词来。

但是,真有必要这样啰嗦吗?

只有一亿个单词,简单估算一下,一个字母占据两个字节,假设单词平均长度 5,即便

[……]阅读全文

back to top