• [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出问题了。

  • 相关阅读:
    dayjs:js时间插件
    IE:IE请求路径带中文报错
    layui:下载表格为excel文件
    VUE:导出表格为excel文件
    报错:unexpected trailing comma
    node.js报错address not available 192.168.1.4
    js防抖和节流
    mongodb的常用基础命令及操作
    mongodb下载安装及环境搭建
    vue页面缓存
  • 原文地址:https://www.cnblogs.com/qingwen/p/5679044.html
Copyright © 2020-2023  润新知