4 ms·
Indeed. I was just playing with the python bindings.. I was able to build a prototype of what I am trying to do in a few minutes. I'd prefer the kafka streams
by justinsaccount 10y ago
Indeed. I was just playing with the python bindings.. I was able to build a prototype of what I am trying to do in a few minutes.
I'd prefer the kafka streams approach of deployment, but I suppose for just having it run on a single box this would work.
- nl 10y agoIt's actually pretty easy to setup a multi-node setup, if you don't worry about YARN/Mesos and just use the plain Spark cluster thing. I think it's like 1 config entry per node. It doesn't solve the data storage problem, so if you need that you need a way to map the same files to the same path on every node (eg, network drive, RSync). If you are just doing streaming it might not matter though.
- justinsaccount 10y agoMy use case is 100% streaming.. I actually implemented what I'm trying to do using some basic python code that runs against archived logs, but I just process the last weeks worth of data from scratch at each iteration. It only takes 30 seconds to run, but this method doesn't work for a 100x larger stream that I want to do the same thing for. The ability to run the data pipeline in realtime but also replay older data against new code using something like kafka would be a huge plus. Really the main thing my code is missing is the sliding window implementation, so I can either port to spark streaming which has all that stuff built in, or just implement my own window code.
- nl 10y agoSpark has sliding window operations: windowedWordCounts = pairs.reduceByKeyAndWindow(lambda x, y: x + y, lambda x, y: x - y, 30, 10) Search for "window operations" on http://spark.apache.org/docs/latest/streaming-programming-guide.html#discretized-streams-dstreams http://spark.apache.org/docs/latest/streaming-programming-gu.... Unless you meant something different? You can replay streams against Spark, too. streamingContext.textFileStream will stream data from files dumped in a directory - to replay them, just dump them there again.
- justinsaccount 10y agoYeah.. that's exactly what I used in the spark version i threw together yesterday. reduceByKeyAndWindow is what my simple non-spark proof of concept is missing. otherwise the code is basically the same. my non spark code is essentially while True: data = {} for line in input: rec = parse(line) data = aggregate(data, rec) data = filter(is_bad, data) pprint(data) the spark version is 99% the same code: lines.map(parse).reduceByKeyAndWindow(add, sub, 3600, 60). filter(is_bad).pprint() Figuring out how to do stateful processing is a little tricky, but updateStateByKey seems to do what i need.. I need to dedup the output per key for time period t. Though, some recommendations are just to use something like redis or memcached which would work.