Hadoop复制目标节点配置

时间:2016-02-05 09:45:30

标签: hadoop

我有一个关于在Hadoop中复制的问题,以下是这种情况: 我在2个机架中总共有6个节点

  Rack 1      Rack 2
__________  __________
|        |  |        |
| Node 1 |  | Node 4 |
|        |  |        |
| Node 2 |  | Node 5 |
|        |  |        |
| Node 3 |  | Node 6 |
|        |  |        |
__________  __________

如果整个机架故障转移,如何确保我的所有数据都安全?

是否可以配置复制目标节点

在这种情况下,如果复制因子等于3,则数据只能保存在1个机架上。 节点1复制到节点2和3,或节点5复制到4和6例如。因此,如果整个机架故障转移,我将丢失一些数据。

  Rack 1      Rack 2
__________  __________
|        |  |        |
| Node 1 |  | Node 4 |
|    v   |  |   ^    |
| Node 2 |  | Node 5 |
|    v   |  |   v    |
| Node 3 |  | Node 6 |
|        |  |        |
__________  __________

我想要做的,例如对于节点1,是在节点4或5或6上强制复制至少一次

  Rack 1      Rack 2
__________  __________
|        |  |        |
| Node 1 |  | Node 4 |
|    v   \  |   ^    |
| Node 2 |\-->Node 5 |
|        |  | /      |
| Node 3 <---/Node 6 |
|        |  |        |
__________  __________

一种方法是将复制因子设置为4,但此解决方案不够可扩展。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

Hadoop有一个称为“机架感知”的功能,可以解决这个问题。如果您将Hadoop配置为可识别机架,则HDFS将确保在您的两个机架方案中至少有一个复制器进入每个机架:http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/RackAwareness.html

要启用机架感知,您必须具有Java类或外部脚本,节点通过该脚本报告它所属的机架。

上面的链接提供了示例,但具体细节取决于您的网络配置。