![Apache Flume Tutorial](/apache_flume/images/flume-mini-logo.jpg)
- Apache Flume 教程
- Apache Flume - 首页
- Apache Flume - 简介
- Hadoop中的数据传输
- Apache Flume - 架构
- Apache Flume - 数据流
- Apache Flume - 环境
- Apache Flume - 配置
- Apache Flume - 获取Twitter数据
- 序列生成器Source
- Apache Flume - NetCat Source
- Apache Flume 资源
- Apache Flume - 快速指南
- Apache Flume - 有用资源
- Apache Flume - 讨论
Apache Flume - 获取Twitter数据
使用Flume,我们可以从各种服务获取数据并将其传输到集中式存储(HDFS和HBase)。本章解释如何从Twitter服务获取数据并使用Apache Flume将其存储到HDFS中。
如Flume架构中所述,Web服务器生成日志数据,Flume中的代理会收集这些数据。通道将这些数据缓冲到接收器,接收器最终将其推送到集中式存储。
在本节提供的示例中,我们将创建一个应用程序,并使用Apache Flume提供的实验性Twitter源来获取其中的推文。我们将使用内存通道来缓冲这些推文,并使用HDFS接收器将这些推文推送到HDFS中。
![Fetch Data](/apache_flume/images/fetch_data.jpg)
要获取Twitter数据,我们必须按照以下步骤操作:
- 创建一个Twitter应用程序
- 安装/启动HDFS
- 配置Flume
创建Twitter应用程序
为了从Twitter获取推文,需要创建一个Twitter应用程序。请按照以下步骤创建Twitter应用程序。
步骤1
要创建一个Twitter应用程序,请点击以下链接 https://apps.twitter.com/。登录您的Twitter帐户。您将看到一个Twitter应用程序管理窗口,您可以在其中创建、删除和管理Twitter应用程序。
![Application Management window](/apache_flume/images/application_management_window.jpg )
步骤2
点击创建新的应用按钮。您将被重定向到一个窗口,其中包含一个应用程序表单,您必须在其中填写您的详细信息才能创建应用程序。填写网站地址时,请提供完整的URL模式,例如 http://example.com。
![Create an Application](/apache_flume/images/create_an_application.jpg)
步骤3
填写详细信息,完成后接受开发者协议,点击页面底部的创建您的Twitter应用程序按钮。如果一切顺利,将创建一个具有以下所示详细信息的应用程序。
![Application created](/apache_flume/images/application_created.jpg)
步骤4
在页面底部的密钥和访问令牌选项卡下,您可以看到一个名为创建我的访问令牌的按钮。点击它以生成访问令牌。
![Key Access Tokens](/apache_flume/images/key_access_tokens.jpg)
步骤5
最后,点击页面右侧顶部的测试OAuth按钮。这将链接到一个页面,该页面显示您的Consumer key、Consumer secret、Access token和Access token secret。复制这些详细信息。这些信息对于配置Flume中的代理很有用。
![OAuth Tool](/apache_flume/images/oauth_tool.jpg)
启动HDFS
由于我们将数据存储在HDFS中,因此我们需要安装/验证Hadoop。启动Hadoop并在其中创建一个文件夹以存储Flume数据。在配置Flume之前,请按照以下步骤操作。
步骤1:安装/验证Hadoop
安装 Hadoop。如果您的系统中已安装Hadoop,请使用Hadoop版本命令验证安装,如下所示。
$ hadoop version
如果您的系统包含Hadoop,并且您已设置路径变量,则将获得以下输出:
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目录,并启动yarn和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://127.0.0.1:9000/user/Hadoop/twitter_data
配置Flume
我们必须使用conf文件夹中的配置文件来配置源、通道和接收器。本章中提供的示例使用Apache Flume提供的名为Twitter 1% Firehose的实验性源、内存通道和HDFS接收器。
Twitter 1% Firehose Source
此源高度实验性。它使用流式API连接到1%的样本Twitter Firehose,并持续下载推文,将其转换为Avro格式,并将Avro事件发送到下游Flume接收器。
安装Flume后,我们将默认获得此源。与此源对应的jar文件位于lib文件夹中,如下所示。
![Twitter Jar Files](/apache_flume/images/twitter_jarfiles.jpg)
设置classpath
将classpath变量设置为Flume-env.sh文件中Flume的lib文件夹,如下所示。
export CLASSPATH=$CLASSPATH:/FLUME_HOME/lib/*
此源需要诸如Consumer key、Consumer secret、Access token和Access token secret之类的Twitter应用程序详细信息。配置此源时,您必须为以下属性提供值:
通道
源类型:org.apache.flume.source.twitter.TwitterSource
consumerKey - OAuth消费者密钥
consumerSecret - OAuth消费者密钥
accessToken - OAuth访问令牌
accessTokenSecret - OAuth令牌密钥
maxBatchSize - Twitter批次中应包含的最大Twitter消息数。默认值为1000(可选)。
maxBatchDurationMillis - 关闭批次之前要等待的最大毫秒数。默认值为1000(可选)。
通道
我们使用内存通道。要配置内存通道,您必须为通道类型提供值。
type - 它保存通道的类型。在我们的示例中,类型为MemChannel。
Capacity - 存储在通道中的最大事件数。其默认值为100(可选)。
TransactionCapacity - 通道接受或发送的最大事件数。其默认值为100(可选)。
HDFS接收器
此接收器将数据写入HDFS。要配置此接收器,您必须提供以下详细信息。
通道
type - hdfs
hdfs.path - 要存储数据的HDFS中目录的路径。
我们可以根据场景提供一些可选值。以下是我们在应用程序中配置的HDFS接收器的可选属性。
fileType - 这是我们的HDFS文件的所需文件格式。SequenceFile、DataStream和CompressedStream是此流提供的三种类型。在我们的示例中,我们使用DataStream。
writeFormat - 可以是文本或可写入的。
batchSize - 在将文件刷新到HDFS之前写入文件事件的数量。其默认值为100。
rollsize - 触发滚动操作的文件大小。其默认值为100。
rollCount - 在文件滚动之前写入文件中的事件数。其默认值为10。
示例 - 配置文件
以下是配置文件示例。复制此内容并将其另存为Flume的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://127.0.0.1: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
执行
浏览Flume主目录并执行应用程序,如下所示。
$ cd $FLUME_HOME $ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf Dflume.root.logger=DEBUG,console -n TwitterAgent
如果一切顺利,推文流式传输到HDFS将开始。以下是获取推文时命令提示符窗口的快照。
![Fetching Tweets](/apache_flume/images/fetching_tweets.jpg)
验证HDFS
您可以使用以下URL访问Hadoop管理Web UI。
https://127.0.0.1:50070/
点击页面右侧的实用工具下拉菜单。您可以看到以下快照中所示的两个选项。
![Verifying HDFS](/apache_flume/images/verifying_the_hdfs.jpg)
点击浏览文件系统,然后输入已存储推文的HDFS目录的路径。在我们的示例中,路径将为/user/Hadoop/twitter_data/。然后,您可以看到存储在HDFS中的Twitter日志文件列表,如下所示。
![Browse the file system](/apache_flume/images/browse_file_system.jpg)