Как привязать именованный канал к узлу Flume Windows (служба узла Flume) - PullRequest
1 голос
/ 20 июля 2011

Не уверен, что это вопрос SO, SuperUser или ServerFault, но я только что установил сервис FlumeNode на моем компьютере с Windows и хотел отправить информацию о регистрации через именованный канал в FlumeNode.

The Flume Cookbook утверждает, что мы можем привязать именованный канал к Flume, но, похоже, для этого требуется cygwin, и вряд ли мы собираемся установить cygwin на все узлы Flume.Вот инструкции из поваренной книги:

Консольные источники полезны, потому что мы можем напрямую передавать данные в Flume.В следующем примере данные передаются из программы в Flume, которая затем доставляет их.

$ <external process> | flume node_nowatch -1 -s -n foo -c
'foo:console|agentBESink("collector");'

В идеале вы можете записывать данные в именованный канал и просто иметь Flume для чтения данных из именованного каналаиспользуя текст или хвост.К сожалению, эта версия текста и хвоста Flume в настоящее время не совместима с именованными каналами в среде Linux.Однако вы можете передать данные на узел Flume, прослушивающий консоль stdin:

$ tail -f namedpipe | flume node_nowatch -1 -s -n foo -c
'foo:console|agentBESink;'

Или вы можете использовать источник exec для получения выходных данных:

$ flume node_nowatch -1 -s -n bar -c 'bar:exec("cat
pipe")|agentBESink;'

Я также нашел обсуждение в группах Google по поводу этой идеи , и кажется, что люди из Claudera говорят, что это возможно, но нет ничего конкретного, объясняющего, как Flume подключится к трубе и если этов этом случае выступает в роли сервера или клиента.

В идеале я должен иметь возможность создать NamedPipeClientSteram или NamedPipeServerStream в своем приложении.Клиент требует, чтобы сервер именованного канала работал, и клиент ищет клиентов, которые к нему подключаются.Я предполагаю, что Flume будет действовать как сервер, но я не могу это подтвердить.Например,

NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "FlumeNamedPipe", PipeDirection.Out, pIpeOptions.None);
pipeClient.Connect();

Есть ли что-то, что может быть добавлено к аргументам командной строки при запуске службы Flume в Windows, чтобы подключить канал?

Ответы [ 2 ]

0 голосов
/ 11 января 2013

В качестве альтернативы хвостовым журналам я создал приложение .Net Flume для NLog и log4net.Это использует привязки бережливости, выставленные Flume.Теперь они называются ThriftLegacySource.Более новые привязки Flume, основанные на Avro, в настоящее время не имеют клиентов C #, поэтому это была единственная разумная альтернатива, о которой я мог подумать.

Приложение устанавливается с nuget:

Пакет установки DotNetFlumeNG.Client.log4net

Пакет установки DotNetFlumeNG.Client.NLog

* 1008здесь: https://github.com/marksl/DotNetFlumeNG.Clients
0 голосов
/ 21 июля 2011

Я получил ответ от Клаудеры, и они утверждают, что, поскольку в Windows нет встроенной программы tail, требуется, чтобы кто-то использовал Cygwin для такой функциональности. Мы не хотим устанавливать Cygwin, поэтому я ищу альтернативное решение.

Согласно Claudera, альтернативой является использование C # привязки Thrift , которая отправляет данные агенту Flume с источником Thrift в тот же ящик Windows. Я не совсем уверен, как вы указываете источник Thrift для агента Flume, но предположительно это можно сделать.

...