ich die HTTPSource
in Flume
zur Aufnahme POST Ereignisse in json
Format verwende wie folgt:Wie JSON in HDFS einfügen mit Flume richtig
{"username":"xyz","password":"123"}
Meine Frage ist: Muss ich die Quelle zu ändern haben die Ereignisse (ich meine die, die die JSON
zum Flume senden), so dass die JSON, hat folgendes Format:
[{
"headers" : {
"timestamp" : "434324343",
"host" : "random_host.example.com"
},
"body" : "{"username":"xyz","password":"123"}"
}]
Dies ist der beste Weg, es zu tun? Oder ich kann es überall anders ändern?
Meine conf
-Datei für die flume agent
ist:
## 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
Ausführen des cat
von 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
$
(Sie sehen richtig, leere Zeilen)
Wenn ich jetzt auf die Datei aussehen (unter Verwendung der binären Sicht von HUE
zum Beispiel):
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 ................
Ich habe diesen Link gefunden (http://grokbase.com/t/flume/user/128nspvnfg/can-hdfssink-write-headers-as-well) sagen, dass Cuatom Serialisierer für HDFSSink nur für 'erstellt werden können fileType = CompressedStream' oder 'DataStream'. Ich weiß nicht, ob es momentan für 'SequenceFiles' festgelegt ist. – frb
frb danke für deine Antwort, ich habe nur die Konfigurationsdatei eingefügt, aber wenn ich (mit 'hadoop fs -cat/rohe/log/2015-06-15/SomeLog-.1434410388430') sehe ich nichts (a Viele leere Bündel, von denen ich vermute, dass sie binär sind. Könnten Sie den Fehler sehen? – nanounanue
Ich habe die Ausgabe als Binär in der Frage hinzugefügt ... Loggt nichts ': (' – nanounanue