Исходный локальный файл в сток HDFS с использованием Flume - PullRequest
0 голосов
/ 27 июня 2018

Я использую 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 для запуска этого файла конфигурации.

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)

Как это решить?

1 Ответ

0 голосов
/ 26 июля 2018

Ваш flume пользователь может не иметь разрешения в каталоге спулинга. Ваш каталог спулинга находится по адресу /usr, и для доступа к этому пути может потребоваться разрешение root.

Сначала станьте пользователем root с 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
...