An introduction to large-scale distributed systems with an emphasis on big-data processing and storage infrastructures. Topics include memory management, file management, fundamental tradeoffs in distributed systems, techniques for exploiting parallelism, big-data computation and storage models, design and implementation of various well-known distributed systems infrastructures, and concrete exposure to programming big-data applications on top popular, open-source infrastructures for data processing and storage systems such as Spark.