大数据,机器学习,人工智能大数据大数据技术分享

flume 入门系列

2018-09-29  本文已影响3人  code_solve

前言

本文是基础性文章,针对初次接触flume的朋友,简化了大部分内容,后续有时间会加上相关高级使用

为什么需要flume?

  1. 解耦:对于数据产生者,不关心数据被谁使用,对于数据使用者,不关心数据从哪来。
  2. 安全,稳定:flume 是提供数据安全保证的。
  3. 缓冲:数据生产速度 和 消费速度 可以得到一个平衡,不至于因为生产过快导致程序崩溃。
  4. 简单:内置大量现成组件,使用成本低。
  5. 负载均衡:flume 是分布式,对于大数据收集有天然优势
  6. 对 hdfs 支持友好
  7. 灵活:flume 收集基于单个 agent,扩展方便灵活

flume 有什么优势?

优势都是相对而言,我们简单以 kafka 来对比:

  1. 组件灵活,可定制化高
  2. 数据处理能力相对较强
  3. 对hdfs 有特殊优化

开启一个简单的flume

这里我们先什么都不管,先来玩一下flume,感受一下flume:

这里我们用 flume 1.8.0 来演示,官网地址:http://flume.apache.org/FlumeUserGuide.html

  1. 首先你得安装一下java环境,我这里安装 1.8 版本
  2. 下载 flume :http://flume.apache.org/download.html
  3. 解压,得到如下目录


    解压目录
  4. flume根目录 vim example.conf ,并输入一下内容:
# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  1. flume根目录执行 bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
  2. 到这里如果一切正常得话,那么flume就已经正式开始运行了。
  3. 为了验证一下效果,我们可以通过任何方式向 localhost:4444 发送数据,flume将会将你发送得数据打印在控制台,这里我们可以简单的使用 telnet localhost 44444 来进行测试
  4. 如果你是新手,到这里可能一头雾水,这都是什么和什么呢?别急,下面我们再来细细分析这个应用程序是怎么跑起来得。

到这里,我们应该可以体验到flume得简洁和易用了,就算你什么都不会,你也可以轻松得来使用它。

flume一般架构

  1. webServer作为一个客户端,会产生数据,将数据发送到 一个叫 source 的组件。
  2. source 将收到的数据存到一个叫 channel 的组件。
  3. sink 会从channel里面取出source 储存的数据,并将它放到 hdfs 上。
  4. 其中 source,channel,sink 的组合叫 agent。
  5. 基础架构非常简单,想要使用flume,我们只要通过一个配置文件定义好 source,channel,sink,那么flume就可以开始工作了。
# a1:这是我们agent的别名,随便取
a1.sources = r1 #给 a1 的source 取名叫 r1
a1.sinks = k1  #给 a1 的sink 取名叫k1    
a1.channels = c1  #给 a1 的channel  取名叫 c1  

# 配置source
#  “a1.sources.r1” 表示 “a1 里面的 soource r1”
#  “a1.sources.r1.type“ 配置了 “a1.sources.r1” 的类型
#  “a1.sources.r1.bind“ = localhost  配置了 “a1.sources.r1” 绑定的ip地址
#  “a1.sources.r1.port“  配置了 “a1.sources.r1” 绑定的端口号
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 配置 sink
#  “a1.sinks.k1.” 表示 “a1 里面的 sink k1”
#  “a1.sinks.k1.type“  配置了 “a1.sinks.k1” 类型是 logger(将收集的数据当日志打印)
a1.sinks.k1.type = logger

# 配置 channels
#  “a1.channels.c1” 表示 “a1 里面的 channel c1”
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 配置完三大组件之后
# 我们需要配置一下他们的关系
a1.sources.r1.channels = c1 # r1 的输出 channel 是c1
a1.sinks.k1.channel = c1 # k1 取数据的 channel 是 c1

看上去复杂的配置,其实很简单:
(1)声明相关组件
(2)配置组件的详细信息
(3)描述组件之间的关联关系
配置文件是以 kv 形式来声明的,并且 k 是以 · 来实现递进关系

  1. 启动脚本
bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

--conf conf 
声明一个配置文件的目录,是当前目录下的 conf 文件夹

--conf-file example.conf 
指定启动的该 agent 的配置文件是当前目录下的 example.conf 

--name a1 
指定该 agent 的别名是 a1

-Dflume.root.logger=INFO,console
-D表示配置一个kv格式的参数,
flume.root.logger是flume日志打印的方式和级别,
INFO,console表示 级别是 info ,打印位置是 控制台 console,
因为我们的收集过来的数据是当日志打印的,所以会在控制台打印出来咯

flume 的基本使用基本都是这样,配置三大组件就可以了,针对不一样的日志产生渠道和储存方式,可以选择不同的 source 和 sink ,并且官方有大量不同类型的 source 和 sink 可以供我们选择和参考,这也就使得flume的入门和使用成本非常低廉,如果你感兴趣,可以尝试下官方不同的source 和 sink 进行实践一下

上一篇下一篇

猜你喜欢

热点阅读