flume 抽取图片文件数据写入到HDFS

flume 是一个日志处理的工具,其擅长处理文本数据。不过在有些使用场景,比如采集服务器上的很多小的图片数据时,也可以派上用场。
话不多说,直接上flume-conf配置信息:

# ==== start ====
agent.sources = spooldirsource
agent.channels = memoryChannel
agent.sinks = hdfssink

# For each one of the sources, the type is defined
agent.sources.spooldirsource.type = spooldir

# The channel can be defined as follows.
agent.sources.spooldirsource.channels = memoryChannel

agent.sources.spooldirsource.spoolDir = /data/mcmin/imgfiles

agent.sources.spooldirsource.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder

agent.sources.spooldirsource.deserializer.maxBlobLength = 100000000

# Each sink's type must be defined
agent.sinks.hdfssink.type = hdfs

#Specify the channel the sink should use
agent.sinks.hdfssink.channel = memoryChannel

# ns1 是高可用地址 
# /%Y/%m/%d 根据日期动态写目录
agent.sinks.hdfssink.hdfs.path = hdfs://ns1/mcmin/%Y/%m/%d

agent.sinks.hdfssink.hdfs.useLocalTimeStamp = true

agent.sinks.hdfssink.hdfs.fileSuffix = .jpg

agent.sinks.hdfssink.hdfs.fileType = DataStream

# Each channel's type is defined.
agent.channels.memoryChannel.type = memory

# Other config values specific to each type of channel(sink or source)
# can be defined as well
# In this case, it specifies the capacity of the memory channel
agent.channels.memoryChannel.capacity = 100000

# ==== end ====

这里的需要注意的有两点:
1: spooldirsource的deserializer 声明为org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
2: hdfs sink 的 fileType 要声明为 DataStream

这里,flume的spooldirsource把每一个图片文件,都封装成一个单独event,不跟处理文本数据一样(文本数据是把文本的每一行内容都封装成一个event)。而且他是把这些event缓存在内存中,所以,当一次性处理大量图片文件或者说图片大小较大时,容易撑爆内存。这是需要注意的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将RabbitMQ中的数据写入HDFS中,可以使用Flume来实现。Flume是一个分布式、可靠、高可用的日志收集和聚合系统,支持从多个数据源(包括RabbitMQ)获取数据,并将数据写入到多个目的地(包括HDFS)中。 下面是一个使用Flume读取RabbitMQ数据写入HDFS的简单示例: 1. 安装RabbitMQ和Flume 首先需要安装RabbitMQ和Flume,可参考官方文档进行安装。 2. 配置RabbitMQ 需要在RabbitMQ中创建一个Exchange和一个Queue,并将它们绑定在一起。这样当有消息到达Exchange时,会被路由到Queue中。 3. 配置Flume 需要创建一个Flume配置文件,指定RabbitMQ作为数据源,HDFS作为目的地,并定义数据的格式和转换规则。 示例配置文件如下: ``` # Name the components on this agent agent.sources = rabbitmq-source agent.sinks = hdfs-sink agent.channels = memory-channel # Describe/configure the source agent.sources.rabbitmq-source.type = org.apache.flume.source.rabbitmq.RabbitMQSource agent.sources.rabbitmq-source.uri = amqp://guest:guest@localhost:5672 agent.sources.rabbitmq-source.queue = my-queue # Describe the sink agent.sinks.hdfs-sink.type = hdfs agent.sinks.hdfs-sink.hdfs.path = hdfs://localhost:9000/flume/rabbitmq-data/ agent.sinks.hdfs-sink.hdfs.fileType = DataStream agent.sinks.hdfs-sink.hdfs.writeFormat = Text # Use a channel which buffers events in memory agent.channels.memory-channel.type = memory # Bind the source and sink to the channel agent.sources.rabbitmq-source.channels = memory-channel agent.sinks.hdfs-sink.channel = memory-channel ``` 上述配置文件中,我们定义了一个名为“rabbitmq-source”的数据源,使用RabbitMQSource来接收来自RabbitMQ的数据。然后,我们定义了一个名为“hdfs-sink”的目的地,使用HDFS Sink将数据写入HDFS中。最后,我们定义了一个名为“memory-channel”的通道,用于缓存事件。 4. 启动Flume 使用以下命令启动Flume: ``` $ bin/flume-ng agent -n agent -c conf -f conf/flume.conf ``` 其中,`-n`指定代理的名称,`-c`指定配置文件目录,`-f`指定配置文件路径。 5. 测试 向RabbitMQ发送一些消息,可以通过以下命令查看HDFS中是否成功写入数据: ``` $ bin/hadoop fs -cat /flume/rabbitmq-data/* ``` 注意:这只是一个简单的示例,实际应用中需要根据具体情况进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值