bcongdon
Joined 9 years ago
Joined 9 years ago
I like to write about productivity, Go/Rust, and my various web development projects. I also tend to write pretty frequently about programming language ergonomics.
Popular posts:
* https://benjamincongdon.me/blog/2019/11/11/The-Value-in-Gos-...
* https://benjamincongdon.me/blog/2018/03/23/Python-Idioms-in-...
* https://benjamincongdon.me/blog/2018/03/01/Scraping-the-Web-...
Favorite posts:
* https://benjamincongdon.me/blog/2019/03/07/Generative-Doodli...
* https://benjamincongdon.me/blog/2018/10/07/Wordscapes/
---
I also have a blogroll of other blogs I think are interesting: https://benjamincongdon.me/blogroll
... and a list of books that I've read: https://benjamincongdon.me/books
As a very rough estimate, for a light-to-medium load of 1Tb, the cost would probably be in the ballpark of ~$0.50. AWS's own reference MR framework[2] (which is mostly a tech demo) quotes prices in a similar order of magnitude.
Corral isn't great for processing-heavy MR jobs, as Lambda pricing rises quickly if you need a lot of memory or take a lot of time with each record. But, for small-ish low-overhead jobs, it can pretty easily beat the pricing and hassle of using something like EMR.
[1]: https://aws.amazon.com/lambda/pricing/#Lambda_pricing_detail... [2]: https://github.com/awslabs/lambda-refarch-mapreduce/
Corral deals with this by splitting input data into small enough chunks that each chunk can be processed within the timeout -- I exposed options for setting the amount of data that each Lambda function has to process. However, if each data item requires more than 5 min of processing, then corral won't work for you.
The "driver" that coordinates the Lambda functions runs locally (not in Lambda), so it doesn't have this constraint.
I think there’s a lot of interesting applications for using function-as-a-service platforms as executors in data processing frameworks such as this.
If you’re interested more in the development/internals of this project, I wrote a blog post with more details: https://benjamincongdon.me/blog/2018/05/02/Introducing-Corra...
[1]: https://github.com/Miserlou/Zappa [2]: https://serverless.com/
I suspected something like the `ff` labeling approach would improve the solution, but I had no idea how much of a difference `all_different` made vs. `all_distinct`!