Sto usando il HTTPSource
in Flume
per ricevere POST eventi in formato json
come segue:Come inserire JSON in HDFS utilizzando Flume correttamente
{"username":"xyz","password":"123"}
La mia domanda è: Devo modificare la fonte di gli eventi (intendo quella che invia il JSON
al Flume) in modo che il JSON, ha il seguente formato:
[{
"headers" : {
"timestamp" : "434324343",
"host" : "random_host.example.com"
},
"body" : "{"username":"xyz","password":"123"}"
}]
Questo è il modo migliore per farlo? O posso modificarlo ovunque?
Il mio file conf
per il flume agent
è:
## Componentes
SomeAgent.sources = SomeHTTP
SomeAgent.channels = MemChannel
SomeAgent.sinks = SomeHDFS
## Fuente e Interceptores
SomeAgent.sources.SomeHTTP.type = http
SomeAgent.sources.SomeHTTP.port = 5140
SomeAgent.sources.SomeHTTP.handler = org.apache.flume.source.http.JSONHandler
SomeAgent.sources.SomeHTTP.channels = MemChannel
SomeAgent.sources.SomeHTTP.interceptors = i1 i2
## Interceptores
SomeAgent.sources.SomeHTTP.interceptors.i1.type = timestamp
SomeAgent.sources.SomeHTTP.interceptors.i2.type = host
SomeAgent.sources.SomeHTTP.interceptors.i2.hostHeader = hostname
## Canal
SomeAgent.channels.MemChannel.type = memory
SomeAgent.channels.MemChannel.capacity = 10000
SomeAgent.channels.MemChannel.transactionCapacity = 1000
## Sumidero
SomeAgent.sinks.SomeHDFS.type = hdfs
SomeAgent.sinks.SomeHDFS.channel = MemChannel
SomeAgent.sinks.SomeHDFS.hdfs.path = /raw/logs/%Y-%m-%d
SomeAgent.sinks.SomeHDFS.hdfs.fileType = DataStream
SomeAgent.sinks.SomeHDFS.hdfs.filePrefix = SomeLogs-
SomeAgent.sinks.SomeHDFS.hdfs.writeFormat = Text
SomeAgent.sinks.SomeHDFS.hdfs.batchSize = 100
SomeAgent.sinks.SomeHDFS.hdfs.rollSize = 0
SomeAgent.sinks.SomeHDFS.hdfs.rollCount = 10000
SomeAgent.sinks.SomeHDFS.hdfs.rollInterval = 600
SomeAgent.sinks.SomeHDFS.hdfs.useLocalTimeStamp = true
Esecuzione del cat
di hadoop fs
$ hadoop fs -ls -R /raw/logs/somes
drwxr-xr-x - flume-agent supergroup 0 2015-06-16 12:43 /raw/logs/arquimedes/2015-06-16
-rw-r--r-- 3 flume-agent supergroup 3814 2015-06-16 12:33 /raw/logs/arquimedes/2015-06-16/SomeLogs.1434471803369
-rw-r--r-- 3 flume-agent supergroup 3719 2015-06-16 12:43 /raw/logs/arquimedes/2015-06-16/SomeLogs.1434472404774
$ hadoop fs -cat /raw/logs/somes/2015-06-16/SomeLogs.1434471803369 | head
$
(si guarda in modo corretto, righe vuote)
Se ora guardo il file (usando la vista binaria di HUE
per esempio):
0000000: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................
0000010: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................
0000020: 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................
Ho trovato questo collegamento (http://grokbase.com/t/flume/user/128nspvnfg/can-hdfssink-write-headers-as-well) dicendo che i serializzatori di cuatom per HDFSSink possono essere creati solo per ' fileType = CompressedStream' o 'DataStream'. Non so se è attualmente fissato per 'SequenceFiles'. – frb
frb grazie per la vostra risposta, ho appena incollato il file di configurazione, ma quando guardo (usando 'hadoop fs -cat/raw/log/2015-06-15/SomeLog-.1434410388430') non vedo nulla (a molte linee di mazzo vuote, che sospetto siano in binario) Potresti vedere l'errore? – nanounanue
Ho aggiunto l'output come binario nella domanda ... Non sta registrando nulla ': (' – nanounanue