psuedo-distributed ZK is more work than the others based upon the way that ZooKeeperWrapper & HQuorumPeer was written. Should still be doable, but noting some of the problems for consideration:
1. Need to add conf item (hbase.zookeeper.myid) to override ID lookup in HQuorumPeer.writeMyID()
2. These config params should be different per HQuorumPeer: hbase.zookeeper.property.clientPort + hbase.zookeeper.property.dataDir
3. hbase.zookeeper.property.server.<id> should be given to hbase as <addr>:<peer_port>:<leader_port>:<client_port>
a. We currently don't allow a custom peer_port + leader_port even though ZK supports it
b. Need extra client_port for ZooKeeperWrapper.setQuorumServers()
4. GNU Parsing code needs to be added to HQuorumPeer to support overriding config values on the fly. See HMaster.doMain() for help
Also, make sure that the master rewrite code does not affect this change, if you finish first.