使用flume将hadoop源本地文件发送到hdfs接收器

8fsztsew  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(376)

我正在使用flume将本地文件源文件发送到hdfs接收器,下面是我的配置:


# Name the components on this agent

a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source

a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /usr/download/test_data/
a1.sources.r1.basenameHeader = true
a1.sources.r1.basenameHeaderKey = fileName

# Describe the sink

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://172.16.10.5/user/admin/Data/
a1.sinks.k1.hdfs.filePrefix = %{fileName}
a1.sinks.k1.hdfs.idleTimeout=60

# Use a channel which buffers events in memory

a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 5000

# Bind the source and sink to the channel

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

我使用用户flume来执行这个conf文件。

time bin/flume-ng agent -c conf -f conf/hdfs_sink.conf -n a1 -Dflume.root.logger=INFO,console

但它显示我找不到本地文件,权限被拒绝

Could not find file: /usr/download/test_data/sale_record0501.txt
java.io.FileNotFoundException: /usr/download/test_data/.flumespool/.flumespool-main.meta (Permission denied)

如何解决这个问题?

ni65a41a

ni65a41a1#

你的 flume 用户可能没有假脱机目录下的权限。您的后台处理目录位于 /usr 可能需要根权限才能访问此路径。
先成为根 sudo su 然后执行或将执行命令替换为

sudo bin/flume-ng agent -c conf -f conf/hdfs_sink.conf -n a1 -Dflume.root.logger=INFO,console

另一方面,你可以允许 flume 具有的用户

cd /usr/download/
sudo chown -R flume:somegroup test_data

相关问题