如果数据是在MySQL中的话,需要用到Sqoop工具将数据导入大数据平台。如果是日志类型的日志,需要用到Flume导入大数据平台。
Flume是一个分布式、 基于流式数据。Flume的灵魂(Agent)就是采集(source)、聚合(channel)、转移(sink)。对于Flume只需要会配置,并不需要(或者很少)需要自己开发代码。Flume在CDH中是更改过的,使用的是1.6.0版本,所以不能参考官网的文档,所以要参考cdh文档(http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/)。
一、配置
老规矩,解压,添加环境变量。
解压:
tar -zxvf flume-ng-1.6.0-cdh5.7.0.tar.gz -C ../app/
归属:
sudo chown -R hadoop:hadoop apache-flume-1.6.0-cdh5.7.0-bin/
添加环境变量:
vim ~/.bash_profile
#FLUME
export FLUME_HOME=/home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin
export PATH=$FLUME_HOME/bin:$PATH
source ~/.bash_profile
配置比较简单,就是在${FLUME_HOME}/conf/下设置flume-env.sh,添加java_home。
cp flume-env.sh.template flume-env.sh
flume-env.sh文件添加:
export JAVA_HOME=/usr/java/jdk1.8.0_45
二、使用
Flume的agent配置在配置文件中,启动命令flume-ng,配置上配置文件的参数,指定agent,就可以按照事先配好的agent进行工作了。
flume-ng agent \
--name $agent_name \ //指定agent的名称
--conf ${FLUME_HOME}/conf \ //指定通用配置文件的目录
--conf-file ${config} \ //指定的agnet的配置文件
-Dflume.root.logger=INFO,console \ //Log日志输出
-Dflume.monitoring.type=http \ //flume监控相关
-Dflume.monitoring.port=34343 //flume监控相关
${FLUME_HOME}/conf用来指定通用的配置文件夹的地址,${config}用来配置当前项目的配置文件的地址。
三、agnet配置
上面提到特殊项目特殊配置agent。下面这个就是配置agent的flume-example.conf文件。
#模板-> <agent_name>.sources=<source1_name> <source2_name>....
a1.sources = r1
#模板-> <agent_name>.sinks=<sink1_name> <sink2_name>....
a1.sinks = k1
#模板-> <agent_name>.channels=<channel1_name> <channel2_name>....
a1.channels = c1
# Describe/configure the source
#模板-> <agent_name>.sources.<source_name>.[params] = [values]
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
#模板-> <agent_name>.sinks.<sink_name>.[params] = [values]
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
#模板-> <agent_name>.channels.<channel_name>.[params] = [values]
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
#模板-> <agent_name>.sources.<source_name>.channels = <channel2_name> <channel2_name> ...
a1.sources.r1.channels = c1
#模板-> <agent_name>.sinks.<sink_name>.channel = <channel_name>
a1.sinks.k1.channel = c1
由以上的配置的信息知道,一个agent中可以有很多的source、channel、sink,其中source、channel应该是可以多对多,但是sink、channel只能一对一。
四、常用
4.1 常用source
名称 | 含义 | 注意点 |
---|---|---|
avro | avro协议的数据源 | |
exec | unix命令 | 可以命令监控文件 tail -F |
spooldir | 监控一个文件夹 | 不能含有子文件夹,不监控windows文件夹 处理完文件不能再写数据到文件 文件名不能冲突 |
TAILDIR | 既可以监控文件也可以监控文件夹 | 支持断点续传功能,重点使用这个 |
netcat | 监听某个端口 | |
kafka | 监控卡夫卡数据 |
4.2 常用sink
名称 | 含义 | 注意点 |
---|---|---|
kafka | 写到kafka中 | |
HDFS | 将数据写到HDFS中 | |
logger | 输出到控制台 | |
avro | avro协议 | 配合avro source使用 |
4.3 常用channel
名称 | 含义 | 注意点 |
---|---|---|
memory | 存在内存中 | |
kafka | 将数据存到kafka中 | |
file | 存在本地磁盘文件中 |