首页 体育世界正文

白头发是什么原因,分布式日志搜集体系——Flume,兰州

一、Flume简介

Apache Flume 是一个分布式,高可用的数据搜集系统。它能够从不同的数据源搜集数据,经过聚合后发送到存储系统中,一般用于日志数据的搜集。Flume 分为 NG 和 OG (1.0 之前) 两个版别,NG 在 OG 的根底上进行了彻底的重构,是现在运用最为广泛的版别。下面的介绍均以 NG 为根底。

二、Flume架构和根本概念

下图为 Flume 的根本架构图:

2.1 根本架构

外部数据源以特定格局向 Flume 发送 events (事情),当 source 接收到 events 时,它将其存储到一个或多个 channel , channe 会一向保存 events 直到它被 sink 所消费。 sink 的首要功能从 channel 中读取 eve电击女nts ,并将其存入外部存储系统或转发到下一个 source,成功后再从 channel 中移除 events 。

2.2 根本概念

1. Event

Evnet 是 Flum白头发是什么原因,分布式日志搜集系统——Flume,兰州e NG 数据传输的根本单元。类似于 JMS 和音讯系统中的音讯。一个 Evnet由标题和正文组成:前者是键/值映射,后者是恣意字节数组。

2. Source

数据搜集组件,从外部数据源搜集数据,并存储到 Channel 中。

3. Channel

Channel 是源和接收器之间的管道,用于暂时存储数据。能够是内存或耐久化的文件系统:

Memory Channel
File Channel

4. Sink

Sink 的首要功能从 Chann白头发是什么原因,分布式日志搜集系统——Flume,兰州el 中读取 Evnet ,并将其存入外部存储系统或将其转发到下一个 Source ,成功后再从 Channel 中移除 Event 。

5. Agent

是一个独立的 (JVM) 进程,包括 Source 、 Channel 、 Sink 等组件。

2.3 组件品种

Flume 中的每一个组件都供给了丰厚的类型,适用于不同场景:

  • Source 类型 :内置了几十品种型,如 Avro Source , Thrift Source , Kafka Source , JMS Source ;
  • Sink 类型 : HDFS Sink , Hive Sink , HBaseSinks , Avro Sink 等;
  • Channel 类型 : Memory Channel , JDBC Channel , Kafka Channel , File Channel 等。

关于 Fl零一乐土ume 的使官员不雅观用,除非有特别的需求,不然经过组合内置的各品种型的 Source,Sink 和 Channel 就能满意大多数的需求。在 Flume 官网 上对一切类型组件的装备参数均以表格的方法做了翔实的介绍,并附有装备样例;一起不同版别的参数或许略有所不同,所以运用时主张选取官网对应版别的 User Guide 作为首要参考资料。

三、Flume架构形式

Flume 支撑多种架构形式,别离介绍如下

3.1 m魏缨宁ulti-agent flow

Flume 支撑跨过多个 Agent 的数据传递,这要求前一个 Agent 的 Sink 和下一个 Agent 的 Source 都必须是 Avro 类型,Sink 指向 Source 地点主机名 (或 IP 地址) 和端口(详细装备见下文事例三)。

3.2 Consolidation

日志搜集中常常存在很多的客户端(比方分布式 web 服务),Flume 支撑运用多个 Agent 别离搜集日志,然后经过一个或许多个 Agent 聚合后再存储到文件系统中。

3.3 Multiplexing the flow

Flume 支撑从一个 Source 向多个 Chann白头发是什么原因,分布式日志搜集系统——Flume,兰州el,也便是向多个 Sink 传递事情,这个操作称之为 Fan Out (扇出)。默许情况下 Fan Out 是向一切的 Channel 仿制 Event ,即一切 Channel 收到的数据都是相同的。一起 Flume 也支撑在 Sou紧身热裤rce 上自界说一个复用选择器 (multiplexing selector) 来完成自界说的路由规矩。

四、Flume装备格局

Flu潜泳教育视频me 装备一般需求以下两个过程:

  1. 别离界说好 Agent 的 Sources,Sinks,Channels,然后将 Sources 和 Sinks 与通道进行绑定。需求留意的是一个 Source 能够装备多个 Channel,但一个 Sink 只能装备一个 Channel。根本格局如下:
.sources = 
.sinks =
.channels =
# set channel for source
.sources..channe简马玉玺ls = ...
# set channel for sink
.sinks..channel =
  1. 别离界说 Source,Sink,Channel 的详细属白头发是什么原因,分布式日志搜集系统——Flume,兰州性。根本格局如下:
.sources.. = 
# properties for channels
.channel.. =
# properties for sinks
.sources.. =

五、Flume的装置布置

为便利我们后期查阅,本库房中一切软件的装置均独自成篇,Flume 的装置见:

Linux 环境下 Flume 的装置布置

六、Flume运用事例

介绍几个 Flume 的运用事例:

  • 事例一:运用 Flume 监听文件内容改变,将新添加的内容输出到控制台。
  • 事例二:运用 Flume 监听指定目录,将目录下新添加的文件存储到 HDFS。
  • 事例三:运用 Avro 将本服务器搜集到的日志数据发送到别的一台服务器。

6.1 事例一

需求: 监听文件内容改变,将新添加的内逐鹿民国容输出到控制台。

