{ "conclusions": { "checkpoint_bounds_lineage_replay": true, "lost_wide_dependency_can_replay_multiple_parent_partitions": true, "mapreduce_materializes_each_round": true, "same_numeric_result": true, "task_side_effects_can_repeat": true }, "mapreduce": { "durable_partition_writes": 16, "input_partition_reads": 32, "result": { "0": 1.554067, "1": 0.644089, "2": 1.651844, "3": 0.15 }, "trace": [ "round 1: read graph+ranks, materialize all rank partitions", "round 2: read graph+ranks, materialize all rank partitions", "round 3: read graph+ranks, materialize all rank partitions", "round 4: read graph+ranks, materialize all rank partitions" ] }, "model": "deterministic RDD lineage/materialization model", "narrow_dependency_loss": { "lost_partition": 2, "parent_partitions_touched": [ 2 ], "restored": [ 40 ] }, "not_modeled": [ "a Spark or Hadoop runtime", "network transfer, disk throughput, scheduler locality, speculative execution", "arbitrary DAGs or production failure recovery" ], "spark_checkpoint_after_iteration_2": { "duplicate_side_effect_keys": [ "iteration-3-partition-0", "iteration-3-partition-1", "iteration-3-partition-2", "iteration-3-partition-3", "iteration-4-partition-0", "iteration-4-partition-1", "iteration-4-partition-2", "iteration-4-partition-3" ], "durable_partition_writes": 4, "graph_partition_reads": 4, "lineage_start": 2, "rank_task_runs": 24, "recomputed_task_attempts": [ "iteration-3-partition-0", "iteration-3-partition-1", "iteration-3-partition-2", "iteration-3-partition-3", "iteration-4-partition-0", "iteration-4-partition-1", "iteration-4-partition-2", "iteration-4-partition-3" ], "result": { "0": 1.554067, "1": 0.644089, "2": 1.651844, "3": 0.15 }, "trace": [ "cache invariant graph partitions", "iteration 1: shuffle contributions, compute four rank partitions", "iteration 2: shuffle contributions, compute four rank partitions", "checkpoint iteration 2: materialize four rank partitions", "iteration 3: shuffle contributions, compute four rank partitions", "iteration 4: shuffle contributions, compute four rank partitions", "lost rank partition 2: replay from durable boundary 2" ] }, "spark_without_checkpoint": { "duplicate_side_effect_keys": [ "iteration-1-partition-0", "iteration-1-partition-1", "iteration-1-partition-2", "iteration-1-partition-3", "iteration-2-partition-0", "iteration-2-partition-1", "iteration-2-partition-2", "iteration-2-partition-3", "iteration-3-partition-0", "iteration-3-partition-1", "iteration-3-partition-2", "iteration-3-partition-3", "iteration-4-partition-0", "iteration-4-partition-1", "iteration-4-partition-2", "iteration-4-partition-3" ], "durable_partition_writes": 0, "graph_partition_reads": 4, "lineage_start": 0, "rank_task_runs": 32, "recomputed_task_attempts": [ "iteration-1-partition-0", "iteration-1-partition-1", "iteration-1-partition-2", "iteration-1-partition-3", "iteration-2-partition-0", "iteration-2-partition-1", "iteration-2-partition-2", "iteration-2-partition-3", "iteration-3-partition-0", "iteration-3-partition-1", "iteration-3-partition-2", "iteration-3-partition-3", "iteration-4-partition-0", "iteration-4-partition-1", "iteration-4-partition-2", "iteration-4-partition-3" ], "result": { "0": 1.554067, "1": 0.644089, "2": 1.651844, "3": 0.15 }, "trace": [ "cache invariant graph partitions", "iteration 1: shuffle contributions, compute four rank partitions", "iteration 2: shuffle contributions, compute four rank partitions", "iteration 3: shuffle contributions, compute four rank partitions", "iteration 4: shuffle contributions, compute four rank partitions", "lost rank partition 2: replay from durable boundary 0" ] }, "workload": { "algorithm": "PageRank-like update", "iterations": 4, "partitions": 4 } }