小厨上次写过一次利用Storm从hdfs读取数据,但是效果非常不好,例如只能读取一次文件,无法控制读文件的次数。如下图所示:::
因此,在这里,小厨利用第二种方法读取hdfs数据。
需求:1、可以连续的读整个文件夹下面的内容;2、读完最后一个文件之后,退出Topo
整个代码1:编写程序入口
package com.bigdata.storm;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.generated.AuthorizationException;
import org.apache.storm.generated.InvalidTopologyException;
import org.apache.storm.generated.StormTopology;
import org.apache.storm.thrift.TException;
import org.apache.storm.topology.TopologyBuilder;
/**
* 描述一个topology对象 并向storm集群提交
* @author xiaxing
*
*/
public class TopoSubmitterClient {
public static void main(String[] args) throws TException, InvalidTopologyException, AuthorizationException {
//先获得一个Topology的构建器
TopologyBuilder builder = new TopologyBuilder();
//指定topo所有的spout组件类
//参数1 spout的id 参数2 spout的实例对象
builder.setSpout("hdfs-spout", new GetHdfsBolt());
//指定topo所用的第一个bolt组件,同时指定本bolt的消息流是从哪个组件流过来的
builder.setBolt("countBolt", new CountBolt()).shuffleGrouping("hdfs-spout");
//使用builder来生成一个Topology对象
StormTopology phoneTopo = builder.createTopology();
//将phoneTopo提交给集群运行
Config config = new Config();
//指定storm集群为Topology分配