分布式应用开发相关的面试题收集

来源:互联网 发布:淘宝哪家mcm高仿比较好 编辑:程序博客网 时间:2024/04/30 20:45

转载:http://www.tuicool.com/articles/q2QjYb

1.  生产系统每天会产生一个日志文件F,数据量在5000W行的级别。文件F保存了两列数据,一列是来源渠道,一列是来源渠道上的用户标识。文件F用来记录当日各渠道上的所有访问用户,每访问一次,记录一条。 请问如何快速计算出各渠道上新增的用户?

2. 有50台前端服务器分布在各个节点上,每台前端下都分别有一个本地的数据库,前端服务器每秒接受10万次请求,并且需要把获取到的内容插入至本地数据库。如果某台后端服务器需要从这50台前端服务器的本地数据库里去请求一些数据,用什么方式效果最好。

3. 请介绍一下分布式两阶段提交协议?

 阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。 * 阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。 在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。

4. 一个很大的2D矩阵,如果某点的值,由它周围某些点的值决定,例如下一时刻(i,j) 的值取当前时刻它的8邻点的平均,那么怎么用MapReduce来实现。

参考答案及分析:

首先,让我们以WordCount为例来解释MapReduce是怎么工作的。

原始状态下,输入–Map — Shuffle — Reduce — 输出

假设有如下的两个文本文件来运行WorkCount程序:

Hello World Bye World 
Hello Hadoop GoodBye Hadoop


map数据输入

Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。

如下是map1的输入数据: 
Key1                  Value1 
0         Hello World Bye World

如下是map2的输入数据: 
Key1                Value1 
0         Hello Hadoop GoodBye Hadoop

map输出/combine输入

如下是map1的输出结果 
Key2       Value2 
Hello            1 
World          1 
Bye               1 
World          1

如下是map2的输出结果 
Key2        Value2 
Hello              1 
Hadoop         1 
GoodBye      1 
Hadoop         1

combine输出

Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现。

如下是combine1的输出 
Key2         Value2 
Hello              1 
World            2 
Bye                 1

如下是combine2的输出 
Key2          Value2 
Hello                1 
Hadoop           2 
GoodBye         1

combiner视业务情况来用,减少MAP->REDUCE的数据传输,提高shuffle速度,就是在map中再做一次reduce操作。combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。

对于wordcount来说,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。 
reduce输出

Reducer类实现将相同key的值合并起来。

如下是reduce的输出 
Key2               Value2 
Hello                     2 
World                   2 
Bye                        1 
Hadoop               2 
GoodBye             1 

即实现了WordCount的处理。

官方的流程图:

用MapReduce来解决上述问题,以下标对作为map的key,遇到(i,j),生成(i-1,j-1),(i-1,j),etc,然后在reduce时merge相同的key,并计算value。


原创粉丝点击