A key-value store for blocks that acts as a cache is Block Manager. It runs on every node, i.e. an executor and a driver, in a Spark runtime environment. It provides interfaces for putting and retrieving blocks both locally and remotely into various stores, i.e. memory, disk, and off-heap. The storage for most of the data in Spark is managed by a BlockManager, i.e. block that represents a cached RDD partition, broadcast data, and intermediate shuffle data.