Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing