codecamp
Apache的水槽快速指南

Apache的水槽 - 简介

什么是水槽?

阿帕奇水槽是用于收集聚集和输送大量流数据的例如日志文件,事件(等)从各种源到集中式数据存储的工具/服务/数据摄取机制。

水槽是高度可靠的,分布式的和可配置的工具。其主要目的是从不同的Web服务器流数据(日志数据)复制到HDFS。

Apache的水槽

水槽中的应用

假设一个电子商务Web应用程序想从一个特定区域分析客户的行为。这样做,他们将需要在到Hadoop的移动可用日志数据进行分析。在这里,阿帕奇水槽来拯救我们。

水槽是用于由应用服务器生成的日志数据移动到HDFS以更高的速度。

水槽的优点

下面是使用水槽的优点 -

  • 使用Apache水槽我们可以存储在任一集中存储(HBase的,HDFS)的数据。

  • 当输入数据的速率超过了数据可以被写入到目标的速度,水槽充当数据生产者和集中商店之间的中介,并提供它们之间的稳定的数据流。

  • 水槽提供上下文路由的功能。

  • 其中,两笔交易(一个发送器和一个接收器)保持每封邮件中的水槽交易是基于信道。它保证了可靠的消息传递。

  • 水槽是可靠的,容错,可扩展,可管理和可定制的。

水槽的特点

是一些水槽的显着特点如下 -

  • 水槽摄取来自多个Web服务器的数据登录到集中存储(HDFS,HBase的)有效。

  • 用水槽,我们可以从多台服务器上的数据马上进入Hadoop的。

  • 随着日志文件,水槽也被用来导入由社交网站如Facebook和Twitter,以及电子商务网站如亚马逊和Flipkart活动产生的海量数据。

  • 水槽支持大量的源和目标类型。

  • 水槽支持Multi-hop流动,扇入扇出流,上下文路径等。

  • 水槽可以水平扩展。

Apache的水槽 - 数据传输在Hadoop中

大数据,因为我们知道,是不能用传统的计算技术来处理大型数据集的集合。大数据,分析时,给出了有价值的结果。 Hadoop是一个开源框架,它允许存储和跨中使用简单的编程模型的计算机集群的分布式环境中处理大数据。

流/日志数据

通常,大部分是要分析将用相同的应用程序服务器,社交网站,云服务器和企业服务器各种数据源产生数据。该数据将在日志文件活动形式。

日志文件 -通常,日志文件,该目录中出现的一个操作系统事件/动作的文件 。例如,Web服务器列表中的日志文件的服务器的每个请求。

在收获这样的日志数据,我们可以得到有关的信息 -

  • 应用性能并找到各种软件和硬件故障。
  • 用户的行为并从中获得更好的业务洞察力。

传送数据到HDFS系统的传统方法是使用put命令。让我们来看看如何使用put命令。

HDFS PUT命令

在处理日志数据的主要挑战是将这些日志由多个服务器在Hadoop环境中产生。

Hadoop的文件系统壳牌提供的命令将数据插入到Hadoop和从中读取。使用put命令,如下图所示,您可以将数据插入的Hadoop。

$ Hadoop fs –put /path of the required file  /path in HDFS where to save the file 

问题PUT命令

我们可以用的Hadoop put命令将数据从这些来源到HDFS转移。但是,它从下述缺陷 -

  • 使用put命令,我们可以在数据生成器在更高的速率产生的数据在一次只能传输一个文件 。由于分析提出的旧的数据是不准确的,我们需要有一个解决方案,以在实时传送数据。

  • 如果我们使用put命令时,需要的数据被打包并应准备上载。由于Web服务器不断生成数据,这是一个非常艰巨的任务。

我们所需要的就是一个解决方案,可以克服put命令的缺点和更低的延迟从传输数据生成到集中存储(尤其是HDFS)中的“数据流”。

问题HDFS

在HDFS,该文件存在作为一个目录条目和,直到它被关闭的文件的长度将被视为零。例如,如果一个源数据写入HDFS和网络中的操作的中间被中断(而不关闭文件),然后将其写入该文件中的数据将会丢失。

因此,我们需要一个可靠的,可配置和可维护的系统日志数据传输到HDFS。

-在POSIX文件系统,当我们访问一个文件(比如执行写操作),其他程序仍然可以读取该文件(至少是该文件的保存部分)。这是因为该文件被关闭之前在盘上存在。

可用的解决方案

发送流数据(日志文件,事件等,)从各种渠道HDFS,我们可以在我们的掌握的下列工具 -

Facebook的抄写员

抄写员是一个非常受欢迎的工具,用于聚合和流日志数据。它被设计为扩展到一个非常大的数量的节点和健壮到网络和节点故障。

Apache的卡夫卡

卡夫卡已经由Apache Software Foundation开发。它是一个开源的消息代理。使用卡夫卡,我们可以处理高吞吐量和低延时的饲料。

Apache的水槽

阿帕奇水槽是用于收集聚集和输送大量流数据的例如日志数据,事件(等)从各webserves到一个集中式数据存储中的工具/服务/数据摄取机制。

它是一种高可靠性的,分布式的和可配置的工具,它主要设计用于从各种来源传输流数据到HDFS。

在本教程中,我们将详细讨论如何使用渡槽一些例子。

Apache的水槽 - 建筑

下图说明了水槽的基本架构。正如图中所示, 数据生成器 (如Facebook,Twitter等)产生它获取通过在其上运行个人代理水槽收集到的数据。此后, 数据收集器 (这也是一个代理)收集从其中被聚合并推入集中存储诸如HDFS或HBase的药剂中的数据。

水槽架构

水槽事件

一个事件是内部水槽传送的数据的基本单元。它包含字节数组,它是对从源到伴随可选的头的目的地运送的有效负载。一个典型的水槽事件将具有以下结构 -

水槽事件

水槽代理

代理是一个独立的守护进程(JVM)的水槽。它接收来自客户或其他试剂中的数据(事件),并将其转发到其下一目的地(信宿或代理)。水槽可能有不止一家代理商。下图表示水槽代理

水槽代理

如在图中所示的水槽代理包含三个主要部件,即, 信道 ,和水槽

资源

是从数据生成器,并将其传送接收数据到一个或多个通道在水槽事件的形式代理的组件。

Apache的水槽支持多种类型的源和每个源从指定数据发生器接收事件。

示例 - Avro的来源,储蓄来源,Twitter的1%等。源

渠道

频道是接收来自光源的事件和缓冲他们,直到他们被消耗汇一过店。它充当源和汇之间的桥梁。

这些通道是完全事务,他们可以用任何数量的源和汇的工作。

示例 - JDBC通道,文件系统的通道,内存通道等。

水槽

一个上的数据存储到HBase的喜欢和HDFS集中存储。它消耗来自信道的数据(事件)并将其传送到目的地。接收器的目标可能是另一种试剂或中央商店。

示例 -沉HDFS

-水槽剂可以有多个源,汇和渠道。我们列出了所有受支持的源,汇渠道在本教程的水槽配置章节。

水槽代理其他组件

我们已经上面讨论是代理的原始的组件。除了这一点,我们有在事件从数据产生传送到所述集中存储发挥重要作用的几个更多的组件。

拦截器

拦截器用于改变/检查这些源和信道之间传送水槽事件。

通道选择器

这些被用来确定哪个信道要被选择到在多个信道的情况下传送数据。有两种类型的信道选择器 -

  • 缺省信道选择器 -这些也被称为复制通道选择他们复制在每个通道中的所有事件。

  • 复用信道选择器 -这些决定发送基于该事件的报头的地址的事件的通道。

沉处理器

这些用于从水槽的选定组调用特定水槽。这些都是用来为您的水槽或通过从通道多汇的负载平衡事件创建故障切换路径。

Apache的水槽 - 数据流

水槽是用于对记录数据移动到HDFS一个框架。通常的事件和日志数据由日志服务器生成与这些服务器具有在其上运行水槽剂。这些试剂从数据发生器接收的数据。

这些代理商的数据将被称为收藏家中间节点进行收集。就像剂,可以在水槽多个收集器。

最后,从所有这些收集的数据将被聚集并推到一个集中存储诸如HBase的或HDFS。下面的图表说明在水槽中的数据流。

数据流水槽

多跳流

在水槽,可以有多个代理,并在到达最终目的地之前,事件可以通过多个代理旅行。这被称为多跳流

扇出流

从一个源到多个频道的数据流被称为扇出流动 。它是两种类型的 -

  • 复制 -其中数据将在所有配置的通道被复制的数据流。

  • 复用 -其中数据将被发送到其在该事件的标题中提到的选定信道的数据流。

扇入流量

在其中的数据将来自许多来源转移到一个信道的数据流被称为扇入流动

故障处理

在水槽,每个事件,两笔交易发生:一个在发送,一个在接收器。发件人将事件发送给接收器。不久接收到数据之后,接收器提交它自己的事务,并发送一个“接收”信号给发送方。接收到信号后,发送者提交其事务。 (直到它接收到来自接收器的信号发送器不会犯其事务)。

Apache的水槽 - 环境

我们已经讨论了水槽的结构在前面的章节。在本章中,让我们看看如何下载和安装Apache的水槽。

在进一步讨论之前,你需要在你的系统中的Java环境。所以首先,确保你已经安装了Java在您的系统。在本教程的一些例子中,我们使用了Hadoop的HDFS(如接收器)。因此,我们建议您去与Java一起安装的Hadoop。为了收集更多的信息,请按照链接- //www.w3cschool.cn/hadoop/hadoop_enviornment_setup.htm

安装水槽

首先,从网站上下载最新版本的Apache水槽软件https://flume.apache.org/

步骤1

打开网站。点击主页左侧的下载链接。它会带你到Apache水槽的下载页面。

安装水槽

第2步

在下载页面中,您可以看到Apache的水槽的二进制和源文件的链接。点击链接Apache的水槽-1.6.0-bin.tar.gz

你会被重定向到镜子在那里你可以通过点击这些镜子开始下载列表。以同样的方式,你可以通过点击下载Apache水槽的源代码Apache的水槽-1.6.0-src.tar.gz

第3步

创建在已安装Hadoop,HBase ,和其他软件的安装目录相同的目录名称水槽目录(如果你已经安装了的话),如下图所示。

$ mkdir Flume 

第4步

解压下载的tar文件,如下图所示。

$ cd Downloads/ 
$ tar zxvf apache-flume-1.6.0-bin.tar.gz  
$ tar zxvf apache-flume-1.6.0-src.tar.gz

第5步

移动apache- 水槽-1.6.0-bin.tar文件到如下图所示前面创建的水槽目录的内容。 (假设我们已经创建了一个名为Hadoop的本地用户的水槽目录)。

