Flume的写法

Flume的写法

1.配置文件

现在我们明白了,Flume就是用来采集数据,Source将采集的数据封装成一个个的事件event对象进行传输,这些事件首先缓存在Channel中(Channel Memory, Channel File) 两种Channel的方式,然后Sink从Channel中主动拉取数据,并将数据发送到指定的位置(可以是HDFS, Kafka…)。

所以,我们怎么写一个Flume呢,也就是数据采集。其实就是一个配置文件,我们需要考虑的四个东西也就是flume基本组成架构。Agent,Source,Channel,Sink

注:配置文件写法来源于官方手册http://flume.apache.org/FlumeUserGuide.html

我么可以根据官方手册,来写我们的配置文件,官网是规范示范。

在这里插入图片描述

1.首先我们需要给我们Agent中组件和自己命名,a1 Agent , r1 sources , k1 sinks , c1 channels

2.我们需要设置source,从哪里接收数据。数据输入源端口类型,主机号,端口号,这样source就相当于连接上了数据来源,可以采集数据了。

3.设置Sink 输出

4.设置channel

5.将source,channel,sink连接起来。

2.实时监控单个追加文件,上传到hdfs

exec-flume-hdfs.conf

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -f /opt/module/flume-1.9.0/datas/hive.log

#tail -f 操作就是监控这个文件内容的增加,一旦这个文件执行了追加操作,就会将追加的数据,发送到HDFS上

#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件,60S
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1 

注意:tail -f 操作就是监控这个文件内容的增加,一旦这个文件执行了追加操作,就会将追加的数据,发送到HDFS上。

启动Flume,执行这个配置文件的指令: 没有配置路径,所以在 /opt/module/flume-1.9.0/ 执行,因为指令在这个路径下的 bin路径里面。

bin/flume-ng agent -c conf -f datas/exec-flume-hdfs.conf -n a1 因为我们的配置文件写在datas里。

bin/flume-ng agent -c conf -f datas/exec-flume-hdfs.conf -n a1 -Dflume.root.logger=INFO,console 将日志打印到 linux 操作台。

3.监控文件夹下,新文件的增加操作

spool-flume-hdfs.conf

#也就是说,当被监控的文件夹里,增加了一个新文件是,这个新文件就会被存储到HDFS中,随后这个文件就会被打上 file.COMPLETED的标签,flume通过监控文件名,来判断是否需要上传。

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /opt/module/flume-1.9.0/datas/spoolDir
a1.sources.r1.fileSuffix = .COMPLETED
a1.sources.r1.ignorePattern = ([^ ]*\.tmp)

#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1

4.监控文件加下,多个文件的执行的追加操作

taildir-flume-hdfs.conf 监视某个文件夹下的已有文件中的内容,每次文件中内容添加,就会同步到hdfs中去

#各个组件命名
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/module/flume-1.9.0/datas/position/position.json
a1.sources.r1.filegroups = f1
#a1.sources.r1.filegroups = f1 f2  或者直接写成这种格式,一个f1 代表file1 f2代表file2
#可以用正则表达式来定义文件名,文件名中包含file都监视
a1.sources.r1.filegroups.f1 = /opt/module/flume-1.9.0/datas/taildir/.*file.*

#a1.sources.r1.filegroups.f2 = /opt/module/flume-1.9.0/datas/taildir/file1.txt
#a1.sources.r1.filegroups.f2 = /opt/module/flume-1.9.0/datas/taildir/file2.txt


#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100

#Sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/%Y%m%d/%H
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
##是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
##多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
##重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour
##是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
##积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
##设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream
##多久生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 60
##设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
##文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

#组合 绑定
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1


![在这里插入图片描述](https://img-blog.csdnimg.cn/20200824205621190.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dpbGxpYW1jY2M=,size_16,color_FFFFFF,t_70#pic_center)

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值