完成: 首要运用 Exec Source 合作 tail 指令完成。

1. 装备

新建装备文件 exec-memory-logger.properties ,其内容如下:

#指定agent的sources,sinks,channels
a1.sources = s1
a1.sinks = k1
a1.channels = c1

#装备sources特点
a1.sources.s1.type = exec
a1.sources.s1.c农门继妃之错嫁离王府ommand = tail -F /tmp/log.txt
a1.sources.s1.shell = /bin/bash -c
#将sources与channels进行绑定
a1.sources.s1.channels = c1

#装备sink
a1.sinks.k1越野飞车.type = logger
#将sinks与channels进行绑定
a1.sinks.k1.channel = c1

#装备channel类型
a1.channels.c1.type = memory

2. 发动

flume-ng agent \
--conf conf \
--conf-file /usr/app/apache-flume-芭蕾小女子1.6.0-cdh5.15.2-bin/examples/exec-memory-logger.properties \
--name a1 \
-Dflume.root.logger=INFO,console

3. 测验

向文件中追加数据:

控制台的显现:

6.2 事例二

需求: 监听指定目录,将目录下新添加的文件存储到 HDFS。

完成:运用 Spooling Directory Source 和 HDFS Sink 。

1. 装备

#指定agent的sourc黄子铭es,sinks,channels
a1.sources = s1
a1.sinks = k1
a1.channels = c1

#装备sources特点
a1.sources.s1.type =spooldir
a1.sources.s1.spoolDir =/tmp/logs
a1.sources.s1.basenameHeader = true
a1.sources.s1.basenameHeaderKey = fileName
#将sources白头发是什么原因,分布式日志搜集系统——Flume,兰州与channels进行绑定
a1.s和母亲ources.s1.channels =c1

#装备sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H/
a1.sinks.k1.hdfs.filePrefix = %{fileName}
#生成的文件类型,默许是Sequencefile,可用DataStream,则为一般文本
a1.sinks.k1.hdfs.fileType = Dat爸爸撸aStream
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#将sinks与channels进行绑定
a1.sinks.k1.channel = c1

#装备channel类型
a1.channels.c1.type = memory

2. 发动

flume-ng agent \
--conf conf \
--conf-file /usr/app/apache-flume-1.6.0-cdh5.15.2-bin/examples/spooling-memory-hdfs.properties \
--name a1 -Dflume.r无上神脉oot.logger=INFO,console

3. 测验

复制恣意文件到监听目录下,能够从日志看到文件上传到 HDFS 的途径:

# cp log.txt logs/

检查上传到 HDFS 上的文件内容与本地是否共同:

# hdfs dfs -cat /flume/events/19-04-09/13/log.txt.1554788567801

6.3 事例三

需求:白头发是什么原因,分布式日志搜集系统——Flume,兰州 将本服务器搜集到的数据发送到别的一台服务器。

完成:运用 avro sources 和错爱天使 avro Sink 完成。

1. 装备日志搜集Flume抗日之血染大地

新建装备 netcat-memory-avro.properties ,监听文件内容改变,然后将新的文件内容经过 avro sink 发送到 hadoop001 这台服务器的 8888 端口:

#指定agent的sources,sinks,channels
a1.sources = s1
a1.sinks = k1
a1.channels = c1
#装备sources特点
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /tmp/log.txt
a1.sources.s1.shell = /bin/bash -c
a1.sources.s1.channels = c1
#装备sink
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop001
a1.sinks.k1.port = 8888
a1.sinks.k1.batch-size = 1
a1.sinks.k1.channel = c1
#装备channel类型
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

2. 装备日志聚合Flume

运用 avro source 监听 hadoop001 服务器的 8888 端口,将获取到内容输出到控制台:

#指定agent的sources,sinks,channels
a2.sources = s2
a2.sinks = k2
a2.channels = c2
#装备sources特点
a2.sources.s2.type = avro
a2.sources.s2.bind = hadoop001
a2.sources.s2.port = 8邓仨888
#将sources与channels进行绑定
a2.sources.s2.channels = c2
#装备sink
a2.sinks.k2.type = logger
#将sinks与channels进行绑定
a2.sinks.k2.channel = c2
#装备channel类型
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100

3. 发动

发动日志集合 Flume:

flume-ng agent \
--conf conf \
--conf-file /usr/app/apache-flume-1.6.0-cdh5.15.白头发是什么原因,分布式日志搜集系统——Flume,兰州2-bin/examples/avro-memory-logger.properties \
--name a2 -Dflume.root.logger=INFO,console

在发动日志搜集 Flume:

flume-ng agent \
--conf conf \
--conf-file /usr/app/apache-flume-1.6.0-cdh5.15.2-bin/examples/netcat-memory-avro.properties \
--name a1 -Dflume.root.logger=INFO,console

这儿主张按以上次序发动,原因是 avro.source 会先与端口进行绑定,这样 avro sishinee夸姣的一天nk 衔接时才不会报无法衔接的反常。可是即便不按次序发动也是不要紧的, sink 会一向重试,直至树立好衔接。

4.测验

向文件 tmp/log.txt 中追加内容:

能够看到现已从 8888 端口监听到内容,并成功输出到控制台:

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。