Flume安装配置以及参数详解

Flume安装配置以及参数详解

  • 一、Flume基本概念:
  • 二、Flume基本结构:
  • 三、Flume的安装配置:
  • 四、数据传输的配置:
  • 五、使用Flume过程中遇到的问题:

一、Flume基本概念:

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0。9X版本的统称Flume-og,Flume1。X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

二、Flume基本结构:

Agent主要由:source,channel,sink三个组件组成。
Source:
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等
Channel:
channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发的时候的一致性。 并且它可以和任意数量的source和sink链接。 支持的类型有: JDBC channel , File System channel , Memort channel等。
sink:
sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地。 目标地可能是另一个sink,也可能HDFS,HBase。

三、Flume的安装配置:

1、打开Flume官网http://flume.apache.org/download.html,下载Flume的压缩包apache-flume-1.9.0-bin.tar.gz。
2、将apache-flume-1.9.0-bin.tar.gz压缩包上传至Linux服务器。
3、解压命令tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /路径/。
4、重命名文件名命令mv apache-flume-1.9.0-bin flume。
5、由于Linux服务器配置了全局的jdk环境变量,所以不用更改Flume的配置文件,会自动读取。
(配置全局的jdk环境变量:
①、下载jdk的tar包。
②、赋予用户可读可写权限:sudo chmod -R 777 /usr/lib/java。
③、将jdk压缩包上传至服务器/usr/lib/java目录下。
④、进入该目录,解压jdk压缩包tar -zxvf jdk-8u172-linux-x64.tar.gz。
⑤、打开Linux下的配置文件:vim /etc/profile。
⑥、export JAVA_HOME=/usr/lib/java/jdk1.8.0_172
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar)
6、在Flume目录下创建job文件夹,用来存放自己创建的配置文件。

四、数据传输的配置:

# example.conf: A single-node Flume configuration

	# 1688-goods-agent
	# 设置sources的数据来源,可以是多个,当前电商多个平台配置使用该方法
	agent.sources = 1688-goods-source 
	# 设置sinks的传输管道,可以是多个,当前电商多个平台配置使用该方法
	# 一个source可以绑定多个channel,当前电商配置一个source绑定一个channel
	agent.sinks = 1688-goods-sink 
	# 设置channels的数据沉淀,可以是多个,电商多个平台配置使用该方法
	# 一个sink只能绑定一个channel,当前电商配置使用该方法
	agent.channels = 1688-goods-channel 

	# Describe/configure the source
	# 指定数据来源的模式,采用监听某个目录,有新文件就会被监听到
	agent.sources.1688-goods-source.type = spooldir
	# 定义监控的目录
	agent.sources.1688-goods-source.spoolDir= /root/csv/goods/1688/201907
	# 定义文件上传完的后缀标记为
	agent.sources.1688-goods-source.fileSuffix= .COMPLETED
	# 在header中添加文件的完整路径信息
	agent.sources.1688-goods-source.fileHeader = true
	# 只允许上传后缀为.csv的文件
	agent.sources.1688-goods-source.includePattern = ([^ ]*\.csv$)
	# 忽略所有以.tmp结尾的文件,不上传
	agent.sources.1688-goods-source.ignorePattern = ([^ ]*\.tmp)
	# 在header中添加文件的基本名称信息
	agent.sources.1688-goods-source.basenameHeader = true
	# 如果header中添加文件的基本名称信息时,key的名称,实现上传文件,文件名不变
	agent.sources.1688-goods-source.basenameHeaderKey = fileName

	# 拦截器列表,时间戳拦截器,暂时不使用
	agent.sources.1688-goods-source.interceptors = i1
	agent.sources.1688-goods-source.interceptors.i1.type = timestamp

	# Describe the sink
	# 沉淀数据的类型可为Log Sink,HDFS Sink,Avro Sink,Kafka Sink,电商数据传输使用hdfs sink
	agent.sinks.1688-goods-sink.type = hdfs
	# hdfs的路径
	agent.sinks.1688-goods-sink.hdfs.path = hdfs://hadoop-cluster/csv/goods/1688/201907
	# 上传文件前缀
	agent.sinks.1688-goods-sink.hdfs.filePrefix = %{fileName}
	# 是否使用本地时间戳
	agent.sinks.1688-goods-sink.hdfs.useLocalTimeStamp = true
	# 积攒多少个event才flush到HDFS一次
	agent.sinks.1688-goods-sink.hdfs.batchSize = 1
	# 写 sequence 文件的格式
	agent.sinks.1688-goods-sink.hdfs.writeFormat = text
	# 设置文件类型,可支持压缩
	agent.sinks.1688-goods-sink.hdfs.fileType = DataStream
	# 间隔多长将临时文件滚动成最终目标文件,设置为0,不起作用
	agent.sinks.1688-goods-sink.hdfs.rollInterval = 0
	# 设置每个文件的滚动大小,达到改大小新建一个文件存储
	agent.sinks.1688-goods-sink.hdfs.rollSize = 20737418240
	# 文件的滚动与event数量无关
	agent.sinks.1688-goods-sink.hdfs.rollCount = 0

	# Use a channel which buffers events in memory
	# 类型为memory,内存传输速率快,当时agent挂掉,数据会丢失。
	agent.channels.1688-goods-channel.type = memory
	#  存储在channel中的最大容量
	agent.channels.1688-goods-channel.capacity = 1000
	# 从一个source中取或者给一个sink,每个事务中最大的事件数
	agent.channels.1688-goods-channel.transactionCapacity = 100

	# Bind the source and sink to the channel
	# sources与channel绑定
	agent.sources.1688-goods-source.channels = 1688-goods-channel
	# # sink与channel绑定
	agent.sinks.1688-goods-sink.channel = 1688-goods-channel

编写启动Flume服务的脚本:

#! /bin/bash 

	num=`ps -ef|grep java|grep flume|wc -l`
		if [ "$num" = "0" ];then
			`cd usr/local/flume/bin`
			`flume-ng agent --conf conf --conf-file ../usr/local/flume/job/dianshang-spooldir-hdfs.conf --name agent`
		else
			exit 0
		fi

五、使用Flume过程中遇到的问题:

1、需要实现多个目录共同的监听,并且每个文件上传到各自指定的目录。
解决情况:已经解决。将所有配置目录的监听写在一个配置文件中,只需要启动一个Flume服务,就可以同时实现监听多个目录。
2、监听多个目录,每月会更改日期201907目录的配置,暂时只能手动更改。
解决情况:暂未解决。
3、停止Flume的服务操作,暂时只能使用强制停止,Ctrl + C。
解决情况:暂未解决。
4、上传至hdfs目录下的文件,会自动添加时间戳后缀
解决情况:暂未解决。
5、Flume未进行大批量、大文件数据的测试,本次使用Flume传输,还需核对上传数据的完整性。
解决情况:还未进行。

温馨提示:该文章为本人自己创作,转载请标明出处。感谢各位!!!谢谢大家!!!
本人联系方式:
QQ:961094233
邮箱:[email protected]

你可能感兴趣的:(大数据,flume,服务器,HDFS)