storm整合hdfs—从hdfs读取数据(一)

本文介绍如何使用Storm从HDFS读取数据,详细讲解了从编写Spout逻辑、ExactBolt的实现到CountBolt的统计过程。在本地调试时,需要注意配置HDFS目录权限。在运行中发现文件被持续读取并累计计数,可通过设置避免。文章最后提到了因配置错误导致的InvalidTopologyException问题,强调了Storm中streamGrouping的重要性。
摘要由CSDN通过智能技术生成

在做这个实验之前,查看了官方文档的demo以及【Gpwner的博客】,在他的博客里找到了很多灵感,感谢前人的无私奉献。

利用storm从hdfs读取数据,这个做法很少,就连官网给出的demo也少的可怜,众人拾柴火焰高,今天小厨也来添一把柴火,po出自己写的一个小demo,要读的数据正是上一篇博文《storm整合hdfs—将数据写到hdfs》产生的手机型号+日期后缀的数据,此次的业务逻辑就是利用storm去读/phoneStorm下的文件,抽取出手机型号名称,再使用countBolt去统计每个型号出现的次数。文章末尾会列出一些出现的问题。环境已经Maven添加的依赖都不变,如上篇博文所述。

会使用到的hdfs参数:

topologyName 指定本次topo的名称
hdfsUri 指定HDFS的 URI以及端口号
fileFormat 指定文件格式:“text”  or   “seq”
sourceDir 指定需要读取文件的HDFS目录
archiveDir 当文件完全处理完之后会存入此目录
badDir 当文件解析错误是 存入此目录

整个代码1:编写程序入口以及Spout 逻辑

package com.readhdfs;

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.generated.Nimbus;
import org.apache.storm.generated.StormTopology;
import org.apache.storm.hdfs.spout.HdfsSpout;
import org.apache.storm.hdfs.spout.TextFileReader;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;


import java.util.HashMap;
import java.util.Map;

/**
 * 读取hdfs文件,hdfs的spout端和main方法均在此类
 */
public class HdfsSubmitter {

    public static void main(String[] args) throws Exception{
        /**
         * 定义hdfs spout组件的相关配置
         */
        //接收从cli输入的四个值 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值