flume通过公网ip采集到hdfs上

需求描述:
公司的服务器在不同的地市都有分布,需要把不同地方的服务器的日志文件都收集到公司的内网hadoop集群中,来进行分析,(公司的hadoop集群和其他地方的集群不在同一内网中,需要借助公网来进行传输)
简单的模型图如下
这里写图片描述

失败案例:
直接把公网IP放在了hadoop集群的nn(namenode上面),模型如下:
这里写图片描述
然后启动flume往hdfs上面传输日志文件,发现flume端一直抛异常,说的是,不能够写入文件,然后去hadoop上看,发现只能穿上文件名,但是不能够写入文件。多次尝试都是不行的,进过一番尝试和分析,发现时应为外网传输的原因,应为公网在namenode上面,但是datanode上面并没有,当真正往hdfs上面写文件的时候,并不能写上去。错误分析图:
这里写图片描述

成功案例:
经过了一天的纠结终于想的出可以实现的方案了,因为上面的是应为不能和DN进行通讯造成的,所对以上方案进行改进,在公司内网服务器端再加上一个flume进行对接一下,这样就可以避免了上面案例的失败的点了,具体的模型为:
这里写图片描述

附上配置文件:

#这个是不同地方的服务器上的flume的配置文件
#从本地的文件夹中读取文件,然后发送为avro文件
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#具体定义source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/hadoop/install/flumefile

#具体定义channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#定义sink

a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = 公网ip
a1.sinks.k1.port = 4545

#组装source、channel、sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
#这个是内网里面的flume的配置文件
#定义agent名, source、channel、sink的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#
##具体定义source
a1.sources.r1.type = avro
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4545
#
#
#
##具体定义channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
#
##定义拦截器,为消息添加时间戳
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#
#
#具体定义sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/%Y%m%d
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.fileType = DataStream
#
##不按照条数生成文件
a1.sinks.k1.hdfs.rollCount = 0
##HDFS上的文件达到128M时生成一个文件
a1.sinks.k1.hdfs.rollSize = 10240
##HDFS上的文件达到60秒生成一个文件
a1.sinks.k1.hdfs.rollInterval = 120
#
#
##组装source、channel、sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

注意:配置文件里面的参数是不能直接放入生产环境中去使用的,需要自己根据实际情况去修改的,这里面的参数只是为了方便测试看出来效果才这样去配置的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值