storm实战问题和解决办法

概述

本文分析在使用storm过程中可能出现的问题,及其解决办法。

实战问题和解决办法

修改worker节点上的工作进程(worker process)数量

问题描述

我们知道,每个worker节点上都可能有多个工作进程(worker process)运行,每个工作进程运行storm的spout或bolt服务。
有时,我们需要增加或减少worker节点上的工作进程数量。

解决办法

在storm.yaml配置文件中,有一个参数:supervisor.slots.ports,该参数定义了一个工作进程(worker process)监听消息的端口列表。例如:

supervisor.slots.ports
- 6701
- 6702
- 6703
- 6704

若要增加一个工作进程,只需要再该列表中添加一个端口即可。修改配置文件后,需要重启Supervisor进程:

/opt/storm/bin/storm supervisor
  • 说明

    storm的work节点会默认在这些端口上:6701, 6702, 6703, 和6704分别开启一个工作进程。当添加端口时需要通过netstat等命令检查该端口是否已经被占用。
    另外,还需要查看系统打开文件最大数是否有限制。

修改工作进程的占用内存(jvms)

问题描述

有时我们需要增加或减少在worker节点上运行的worker process的jvm的内存。在storm.yaml配置文件中修改如下参数:

supervisor.childopts: "... -Xms512m -Xmx1024m ..."

另外,要注意,选项:–Xms和–Xmx最好相同。

查看toplogy运行的工作节点/进程

可以通过stromUI来查看toplogy的运行节点,和运行的进程情况。
可以通过查看Executors这一栏来知晓。

worker节点上的CPU抢占

问题描述

若Storm拓扑的吞吐量低于预期,可能需要检查运行拓扑的工作节点以查看是否存在CPU争用。

其中一个简单查看CPU使用情况的命令就是sar命令:

sar -u 1 3

参数-u:表示检查所有CPU的使用情况,参数1:表示每隔1秒检查一次,参数3:表示共检查3次

解决办法

若发现CPU的使用率很高,我们可以从以下几个方面来解决这个问题:

  • 增加worker节点的可用CPU数量,该操作在虚拟机环境下比较实用。
  • 换成更加强大的CPU。
  • 添加更多的worker机器节点,减少每个worker节点上的工作进程数量。
减少worker进程的数量的场景

在以下两种情况下可以减少worker节点上的工作进程数量:

  1. 在你的storm集群节点上,有没有使用的工作进程,此时可以在对应的节点上减少工作进程

说明:图中,黑色的方块表示topology A的工作进程,灰色的方块表示topology B的工作进程,白色表示没有使用的工作进程。

解读:根据上图,我们知道:该集群有4个worker节点,每个节点都有4个工作进程,但其中有两个节点的4个工作进程都是没有使用的,而另外两个节点的4个工作进程分别被toplogy A和B占满了,说明在这两个工作节点上发生了CPU抢占。

解决办法:看右图,把每个节点上的工作进程减少到2,正好满足要求,此时工作进程平均分配在4个工作节点上。

  1. 在集群的worker节点上,已经没有任何可以使用的工作进程了,此时需要添加worker节点来扩展集群。

说明:上图的黑色表示toplogy A的工作进程,而灰色表示toplogy B的工作进程。

从图上可以看出:4个工作节点都被工作进程占满,此时需要扩展工作节点(见右图)。可以看到,每个工作节点上的工作进程减少了,当然CPU负载也会相应的减少。

小结:若在使用云例如AWS,进行CPU的扩展是很轻松的事情,但要是CPU不能修改,只能添加更多的工作节点来分担计算任务。

工作节点上的I/O抢占

工作节点上的I/O抢占可以分为以下两类:

  • 磁盘的I/O抢占:文件系统的读写操作
  • 网络I/O抢占:从网络的socket中读写数据

对于某些toplogy来说,通常会发生这两种I/O抢占问题,我们要做的第一步是要确定工作节点是否发生了I/O抢占,进而确定发生了哪一种I/O抢占。

如何查找I/O抢占
  1. 通过sar

查看是否发生I/O抢占简单的方式是通过命令sar,这和检测是否发生CPU抢占的命令一样,但关注的列不同。

sar -u 1 3

我们需要关注的列是:%iowait这一列。
CPU空闲的时间百分比,在此期间系统具有未完成的磁盘I/O请求。若该值大于10%,则说明遇到了I/O抢占,此时的性能可能会下降。若大于20%,说明就比较严重了。

网络/socket I/O的抢占
  • 由于打开文件数量的限制
    在运行toplogy时,需要通过网络传输数据,也需要开启大量的端口。而很多OS对开启端口的数量都有限制,默认情况下是1024个。这个数量级的端口很快会被占用,所以需要在运行storm的工作节点上修改这个限制。
# 查看运行toplogy的进程号
-bash-3.2$ ps aux | grep MY-TOPOLOGY-NAME
stormuser 12345 18.2 …

# 查看该进程下的打开文件数的限制
-bash-3.2$ cat /proc/12345/limits
...
Max open files 1024 1024 files
...
  • 解决办法

    可以通过两种办法来解决这个问题:
    (1) 添加工作节点
    (2) 修改操作系统对打开文件数量的限制
    修改/etc/security/limits.conf文件:
* soft nofile 128000
* hard nofile 25600

建议数量不要大于128k。

磁盘I/O抢占
  • 问题描述

    可以通过iotop命令来查看各个进程读写磁盘的性能。若发现storm频繁的读写磁盘,需要对toplogy进行修改。

  • 解决办法

    • 写少量的数据到磁盘
    • 使用更快的磁盘
    • 不要把数据写入到NFS文件系统,因为这样会消耗网络资源,让写入性能更慢。

总结

本文对storm在实际过程中常用的一些问题和解决办法进行了说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值