codecamp

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的配置水槽
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; }