strom配置如何达到性能最佳???

芬兰的光 2016-06-23 10:38:45
各位大神可以分享下strom配置,如何达到性能最佳吗???
...全文
822 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
chyanch 2016-06-28
  • 打赏
  • 举报
回复
Storm的性能需要结合程序,Storm的配置以及物理资源情况联合分析。 提供一些思路: nimbus---supervisor --[ worker *N (executor *N--tasks*N)] supervisor(节点)>worker(进程)>executor(线程)>task(实例) 主要的计算都在Supervisor节点,其中 worker -> 进程。一个worker里面可以有多个executor。 executor -> 线程。 一个executor执行可以执行多个task。 task -> storm进行任务分配的基本单位。 其中: (1)Worker的数量: a. storm.yaml中,如下指定了 worker进程的端口,以及当前机器下能运行的work数量,每个端口用于对应进程对外通讯的。 如下配置可以不配置,在storm的 storm-core-xx.jar中的default.xml中做了默认配置。 supervisor.slots.ports: // 指定storm通讯端口 - 6701 - 6702 - 6703 - 6704 worker进程数量也可以通过config.setNumWorkers(workers)设置。(优先级更高) (2) executor的设置: builder.setSpout(id, spout, parallelism_hint): parallelism_hint设置spout的数量 builder.setBolt(id, bolt, parallelism_hint)设置的。parallelism_hint设置bolt的数量 (3)task的设置: task是通过 spout/boltDeclarer.setNumTasks(num)设置对应spout/bolt的task个数。 默认情况下,每个supervisor启动4个worker,每个worker启动1个executor,每个executor中会有1个task。 翻译成人类语言: 每台机器启动4个进程,每个进程里面跑一个线程,每个线程来具体执行一个 bolt/spout的实例 也可以通过 config设置进程个数 通过TopologyBuilder设置spout/bolt 各自的线程个数, 也能通过TopologyBuilder创建的对应的 Spout/BoltDecvlarer 来设置每个线程运行的具体task个数。 程序示例: public class WordCountTopology {   public static void main(String[] args) throws Exception {     TopologyBuilder builder = new TopologyBuilder();     builder.setSpout("tweet", new RandomSentenceSpout(), 2);     builder.setBolt("split", new SplitSentenceBolt(), 4)       .shuffleGrouping("tweet")       .setNumTasks(8);     builder.setBolt("count", new WordCountBolt(), 6)       .fieldsGrouping("split", new Fields("word")); Spout 并行度2,任务数2(没指定等同于2); SplitBolt并行度4,任务数8 CountBolt并行度6,任务数6 (没指定等同于6) 优化思路根据物理资源/数据分布合理调整并行度 JVM参数调整 # to nimbus nimbus.childopts: "-Xmx1024m" # to supervisor supervisor.childopts: "-Xmx1024m" # to worker worker.childopts: "-Xmx768m" 另外worker调优: Config类对象设置如下参数,来调整 worker进入数据,处理数据的容量大小 conf.put(Config.TOPOLOGY_RECEICER_BUFFER_SIZE, 8); conf.put(Config.TOPOLOGY_TRANSFER_BUFFER_SIZE, 32); conf.put(Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE, 16384); conf.put(Config.TOPOLOGY_EXECUTOR_SEND__BUFFER_SIZE, 16384); 初步就这些思路,更深层次的优化可以看程序运行过程中是否有特别慢的task,是否程序对数据处理不均衡导致的问题,优化程序等等。

742

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • Power Linux社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