《Flume日志收集与MapReduce模式》一2.3 从“Hello World”开始

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本节书摘来自华章出版社《Flume日志收集与MapReduce模式》一书中的第2章,第2.3节,作者 [美] 史蒂夫·霍夫曼(Steve Hoffman)斯里纳特·佩雷拉(Srinath Perera),更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.3 从“Hello World”开始

每一本技术图书都会有一个“Hello World”示例。下面是我们将会使用的配置文件:


968a0c93886b012ea39e8b02c9db4c3b2bd00bfc

这里定义了一个名为agent的代理,它有一个名为s1的源、一个名为c1的通道,以及一个名为k1的接收器。
源s1的类型为netcat,它只是打开一个Socket监听事件(每个事件一行文本)。它需要两个参数,分别是一个绑定IP与一个端口号。该示例使用0.0.0.0作为绑定地址(表示监听任何地址的Java约定)以及端口号12345。源配置还有一个名为channels的参数,它是源将事件附加到的通道名。在该示例中使用的是c1。这里使用了复数,因为你可以配置将一个源写到多个通道中,不过在这个简单的示例中我们并没有这么做。
名为c1的通道是个内存通道,使用了默认配置。
名为k1的接收器的类型是logger。该接收器主要用于调试与测试。它会使用log4j将所有INFO级别的日志记录下来,这些日志来自于配置好的通道,在该示例中就是c1。这里所用的通道是单数的,因为一个接收器只能从一个通道接收数据。
使用该配置,我们运行代理并使用Linux netcat工具连接到代理来发送事件。
首先,解压缩之前下载的二进制分发包:


16f4b8aaa87f7c128db99b24903949eb7303d7e0

接下来,简单看看help命令。使用help命令运行flume-ng命令:

image
image

注意,如果指定了目录,那么就需要先将其加入到classpath中。
如你所见,可以通过两种方式调用命令(除了烦琐的help与version命令外)。我们将使用agent命令,avro-client的使用将在后面进行介绍。
agent命令有两个必填参数,分别是使用的配置文件与代理名(如果配置包含了多个代理)。下面来看看我们的示例配置,打开一个编辑器(我使用的是vi,你可以使用自己喜欢的任何编辑器):
image

接下来,将vi配置的内容放到编辑器中,保存并退回到shell。
现在可以启动代理了:
image

-Dflume.root.logger属性覆盖了conf/log4j.properties中的root logger,使用console追加器。如果没有覆盖root logger,那么一切也都正常,只不过输出将会被写到log/flume.log文件中。当然了,你还可以编辑conf/log4j.properties文件,修改flume.root.logger属性(或是其他想要修改的任何属性)。
你可能会问,既然-f参数包含了配置的完整相对路径,那为何还要指定-c参数呢。原因在于log4j配置文件需要放到classpath中。如果命令没有指定-c参数,那就会报如下错误:
image

不过你并没有这么做,因此会看到如下关键的日志输出:
image

这行日志告诉你名为agent的代理已经启动了。通常情况下,如果在配置文件中有多个配置,你只需要这一行日志就可以断定启动了正确的配置。
image

下面是另一个检查,确保加载了正确的文件,在该示例中就是hw.conf文件:
image

当所有的配置都被解析完毕后,你会看到下面这条消息,它展示了配置好的一切内容。你会看到s1、c1、k1,以及哪些Java类完成了实际的工作。你可能会猜想,netcat其实是org.apache.flume.source.NetcatSource的便捷方式。如果需要,我们也可以使用类名。事实上,如果编写了自定义的源,那么我会使用其类名来作为源的type参数。如果不对Flume分发包打补丁,就无法定义自己的短名字:
image

我们看到源现在正在监听端口12345的输入,接下来向其发送一些数据。
最后,再打开一个终端。我们使用nc命令(也可以使用telnet或是其他类似的命令)发送字符串“Hello World”并敲入来标识事件的结束:
image

“OK”来自于代理,在敲入回车后,它表示将文本行作为一个Flume事件来接受。如果查看代理日志,你会看到如下内容:
image

上述日志消息表明该Flume事件不包含头(netcat源自己也没有添加任何头)。体以十六进制的形式呈现,并且还有一个字符串表示(便于阅读,该示例中就是Hello World消息)。
如果像下面这样再发送一行:
image

你会在代理的日志中看到如下内容:
image

事件似乎被截断了。根据设计,logger sink将体内容限制为16字节,从而避免屏幕充斥着过多的内容。如果想要查看调试的完整内容,那么你应该使用其他的sink,也许可以使用file_roll sink,它会将日志写到本地文件系统中。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
91 2
|
3月前
|
分布式计算 Java Hadoop
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
Hadoop-18 Flume HelloWorld 第一个Flume尝试!编写conf实现Source+Channel+Sink 控制台查看收集到的数据 流式收集
43 1
|
8月前
|
分布式计算 Hadoop Java
【集群模式】执行MapReduce程序-wordcount
【集群模式】执行MapReduce程序-wordcount
|
8月前
|
分布式计算 Java Hadoop
【本地模式】第一个Mapreduce程序-wordcount
【本地模式】第一个Mapreduce程序-wordcount
|
分布式计算 资源调度 Hadoop
23 MAPREDUCE程序运行模式
23 MAPREDUCE程序运行模式
82 0
|
数据采集 缓存 大数据
大数据数据采集的数据采集(收集/聚合)的Flume之数据采集流程的Selector的多路复用模式
在大数据处理和管理中,数据采集是非常重要的一环。为了更加高效地进行数据采集,Flume作为一种流式数据采集工具得到了广泛的应用。其中,Flume的Sink Processor模块是实现数据输出和处理的核心模块之一。本文将介绍Flume中的Selector多路复用模式,讲解其数据采集流程。
197 0
|
数据采集 缓存 大数据
大数据数据采集的数据采集(收集/聚合)的Flume之数据采集流程的Selector的复制模式
在大数据处理和管理中,数据采集是非常重要的一环。为了更加高效地进行数据采集,Flume作为一种流式数据采集工具得到了广泛的应用。其中,Flume的Sink Processor模块是实现数据输出和处理的核心模块之一。本文将介绍Flume中的Selector复制模式,讲解其数据采集流程。
129 0
|
分布式计算 Ubuntu Hadoop
【集群模式】执行MapReduce程序-wordcount
因为是在hadoop集群下通过jar包的方式运行我们自己写的wordcount案例,所以需要传递的是 HDFS中的文件路径,所以我们需要修改上一节【本地模式】中 WordCountRunner类 的代码
|
分布式计算 Java Hadoop
【本地模式】第一个Mapreduce程序-wordcount
也就是在windows环境下通过hadoop-client相关jar包进行开发的,我们只需要通过本地自己写好MapReduce程序即可在本地运行。
|
分布式计算 资源调度 Hadoop
Hadoop运行模式(二)、SSH无密登录配置、生成公钥和私钥、集群配置、集群部署规划、默认配置文件、核心配置文件、HDFS配置文件、YARN配置文件、MapReduce配置文件、在集群上分发配置好的
ssh文件夹下(~/.ssh)的文件功能解释、ssh连接时出现Host key verification failed的解决方法、免密登录原理、将公钥拷贝到要免密登录的目标机器上、NameNode和SecondaryNameNode不要安装在同一台服务器、ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上、Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值、.
564 1
Hadoop运行模式(二)、SSH无密登录配置、生成公钥和私钥、集群配置、集群部署规划、默认配置文件、核心配置文件、HDFS配置文件、YARN配置文件、MapReduce配置文件、在集群上分发配置好的

相关实验场景

更多