flume-1.7.0将源码修改为按文件读取数据

flume-1.7.0在配置source的时候,默认是按行读取,每行的数据作为一个事件,发送到channel。但是有时候,我们需要整个文件作为flume发送的一个事件。如果监控文件目录下的文件,这个时候就需要按文件读取,但是flume并没有提供按文件读取的配置。

如果想要实现相应的功能就需要修改源码。我只写简要的过程,并将修改以后的jar包上传上来。其中的过程不做详细说明,期间的步骤不复杂,不懂的地方可以直接去网上搜索。

在这里,我只修改了读取行的方法的地方,源文件中的类和方法的名字,都没有做修改。

1.下载flume1.7.0源码.

2.将其导入idea或eclipse.

3.编辑flume-ng-core项目的源码。更改org.apache.flume.serialization包下面的LineDeserializer类。

4.需要更改的地方是:

//原来的值是2048,因为我们的文件大小在3-10k,最大的文件是30k左右,所以更改为100k的大小。自己需要多大可以自己去调整。
public static final int MAXLINE_DFLT = 102400;

//更改readLine方法
private String readLine() throws IOException {
  StringBuilder sb = new StringBuilder();
  int c;
  int readChars = 0;
  while ((c = in.readChar()) != -1) {
    readChars++;
    sb.append((char)c);
    if (readChars >= maxLineLength) {
      logger.warn("Line length exceeds max ({}), truncating line!",
          maxLineLength);
      break;
    }
  }

  if (readChars > 0) {
    return sb.toString();
  } else {
    return null;
  }
}

原来的时候每遇到“\n”就会发送一个事件,现在是读完一个文件才发送一个事件。

其余的所有东西都不需要更改。

5.在flume-ng-core项目的pom文件中的项目g-a-v(项目坐标)的位置加上
<packaging>jar</packaging>
因为,我们只需要编译这一个项目就可以了。源码中的pom文件是没有打包方式的,所以需要添加。

6.打开cmd,进入flume-ng-core的目录,使用mvn package命令即可。为了方便,可以直接跳过测试。

7.用新生成的jar包替换集群上flume安装目录下面的lib文件夹中的相对应的jar包即可。重新启动flume。就可以正常使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值