By default, vagrant shell provisioner run shell scripts with superuser privileges. Since provision.sh do hdfs write operations by root, it get permission denied.
There're two ways we can fix it.
1). Create vagrant's home folder by hdfs.
2). Let vagrant shell provisioner run the shell script without superuser privileges. (set privileged to false in Vagrantfile)
It seems solution 2 is much more elegant.
Unfortunately, the privileged setting is only available with vagrant 1.3.0+, and there's another issue coming up with 1.3.5+ which failed the network setting in fedora. So, I might suggest to take solution 1 first.