storm与kafka进行集成写入HDFS

接上篇storm与kafka进行集成,本篇将storm处理好的数据持久化到hdfs中,主要思路是将最后一个Bolt改为hdfsBolt,将kafka的输出进行分词 统计,将最后的统计结果提交到hdfsBolt中,保存到hdfs中。

(1)HDFSBolt简介

HdfsBolt类的集成层次关系:

所有已实现的接口:

主要方法:

(2)HdfsBolt具体配置

//    	定义字段定界符,你可以使用换行符\n或者制表符\t;,就是如何拼接的,这里的拼接是我这里的 2019-07-18_09-38-29 : 63 : (UserController.java:29)
        // use "|" instead of "," for field delimiter
        RecordFormat format = new DelimitedRecordFormat()
                .withFieldDelimiter(" : ");
        
//        定义每次写入的tuple的数量;
        // sync the filesystem after every 1k tuples
        SyncPolicy syncPolicy = new CountSyncPolicy(1000);

//        定义写入的hdfs文件的轮转策略,你可以以时间轮转(TimedRotationPolicy)、大小轮转(FileSizeRotationPolicy)、不轮转(NoRotationPolicy);
        // rotate files 
        FileRotationPolicy rotationPolicy = new TimedRotationPolicy(1.0f, TimeUnit.MINUTES);

//        定义写入文件的路径(withPath)和文件名的前后缀(withPrefix、withExtension);
        FileNameFormat fileNameFormat = new DefaultFileNameFormat()
                .withPath("/storm/").withPrefix("app_").withExtension(".log");

//        定义hdfs的地址。
        HdfsBolt hdfsBolt = new HdfsBolt()
                .withFsUrl("hdfs://10.1.18.201:9000/")
                .withFileNameFormat(fileNameFormat)
                .withRecordFormat(format)
                .withRotationPolicy(rotationPolicy)
                .withSyncPolicy(syncPolicy);

拓扑配置:

        TopologyBuilder builder = new TopologyBuilder();

        //配置zk连接
        String zkConnString = "master:2181";

        BrokerHosts hosts = new ZkHosts(zkConnString);
        //Spout配置
        SpoutConfig spoutConfig = new SpoutConfig(hosts, "testtopics", "", "1");
        spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
        KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);

        builder.setSpout("kafkaspout", kafkaSpout).setNumTasks(2);
        
        builder.setBolt("mybolt1",new MySplitBolt(),2).shuffleGrouping("kafkaspout");
        
        builder.setBolt("mybolt2",new MyCountBolt(),2).fieldsGrouping("mybolt1",new Fields("word"));

        builder.setBolt("hdfs-bolt", hdfsBolt, 2).fieldsGrouping("mybolt2", new Fields("minute"));

(3)pom.xml就不贴上了,在上一篇文章中是有的。

(4)启动

开启ZK(集群中都要开) kafka(集群中都要开) storm(一个nimbus 其余为supervisor) 开启hdfs

启动一个生产者:

bin/kafka-console-producer.sh --broker-list master:9092 --topic testtopics


启动Storm jar
 

storm jar software/storms-0.0.1-SNAPSHOT.jar com.storm.storm2.WCApp

最后查看hdfs中是否有结果了,OK

本篇到这,下一篇会进行Flink的安装与配置

附Hdfs端口解释:

8020端口:

在cd /opt/sxt/hadoop-2.6.5/etc/hadoop/coresite.xml下的配置:

<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>node01:8020</value>
</property>
8020是namenode节点active状态下的端口号;

9000端口:是fileSystem默认的端口号:

在cd /opt/sxt/hadoop-2.6.5/etc/hadoop/coresite.xml下的配置:

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
</property>

50070是namenode主节点的端口号

<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>node01:50070</value>
</property>

50090端口号:namenode的secondarynamenode的端口号:
#<property>
#        <name>dfs.namenode.secondary.http-address</name>
#        <value>node02:50090</value>
#</property>

9083端口号:hive数据仓库元数据metastore的端口号

当在配置hive客户端的时候,需要在hive-site.xml文件下加上hive的端口号和服务端的信息(当然在配置服务端的时候,因为表示建在HDFS上Linux系统的mys下ql中的,需要配置mysql的信息)
<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://192.168.57.5:9083</value>  
</property>  

2181:zookeeper的端口号:

<property>
   <name>ha.zookeeper.quorum</name>
   <value>node02:2181,node03:2181,node04:2181</value>
 </property>
6379:Redis的端口号

60010:HBASE的端口号

8485:journalnode默认的端口号

9092:kafka的端口号

41414:flume监控的端口

2181:zk端口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yann.bai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值