Skip to content
Snippets Groups Projects
  1. Oct 11, 2013
  2. Oct 10, 2013
    • Matei Zaharia's avatar
      Merge remote-tracking branch 'tgravescs/sparkYarnDistCache' · 8f11c36f
      Matei Zaharia authored
      Closes #11
      
      Conflicts:
      	docs/running-on-yarn.md
      	yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala
      8f11c36f
    • Matei Zaharia's avatar
      Merge pull request #19 from aarondav/master-zk · c71499b7
      Matei Zaharia authored
      Standalone Scheduler fault tolerance using ZooKeeper
      
      This patch implements full distributed fault tolerance for standalone scheduler Masters.
      There is only one master Leader at a time, which is actively serving scheduling
      requests. If this Leader crashes, another master will eventually be elected, reconstruct
      the state from the first Master, and continue serving scheduling requests.
      
      Leader election is performed using the ZooKeeper leader election pattern. We try to minimize
      the use of ZooKeeper and the assumptions about ZooKeeper's behavior, so there is a layer of
      retries and session monitoring on top of the ZooKeeper client.
      
      Master failover follows directly from the single-node Master recovery via the file
      system (patch d5a96fec), save that the Master state is stored in ZooKeeper instead.
      
      Configuration:
      By default, no recovery mechanism is enabled (spark.deploy.recoveryMode = NONE).
      By setting spark.deploy.recoveryMode to ZOOKEEPER and setting spark.deploy.zookeeper.url
      to an appropriate ZooKeeper URL, ZooKeeper recovery mode is enabled.
      By setting spark.deploy.recoveryMode to FILESYSTEM and setting spark.deploy.recoveryDirectory
      to an appropriate directory accessible by the Master, we will keep the behavior of from d5a96fec.
      
      Additionally, places where a Master could be specificied by a spark:// url can now take
      comma-delimited lists to specify backup masters. Note that this is only used for registration
      of NEW Workers and application Clients. Once a Worker or Client has registered with the
      Master Leader, it is "in the system" and will never need to register again.
      c71499b7
    • Aaron Davidson's avatar
    • Matei Zaharia's avatar
      Merge pull request #44 from mateiz/fast-map · cd08f734
      Matei Zaharia authored
      A fast and low-memory append-only map for shuffle operations
      
      This is a continuation of the old repo's pull request https://github.com/mesos/spark/pull/823 to add a more efficient hashmap class for shuffles. I've optimized and tested this more thoroughly now so I think it's good to go. I've also addressed some of the comments that were outstanding there.
      
      The idea is to reduce the cost of shuffles by taking advantage of the properties their hashmaps need. In particular, the hashmaps there are append-only, and a common operation is updating a key's value based on the old value. The included AppendOnlyMap class uses open hashing to use less space than Java's (by not having a linked list per bucket), does not support deletes, and has a changeValue operation to update a key in place without following the hash chain twice. In micro-benchmarks against java.util.HashMap and scala.collection.mutable.HashMap, this is 20-30% smaller and 10-40% faster depending on the number and type of keys. It's also noticeably faster than fastutil's Object2ObjectOpenHashMap.
      
      I've also tested this in Spark apps now. While the speed gain is modest (partly due to other overheads, like serialization), there is some, and I think the lower memory usage is worth it. Here's one example where the speedup is most noticeable, in spark-shell on local mode:
      ```
      scala> val nums = sc.parallelize(1 to 8).flatMap(x => (1 to 5e6.toInt)).cache
      
      scala> nums.count
      
      scala> def time(x: => Unit) = { val now = System.currentTimeMillis; x; System.currentTimeMillis - now }
      
      scala> (1 to 8).map(_ => time(nums.map(x => (x % 100000, x)).reduceByKey(_ + _).count) / 1000.0)
      ```
      
      This prints the following times before and after this change:
      ```
      Before: Vector(4.368, 2.635, 2.549, 2.522, 2.233, 2.222, 2.214, 2.195)
      
      After: Vector(3.588, 1.741, 1.706, 1.648, 1.777, 1.81, 1.776, 1.731)
      ```
      
      I've also run the spark-perf suite, enhanced with some tests that use Ints (https://github.com/amplab/spark-perf/pull/9), and it shows some speedup on those, but less on the string ones (presumably due to existing overhead): https://gist.github.com/mateiz/6897121.
      cd08f734
    • Matei Zaharia's avatar
      Merge branch 'master' into fast-map · 001d13f7
      Matei Zaharia authored
      Conflicts:
      	core/src/test/scala/org/apache/spark/scheduler/SparkListenerSuite.scala
      001d13f7
    • Aaron Davidson's avatar
      Address Matei's comments on documentation · 42d8b8ef
      Aaron Davidson authored
      Updates to the documentation and changing some logError()s to logWarning()s.
      42d8b8ef
  3. Oct 09, 2013
  4. Oct 08, 2013
  5. Oct 07, 2013
Loading