在Hadoop中实现负载均衡的主要方式是:
1、 HDFS的块大小和副本数设置:
- 合理的块大小可以使数据均匀分布在集群。
- 增加副本数可以在机器失效时快速恢复,也提高读取吞吐。
2、 YARN的资源调度:
- 容量/公平调度器可以均衡的分配资源给用户/队列。
- 节点标签使资源请求和数据局部化。
3、 自定义调度器和资源管理器:
- 继承
CapacityScheduler
等实现自定义调度算法。 - 继承
RMContainerAllocator
等实现自定义资源分配。
4、 可插拔的 LoadBalance接口:
- 默认使用
InactiveNodesLoadBalancer
将新任务放在空闲节点。 - 实现
LoadBalance
选择活跃的并均衡负载的节点。
5、 启动多个JobTracker/ResourceManager实例:
- 客户端随机连接其中一个,实现负载均衡。
- 需要一个专门的代理进程进行重定向。
6、 YARN负载均衡示例:
- 容量调度器:根据队列权重分配资源。
- 公平调度器:尽量平均分配资源给不同用户。
- 节点标签:
<property>
<name>yarn.node-labels.fs-label.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.node-labels.ssd-label.capacity</name>
<value>50</value>
</property>
- 资源请求使用节点标签:
resource.setNodeLabelExpression("fs-label");
负载均衡的主要作用是:
1、 最大限度使用集群资源,提高资源利用率。
2、 防止热点,避免部分节点过载。
3、 在节点失效时实现快速容灾。
来看一些简单示例:
1、 HDFS块大小256MB,副本数3,以实现负载均衡和高可用。
2、 YARN容量调度器:
– 根队列:queue1(50%),queue2(50%)
– 资源按队列权重分配,实现负载均衡。
3、 YARN公平调度器:
– 资源尽量平均分配给不同用户,实现负载均衡。
4、 YARN节点标签:
<property>
<name>yarn.node-labels.fs-label.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.node-labels.ssd-label.capacity</name>
<value>50</value>
</property>
- 资源请求使用节点标签后,任务会运行在标签对应的节点上。