zoukankan      html  css  js  c++  java
  • [Storm] No data flows into bolt

    最近在HDP2.1的HBase环境中安装了一个Storm测试机器(单节点,JDK8),遇到了几个问题,记录下来。

    尝试步骤

    1. 使用和HBase一样HDP版本,直接安装Storm

        yum install storm

    顺利安装完了。nimbus, supervisor and ui都能顺利起来。一个小插曲是,中途需要修改UI使用的端口,默认的8080被占用。所幸只需要添加配置 ui.port 就解决了。

    然后提交topology后,怎么都跑不起来。查看version,蒙逼了,Storm的版本是0.9.1。而我需要的至少0.9.3

    教训一:做之前,需要弄清楚做完后是否满足自己的需求。绕了一大圈,才发现安装的版本不对。

    2. 重新安装Storm 0.9.3

    由于目前机器上只有HDP2.1的配置,可查看 /etc/yum.repo.d/,后来找了一个HDP2.2的repo配置,放在了 /etc/yum.repo.d/下面,所幸什么都不需要重启,yum install直接就发现这个repo 了。就这样storm安装完成了。不可漏掉的是,使用HDP安装Storm前,需要手动先 adduser storm。因为Storm安装不会帮我们安装(坑,明明其他的都不需要特意创建用户)

    3. 配置Storm运行参数

    1)首先需要配置Storm JDK8环境。配置 conf/storm-env.sh + storm用户下的 ~/.bash_profile

    2) 配置 conf/storm.yaml。这个就不用多说了

    4. Storm跑起来

        nohup storm nimbus/supervisor/ui &

    一切似乎很顺利。然后接下来发生了事情,坑了我整整一天的时间。

    提交完Topology,check log 发现Spout emitting数据似乎没有进到下一个Bolt。NO DATA flows into Bolt,而且UI上bolt的input stats是empty,即Bolt连input stream都没有detect到!从代码上看这是不可能发生的事。

    5. 接下来开始了漫漫的DEBUG之路...

    TRY1: 想到之前自己改过 ui.port。当时发现有个配置storm.exhibitor.port和ui.port都使用8080,开始怀疑是不是修改ui.port,是不是应该修改一下也storm.exhibitor.port。修改并重启storm所有服务。然并卵。

        storm.exhibitor.port:the port Storm will use to connect to each of the exhibitor servers. Apache Exhibitor is a supervisor system for ZooKeeper.

    ui.port与storm.exhibitor.port是否有直接关系,不得而知了。但是至少它不是问题的根本原因

    TRY2: 修改topology的并发度,即修改bolt的tasks个数。然并卵。

    TRY3: Enable Storm debug模式。因为checkout log,看到很多异常log,比如 Spout Failing,Timeout之类的。但是就是基本看不到任何Exception,ERROR。

    所以想到大概是我没有把DEBUG模式打开吧。回去看代码发现 

         stormConf.put(stormConf.TOPOLOGY_DEBUG, true);

    赫然在目。恩,肯定是开的还不够,check网上的说明,看见了

    // When set to true, Storm will log every message that's emitted.
    stormConf.put(stormConf.TOPOLOGY_DEBUG, true);
    // same to above 
    stormConf.setDebug(true);

    人家还加了 stormConf.setDebug(true)。病急乱投医,修改后还是没什么用。现在想来那是当然的,我也是脑子被驴踢了,set storm debug直接的效果导致log泛滥, every message级别的;而且 setDebug(true)也不是啥特别的,只不过是上面set debug的另一种写法。

    TRY4: Disable spout/bolt 吐message这种log,太烦了。Disable Topology Debug功能。Topology LOG顿时清楚了,Exception无比清晰、醒目的出现在log中。

    asm.4.0啥的没有加载到。想到听人说过Storm0.9.3不支持JDK8,问题就处在asm的版本上。最后把 asm 4.0换成 asm-all 5.0,重启storm集群(不重启,虽然storm classpath里面就能检测到变化,然后那只是假象)。OVER。

    总结

    Storm topology debug害人不浅。

    数据不能从Spout流向Bolt,原来是asm出问题了。

  • 相关阅读:
    Azure 虚拟机安全加固整理
    AzureARM 使用 powershell 扩容系统磁盘大小
    Azure Linux 云主机使用Root超级用户登录
    Open edX 配置 O365 SMTP
    powershell 根据错误GUID查寻错误详情
    azure 创建redhat镜像帮助
    Azure Powershell blob中指定的vhd创建虚拟机
    Azure Powershell 获取可用镜像 PublisherName,Offer,Skus,Version
    Power BI 连接到 Azure 账单,自动生成报表,可刷新
    Azure powershell 获取 vmSize 可用列表的命令
  • 原文地址:https://www.cnblogs.com/qingwen/p/5679044.html
Copyright © 2011-2022 走看看