Как остановить грампластинку изящно - PullRequest
0 голосов
/ 30 мая 2019

Многие веб-сайты предлагают использовать kill -9 при остановке агента flume.

Однако, когда я останавливаю агент с kill -9, файлы приемника HDFS остаются открытыми навсегда (как * .tmp).

Как можно изящно остановить агент Flume, чтобы агент закрывал все записываемые файлы в HDFS до его остановки.

#Name the components on this agent
agent.sources = r1
agent.sinks = k1
agent.channels = c1

#Configure the Kafka Source
agent.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
agent.sources.r1.batchSize = 1000
agent.sources.r1.batchDurationMillis = 3000
agent.sources.r1.kafka.bootstrap.servers = <server1>:6667,<server2>:6667
agent.sources.r1.kafka.topics = 1-agent1-thread
agent.sources.r1.kafka.consumer.group.id = flume_agent_thread

#Describe the sink
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = /user/flume/kafka-data/1-agent1-thread/%y%m%d/%H
agent.sinks.k1.hdfs.filePrefix = 1-agent1-thread

#Describing sink with the problem of Encoding
agent.sinks.k1.hdfs.fileType = DataStream
agent.sinks.k1.hdfs.writeFormat = Text

#Describing sink with the problem of many hdfs files
### Roll a file after certain amount of events occurs  ###
agent.sinks.k1.hdfs.rollInterval = 0
agent.sinks.k1.hdfs.rollSize = 0
agent.sinks.k1.hdfs.rollCount = 10000
agent.sinks.k1.hdfs.batchSize = 100
agent.sinks.k1.hdfs.idleTimeout = 300
agent.sinks.k1.hdfs.closeTries = 0
agent.sinks.k1.hdfs.retryInterval = 200

#Use a channel which buffers events in memory
agent.channels.c1.type = memory
agent.channels.c1.capacity = 10000
agent.channels.c1.transactionCapacity = 1000

#Bind the source and sink to the channel
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1

1 Ответ

0 голосов
/ 02 июня 2019

Используйте kill -TERM, который является стандартным способом уничтожения всех служб, связанных с Hadoop.

Flume будет иметь обработчик SIGTERM ( См. Application.java ), который должен очищать все открытые файлы.

ShutdownHook() -> stop() -> stopAllComponents()

kill -9 следует использовать только в том случае, если вы пробовали kill -TERM, а агент для сбора жидкости все еще висит.

...