public static void createWithParents(ZKWatcher zkw, String znode, byte[] data)
    throws KeeperException {
    try {
      if (znode == null) {
        return;
      }
      zkw.getRecoverableZooKeeper().create(znode, data, zkw.createACL(znode),
        CreateMode.PERSISTENT);
    } catch (KeeperException.NodeExistsException nee) {
      return;
    } catch (KeeperException.NoNodeException nne) {
      createWithParents(zkw, getParent(znode));
      createWithParents(zkw, znode, data);
    } catch (InterruptedException ie) {
      zkw.interruptedException(ie);
    }
  }
Creates the specified node and all parent nodes required for it to exist. The creation of
parent znodes is not atomic with the leafe znode creation but the data is written atomically
when the leaf node is created. No watches are set and no errors are thrown if the node already
exists. The nodes created are persistent and open access.
@param zkw   zk reference
@param znode path of node
@throws KeeperException if unexpected zookeeper exception
hbase-zookeeper/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java