$ mv apache-flume-1.6.0-bin.tar/* /home/Hadoop/Flume/

配置水槽

要配置水槽,我们必须修改三个文件,即flume-env.sh,flumeconf.properties和 bash.rc。

设置PATH /类路径

.bashrc文件,设置主文件夹,路径和水槽类路径,如下图所示。

设置路径

conf文件夹

如果打开Apache的水槽的conf文件夹,您将有以下四个文件-

  • 水槽,conf.properties.template,
  • 水槽,env.sh.template,
  • 水槽-env.ps1.template和
  • log4j.properties。
conf文件夹

现在重新命名

  • 水槽-conf.properties.template文件flume-conf.properties

  • 水槽-env.sh.template作为flume-env.sh

flume-env.sh

打开flume-env.sh文件和设置JAVA_HOME到Java是安装在系统中的文件夹。

flume-env.sh

验证安装

通过bin文件夹浏览,然后键入以下命令来验证Apache的水槽的安装。

$ ./flume-ng 

如果您已成功安装水槽,你会得到水槽的帮助提示,如下图所示。

验证安装

Apache的水槽 - 配置

安装水槽后,需要使用配置文件,该文件是具有键值对的Java属性文件来配置它。我们需要的值传递给该文件中的密钥。

在水槽的配置文件,我们需要 -

  • 名称当前代理的组件。
  • 描述/配置源。
  • 描述/配置下沉。
  • 描述/配置通道。
  • 绑定源和宿的频道。

通常我们可以在水槽多个代理。我们可以通过使用唯一的名称区分每个代理。并使用这个名字,我们必须配置每个代理。

命名组件

首先,你需要的名字/列出的组件,如源,汇和代理渠道,如下图所示。

agent_name.sources = source_name 
agent_name.sinks = sink_name 
agent_name.channels = channel_name 

水槽支持各种源,汇和渠道。它们列出在下面给出的表中。

来源通道水槽
  • Avro的来源
  • 节俭来源
  • Exec的来源
  • JMS来源
  • 后台打印目录源
  • Twitter的1%流水来源
  • 卡夫卡来源
  • NetCat的来源
  • 序列发生器源
  • 系统日志源
  • 系统日志TCP源
  • 多端口系统日志TCP源
  • 系统日志UDP源
  • HTTP源
  • 压力源
  • 传统来源
  • 节俭旧式源
  • 自定义源
  • 抄写源
  • 内存通道
  • JDBC通道
  • 卡夫卡通道
  • 文件通道
  • 溢漏内存通道
  • 伪交易频道
  • HDFS水槽
  • 蜂巢水槽
  • 记录仪水槽
  • Avro的水槽
  • 节俭水槽
  • IRC水槽
  • 文件卷水槽
  • 空水槽
  • HBaseSink
  • AsyncHBaseSink
  • MorphlineSolrSink
  • ElasticSearchSink
  • 风筝数据集水槽
  • 卡夫卡水槽

您可以使用其中任何一个。例如,如果你正在传输使用Twitter源通过一个内存通道到HDFS沉Twitter数据,并代理名称ID TwitterAgent,然后

TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS 

列出代理的组件后,必须通过它们的属性值,提供描述源(S),沉(s)和渠道(S)。

描述源

每个来源将有属性的单独列表。命名为“类型”的属性是共同的每个源,它是用来指定我们使用的源的类型。

随着属性“类型”,它是需要提供一个特别的源的所有要求的属性的值来对其进行配置,如下所示。

agent_name.sources. source_name.type = value 
agent_name.sources. source_name.property2 = value 
agent_name.sources. source_name.property3 = value 

例如,如果我们考虑到Twitter的来源 ,以下是属性,这是我们必须提供值来配置它。

TwitterAgent.sources.Twitter.type = Twitter (type name) 
TwitterAgent.sources.Twitter.consumerKey =  
TwitterAgent.sources.Twitter.consumerSecret = 
TwitterAgent.sources.Twitter.accessToken =   
TwitterAgent.sources.Twitter.accessTokenSecret = 

描述水槽

就像源,每个接收器将具有属性的单独列表。命名为“类型”的属性是共同的每片,并且它是用来指定我们正在使用的接收器的类型。随着属性“类型”,它是需要提供值到特定接收器的所有要求的特性,以对其进行配置,如下所示。

agent_name.sinks. sink_name.type = value 
agent_name.sinks. sink_name.property2 = value 
agent_name.sinks. sink_name.property3 = value

例如,如果我们考虑HDFS下沉 ,下面是属性,这是我们必须提供值来配置它。

TwitterAgent.sinks.HDFS.type = hdfs (type name)  
TwitterAgent.sinks.HDFS.hdfs.path = HDFS directory’s Path to store the data

描述这个频道

水槽提供了多种渠道源和汇之间传输数据。因此,与源和通道沿,它是需要来描述在代理所使用的信道。

为了描述每个通道,您需要设置所需的属性,如下图所示。

agent_name.channels.channel_name.type = value 
agent_name.channels.channel_name. property2 = value 
agent_name.channels.channel_name. property3 = value 

例如,如果我们考虑内存通道 ,下面是属性,这是我们必须提供值来配置它。

TwitterAgent.channels.MemChannel.type = memory (type name)

绑定源和宿到Channel

由于通道连接源和汇,它需要两者结合的信道,如下所示。

agent_name.sources.source_name.channels = channel_name 
agent_name.sinks.sink_name.channels = channel_name 

下面的示例演示如何绑定源和汇的渠道。在此,我们认为微型博客Twitter源,内存通道和 HDFS水槽

TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channels = MemChannel 

启动水槽代理

配置后,我们开始水槽代理。它完成如下 -

$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent 

在这里 -

  • 代理 -命令启动水槽剂

  • --conf,-c <CONF> -在conf目录使用配置文件

  • -f <文件> -指定配置文件路径,如果失踪

  • --name,-n <名> - Twitter的代理的名称

  • -D属性=值 -设置Java系统属性值。

Apache的水槽 - 抓取Twitter数据

用水槽,我们可以获取来自不同服务的数据,并运到集中存储(HDFS和HBase的)。本章介绍了如何从Twitter服务获取数据,并使用Apache水槽其存放在HDFS。

如在水槽架构所讨论的,网络服务器产生的日志数据和该数据是通过在水槽的试剂收集。通道缓冲这些数据水槽,最终它推到集中存储。

在这一章中提供的例子中,我们将创建一个应用程序,并得到利用Apache的水槽提供了实验叽叽喳喳源从它的鸣叫。我们将使用内存通道来缓冲这些鸣叫和HDFS下沉到这些推特推入HDFS。

获取数据

获取Twitter的数据,我们必须遵循如下步骤 -

  • 创建一个Twitter应用
  • 安装/启动HDFS
  • 配置水槽

创建一个Twitter应用

为了从Twitter获取鸣叫,它是需要创建一个Twitter的应用程序。按照下面给出创建一个Twitter应用程序的步骤。

步骤1

要创建一个Twitter应用程序,请单击下面的链接https://apps.twitter.com/ 。登录到您的Twitter帐户。你将有一个Twitter应用程序管理窗口,您可以创建,删除和管理Twitter的应用服务。

应用程序管理窗口

第2步

点击创建新的应用程序按钮。你会被重定向到一个窗口,你会得到你必须填写您的详细信息,以创建应用程序申请表。却使网站地址,给出完整的URL模式,例如, http://example.com。

创建应用程序

第3步

填写详细信息,完成后接受开发者协议 ,点击创建你的Twitter应用程序按钮 ,在页面的底部。如果一切顺利,一个应用程序将与给定的细节,如下图所示创建。

应用程序创建

第4步

键,并在页面底部的访问令牌选项卡,可以看到一个按钮和一个名为创建我的访问令牌 。点击它来生成访问令牌。

键访问令牌

第5步

最后,点击测试按钮的OAuth是在页面的右侧上方。这将导致它显示你消费的关键,消费者的秘密,访问令牌一个页面 访问令牌的秘密 。复制这些细节。这些配置代理水槽有用。

OAuth的工具

启动HDFS

由于我们存储HDFS的数据,我们需要安装/验证的Hadoop。启动Hadoop和在其上创建一个文件夹来存储数据的水槽。按照配置水槽前,下面给出的步骤。

第1步:安装/验证的Hadoop

安装Hadoop的 。如果Hadoop是已经安装在系统中,使用Hadoop version命令验证安装,如下图所示。

$ hadoop version 

如果您的系统中包含的Hadoop,如果您已设置PATH变量,那么你会得到下面的输出 -

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop-common-2.6.0.jar

第2步:启动的Hadoop

浏览的Hadoop的sbin目录,并如下图所示启动纱和Hadoop DFS(分布式文件系统)。

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to 
   /home/Hadoop/hadoop/logs/hadoop-Hadoop-secondarynamenode-localhost.localdomain.out
  
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-resourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to 
   /home/Hadoop/hadoop/logs/yarn-Hadoop-nodemanager-localhost.localdomain.out 

第3步:创建HDFS目录

在Hadoop的DFS,您可以创建使用命令的mkdir目录。浏览通过它,并与在所要求的路径名twitter_data创建一个目录,如下所示。

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/user/Hadoop/twitter_data 

配置水槽

我们要配置源,信道,并采用在conf文件夹配置文件下沉。这一章中给出的示例使用阿帕奇水槽提供一个实验源名为Twitter的1%流水内存通道和HDFS下沉。

Twitter的1%流水来源

这个来源是高度实验性的。它连接到使用流API的1%抽样Twitter的流水,不断下载的鸣叫,将其转换为格式的Avro,并将Avro公司事件到下游水槽水槽。

我们将得到这个源在默认情况下安装水槽沿。对应于此源的jar文件可以在lib文件夹位于如下图所示。

Twitter的Jar文件

设置CLASSPATH

CLASSPATH变量设置为水槽的Flume-env.sh文件中的lib文件夹,如下图所示。

export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/* 

这源需要的详细信息,如消费者的关键,消费者的秘密,访问令牌, 访问令牌秘密的Twitter应用。在配置此源,您必须提供值以下属性 -

  • 通道

  • 源类型:org.apache.flume.source.twitter.TwitterSource

  • consumerKey - OAuth用户端密钥

  • consumerSecret - OAuth用户端密钥

  • 的accessToken - OAuth访问令牌

  • accessTokenSecret -的OAuth令牌秘密

  • maxBatchSize - Twitter消息,应该是在叽叽喳喳批次的最大数量。默认值是1000(可选)。

  • maxBatchDurationMillis -毫秒的最大数量为关闭一批前等待。默认值是1000(可选)。

渠道

我们所使用的内存通道。要配置内存通道,你必须向通道的类型提供价值。

  • 类型 -它拥有信道的类型。在我们的例子中,类型为MemChannel。

  • 容量 -它是存储在信道的事件的最大数量。它的默认值是100(可选)。

  • TransactionCapacity -它是信道接收或发送事件的最大数量。它的默认值是100(可选)。

HDFS水槽

此水槽将数据写入HDFS。要配置此片,你必须提供以下详细信息。

  • 渠道

  • 类型 - HDFS

  • hdfs.path -在HDFS的目录中的数据将被存储的路径。

我们可以提供根据脚本一些可选的值。下面给出的是HDFS的可选属性下沉,我们配置在我们的应用程序。

  • 的fileType -这是我们的HDFS文件的所需文件格式。 SequenceFile,的数据流中CompressedStream可与此流的三种类型。在我们的例子中,我们使用数据流

  • writeFormat -可能是文本或可写的。

  • BATCHSIZE -这是之前被冲洗到HDFS写入文件的事件的数量。它的默认值是100。

  • rollsize -这是文件的大小来触发一卷。它的默认值是100。

  • rollCount -它是写入到该文件中被卷之前事件的数目。它的默认值是10。

示例 - 配置文件

给出下面是配置文件的一个例子。复制此内容,并保存在水槽的conf文件夹twitter.conf。

# Naming the components on the current agent. 
TwitterAgent.sources = Twitter 
TwitterAgent.channels = MemChannel 
TwitterAgent.sinks = HDFS
  
# Describing/Configuring the source 
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = Your OAuth consumer key
TwitterAgent.sources.Twitter.consumerSecret = Your OAuth consumer secret 
TwitterAgent.sources.Twitter.accessToken = Your OAuth consumer key access token 
TwitterAgent.sources.Twitter.accessTokenSecret = Your OAuth consumer key access token secret 
TwitterAgent.sources.Twitter.keywords = tutorials point,java, bigdata, mapreduce, mahout, hbase, nosql
  
# Describing/Configuring the sink 

TwitterAgent.sinks.HDFS.type = hdfs 
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/twitter_data/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream 
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text 
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0 
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000 
 
# Describing/Configuring the channel TwitterAgent.channels.MemChannel.type = memory 
TwitterAgent.channels.MemChannel.capacity = 10000 
TwitterAgent.channels.MemChannel.transactionCapacity = 100
  
# Binding the source and sink to the channel 
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel 

执行

通过浏览水槽主目录,如下图所示执行应用程序。

$ cd $FLUME_HOME 
$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf 
Dflume.root.logger=DEBUG,console -n TwitterAgent

如果一切顺利,鸣叫的流进HDFS将启动。下面给出的是撷取鸣叫命令提示符窗口的快照。

取鸣叫

验证HDFS

您可以使用下面给出的URL访问Hadoop的管理Web UI。

http://localhost:50070/ 

点击页面的右侧命名的实用程序的下拉。可以看到两个选项,如下面给出的快照。

验证HDFS

点击浏览该文件系统,并输入您所储存的鸣叫的HDFS目录的路径。在我们的例子中,路径是/用户/ Hadoop的/ twitter_data /。然后,你可以看到存储在HDFS下面给出的微博日志文件的列表。

浏览文件系统

Apache的水槽 - 序列发生器源

在前面的章节中,我们看到了如何从Twitter源数据提取到HDFS。本章介绍了如何来从序列发生器的数据。

先决条件

要运行本章中所提供的例子,你需要与水槽一起安装HDFS。因此,验证Hadoop的安装和进一步处理之前启动HDFS。 (请参考前面的章节,以了解如何启动HDFS)。

配置水槽

我们要配置源,信道,并采用在conf文件夹配置文件下沉。这一章中给出的示例使用序列发生器源内存通道和一个HDFS水槽

序列发生器源

这是连续地产生的事件的来源。它认为从0和递增1开始它被用于测试目的的计数器。在配置此源,您必须提供值以下属性 -

  • 通道

  • 源类型 -序列

渠道

我们所使用的内存通道。要配置内存通道,你必须提供一个值,该通道的类型。下面给出的是,你需要在配置内存通道提供的属性列表 -

  • 类型 -它拥有信道的类型。在我们的例子类型是MemChannel。

  • 容量 -它是存储在信道的事件的最大数量。它的默认值是100(可选)

  • TransactionCapacity -它是信道接收或发送事件的最大数量。它的默认值是100(可选)。

HDFS水槽

此水槽将数据写入HDFS。要配置此片,你必须提供以下详细信息。

  • 渠道

  • 类型 - HDFS

  • hdfs.path -在HDFS的目录中的数据将被存储的路径。

我们可以提供根据脚本一些可选的值。下面给出的是HDFS的可选属性下沉,我们配置在我们的应用程序。

  • 的fileType -这是我们的HDFS文件的所需文件格式。 SequenceFile,的数据流中CompressedStream可与此流的三种类型。在我们的例子中,我们使用数据流

  • writeFormat -可能是文本或可写的。

  • BATCHSIZE -这是之前被冲洗到HDFS写入文件的事件的数量。它的默认值是100。

  • rollsize -这是文件的大小来触发一卷。它的默认值是100。

  • rollCount -它是写入到该文件中被卷之前事件的数目。它的默认值是10。

示例 - 配置文件

给出下面是配置文件的一个例子。复制此内容,并保存在水槽的conf文件夹seq_gen的.conf。

# Naming the components on the current agent 

SeqGenAgent.sources = SeqSource   
SeqGenAgent.channels = MemChannel 
SeqGenAgent.sinks = HDFS 
 
# Describing/Configuring the source 
SeqGenAgent.sources.SeqSource.type = seq
  
# Describing/Configuring the sink
SeqGenAgent.sinks.HDFS.type = hdfs 
SeqGenAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/user/Hadoop/seqgen_data/
SeqGenAgent.sinks.HDFS.hdfs.filePrefix = log 
SeqGenAgent.sinks.HDFS.hdfs.rollInterval = 0
SeqGenAgent.sinks.HDFS.hdfs.rollCount = 10000
SeqGenAgent.sinks.HDFS.hdfs.fileType = DataStream 
 
# Describing/Configuring the channel 
SeqGenAgent.channels.MemChannel.type = memory 
SeqGenAgent.channels.MemChannel.capacity = 1000 
SeqGenAgent.channels.MemChannel.transactionCapacity = 100 
 
# Binding the source and sink to the channel 
SeqGenAgent.sources.SeqSource.channels = MemChannel
SeqGenAgent.sinks.HDFS.channel = MemChannel 

执行

通过浏览水槽主目录,如下图所示执行应用程序。

$ cd $FLUME_HOME 
$./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/seq_gen.conf 
   --name SeqGenAgent 

如果一切正常,源开始产生,这将在日志文件的形式推入HDFS序号。

下面给出的是命令提示符窗口取由序列生成到HDFS产生的数据的快照。

数据生成

验证HDFS

您可以通过以下网址访问Hadoop的管理Web UI -

http://localhost:50070/

点击页面的右侧命名的实用程序的下拉。你可以看到两个选项,如图下面给出的图所示。

验证HDFS

点击浏览该文件系统,并输入您已存储的序列发生器产生的数据的HDFS目录的路径。

在我们的例子中,路径是/用户/ Hadoop的/ seqgen_data /。然后,可以看到,由序列发生器生成的日志文件的列表中,存储在HDFS下面给出。

浏览文件系统

验证文件的内容

所有这些日志文件包含连续数字的格式。可以验证这些文件的内容在使用cat命令如下所示文件系统。

验证文件的内容

Apache的水槽 - NetCat的来源

本章以一个例子来解释如何生成事件,随后他们登录到控制台。为此,我们使用的是NetCat的源和汇记录

先决条件

要运行本章中所提供的例子,你需要安装水槽

配置水槽

我们要配置源,信道,并采用在conf文件夹配置文件下沉。这一章中给出的示例使用NetCat的来源,内存通道和一个记录片

NetCat的来源

在配置NetCat的来源,我们必须在配置源指定端口。现在源(NetCat的源)监听给定的端口和接收我们在该端口输入为通过指定的信道的个人事件,并将其转移到接收器的每一行。

在配置此源,您必须提供值以下属性 -

  • 渠道

  • 源类型 - netcat的

  • 绑定 -主机名或IP地址进行绑定。

  • 端口 -端口号,这是我们希望的来源听。

渠道

我们所使用的内存通道。要配置内存通道,你必须提供一个值,该通道的类型。下面给出的是,你需要在配置内存通道提供的属性列表 -

  • 类型 -它拥有信道的类型。在我们的例子中,类型为MemChannel。

  • 容量 -它是存储在信道的事件的最大数量。它的默认值是100(可选)

  • TransactionCapacity -它是信道接收或发送事件的最大数量。它的默认值是100(可选)。

记录仪水槽

此片记录传递给它的所有事件。一般地,它是用于测试或调试目的。要配置此片,你必须提供以下详细信息。

  • 渠道

  • 类型 -记录仪

示例配置文件

给出下面是配置文件的一个例子。复制此内容,并保存在水槽的conf文件夹netcat.conf。

# Naming the components on the current agent
NetcatAgent.sources = Netcat   
NetcatAgent.channels = MemChannel 
NetcatAgent.sinks = LoggerSink  

# Describing/Configuring the source 
NetcatAgent.sources.Netcat.type = netcat 
NetcatAgent.sources.Netcat.bind = localhost
NetcatAgent.sources.Netcat.port = 56565  

# Describing/Configuring the sink 
NetcatAgent.sinks.LoggerSink.type = logger  

# Describing/Configuring the channel 
NetcatAgent.channels.MemChannel.type = memory 
NetcatAgent.channels.MemChannel.capacity = 1000 
NetcatAgent.channels.MemChannel.transactionCapacity = 100 
 
# Bind the source and sink to the channel 
NetcatAgent.sources.Netcat.channels = MemChannel
NetcatAgent.sinks. LoggerSink.channel = MemChannel

执行

通过浏览水槽主目录,如下图所示执行应用程序。

$ cd $FLUME_HOME
$ ./bin/flume-ng agent --conf $FLUME_CONF --conf-file $FLUME_CONF/netcat.conf 
   --name NetcatAgent -Dflume.root.logger=INFO,console

如果一切顺利,源开始听给定端口。在这种情况下,它是56565。下面给出的是一个已经开始,侦听的端口56565一NetCat的源的命令提示符窗口的快照。

执行

数据传递到源

将数据传递给NetCat的来源,你必须打开配置文件中指定的端口。打开一个单独的终端连接到使用curl命令源(56565)。当连接成功后,你会得到一个消息,“ 连接 ”,如下图所示。

$ curl telnet://localhost:56565 
connected 

现在,您可以在线输入你的数据线(每行之后,你必须按Enter键)。该NetCat的源接收的每一行作为一个单独的事件,你会得到一个收到的消息“OK”。

每当你与传球的数据完成的,可以按(;ç按Ctrl&加 )退出控制台。下面给出的是我们已连接到使用curl命令源控制台的快照。

传递数据

即在上述的控制台输入的每个线将接收由源的个人事件。由于我们使用的记录片,这些事件将通过指定通道(在这种情况下,内存通道)登录到控制台(来源控制台)。

以下快照显示了NetCat的控制台所在的事件。

NetCat的控制台
阿帕奇水槽教程
Apache的水槽有用资源
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }