最近在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出问题了。

[Storm] No data flows into bolt的更多相关文章

  1. Storm的数据处理编程单元:Bolt 学习整理

    Bolt是Topology中的数据处理的单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些Bolt中完成的,编程人员可以实现自定义的处理过程,例如,过滤.函数.聚集.连 ...

  2. 关于storm的Spout、Bolt、及其可靠性

    本文导读: Component全家谱结构图 Spout分析 ——类图 ——分析(接口实现).结论 ——可靠的与不可靠的消息(推荐) Bolt分析  ——类图 ——分析(接口实现).结论 ——可靠的与不 ...

  3. Storm bolt重复消费问题解决

    最近碰到一个storm的坑, 两个bolt都需要从kafkaSpout中获取数据进行各自的业务处理, bolt1的处理是幂等的, bolt2的处理是非幂等的, 上线后发现非幂等的bolt处理总是会处理 ...

  4. Big Data Ingestion and streaming product introduction

    Flume Flume isdistributed system for collecting log data from many sources, aggregating it,and writi ...

  5. Storm源码分析--Nimbus-data

    nimbus-datastorm-core/backtype/storm/nimbus.clj (defn nimbus-data [conf inimbus] (let [forced-schedu ...

  6. Storm基础

    Storm基本概念 Storm是一个开源的实时计算系统,它提供了一系列的基本元素用于进行计算:Topology.Stream.Spout.Bolt等等. 在Storm中,一个实时应用的计算任务被打包作 ...

  7. Storm(2) - Log Stream Processing

    Introduction This chapter will present an implementation recipe for an enterprise log storage and a ...

  8. Storm入门(十)Twitter Storm: Transactional Topolgoy简介

    作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...

  9. Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理

    一. 概述 上一篇我们介绍了如何将数据从mysql抛到kafka,这次我们就专注于利用storm将数据写入到hdfs的过程,由于storm写入hdfs的可定制东西有些多,我们先不从kafka读取,而先 ...

随机推荐

  1. Keepalived+LVS+nginx双机热备

    Keepalived简介 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了, 也就是所谓的高可用或热备,用来防止单点故障的发生. Keepalived采 ...

  2. mongodb高级应用

    一.  高级查询 查询操作符 条件操作符:db.collection.find({"field":{$gt/$lt/$gte/$lte/$eq/$ne:value}}); 匹配所有 ...

  3. SVN“验证位置时发生错误”的解决办法

    验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javah ...

  4. RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用

    最近几天在看RabbitMQ,所以发了两天时间写了一个调试和测试工具.方便使用. 下载地址:RabbitMQTool-V1.0.1.zip

  5. 不透明度opacity进阶

    一.opacity属性 1.opacity 习惯上说“透明度”,其实应该叫“不透明度”.opacity 意思:不透明,而背景色的默认值:transparent意思才是“透明的”.所以opacity用来 ...

  6. 项目游戏开发日记 No.0x000006(Finish)

    项目开发的最后一周! 突然一下就把游戏收尾了, 就像一个嘎然而止的乐章, 留下的, 是无尽的回味. 余音绕梁的夜晚, 也还想着, 拼命码代码的日子, 和还留在嘴里回味的烈酒的浓香. ————————— ...

  7. CentOS 7搭建SVN服务器

    安装步骤如下: 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /var/svn/svnrepos ...

  8. [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字

    Given integers n and k, find the lexicographically k-th smallest integer in the range from 1 to n. N ...

  9. [LeetCode] Wildcard Matching 外卡匹配

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  10. bootstrap-监听滚动实现头部跟随滚动

    实现案例 <body data-spy="scroll" data-target="#bs-example-navbar-collapse-1"> ...