作者: 【美】Jonathan R. Owens , Jon Lentz , Brian Femiano
Apache Flume是Hadoop社区的一个项目,由多个相关项目组成,用于从不同的数据源可靠有效地加载数据流到HDFS中。Flume最常见的一个场景是加载多个数据源的网站日志数据。本节将介绍如何使用Flume加载数据到HDFS中。
准备工作
在本节中假定你已经安装和配置好Flume。
如果你使用的是CDH3,那么默认已经安装了Flume 0.9.4+25.43的版本。
操作步骤
完成下面的步骤,实现将weblogs数据导入HDFS。
1.使用dump命令测试Flume是否配置正确:
flume dump 'text("/path/to/weblog_entries.txt")'
2.通过Flume shell执行一个配置:
flume shell -c: -e 'exec config text("/path/to/
weblog_entries.txt") | collectorSink("hdfs://:/
data/weblogs/flume")'
工作原理
Flume包含Sources8和Sinks9两个抽象概念,并通过管状的数据流将它们合并在一起。在这个例子中,数据来源是text方式,将文件路径作为参数,并将该文件中的内容发送到配置的数据输出端。dump命令使用控制台为数据输出端。按照这样的配置,weblog_entries.txt文件的内容以text的方式被读取,同时被写到控制台。
在步骤2中,使用了Flume shell配置并执行一个作业。-c参数告诉了Flume Master节点的连接地址。Flume将会执行–e参数后面的命令。如前所述,text是一种读取所传文件中所有内容的数据源。collectorSink是一个数据去向,可以传给本地文件系统路径或者HDFS文件系统路径。在前面这个例子中,我们传递的是一个HDFS的路径。这个命令执行的效果会将weblog_entries.txt导入HDFS中。
更多参考
Flume提供了几个预定义的Source和Sink。下面是一些基本的数据源。
null:不读取任何数据。
stdin:读入一个标准的输入流。
rpcSource:读取Thrift或者Avro RPC。
text:读取一个文件中的内容。
tail:读取一个文件,并保持文件打开状态用于持续读取追加到文件中的数据
下面是一些基本的Sink。
null:将数据丢弃,不进行写操作。
collectorSink:写到一个本地文件系统或者HDFS上。
console:写到控制台。
formatDfs:写到HDFS并带一定的格式,如序列化文件、Avro、Thrift等。
rpcSink:写给Thrift或者Avro RPC。
1即席查询是用户根据自己的需求,灵活地选择查询条件,系统能够根据用户的选择生成相应的统计报表。
2原文是针对Hadoop 0.20.0 的版本,对目前来说该版本已经很老,Hadoop 1.0 以上的版本put已经可以对文件夹进行复制。
3 Hadoop 0.20.2以上已经支持不同版本间的distcp复制了。——译者注
4“只有map”表示一个作业只启动map阶段没有启动reduce阶段。
5Hadoop ftp文件系统。
6保证MySQL与Hadoop集群中的每个节点间网络是相通的。
7$SQOOP_HOME为SQOOP的安装目录。