Sounds like you're using tarballs?
Try setting the HADOOP_LOG_DIRdefault location override to the configuration file etc/hadoop/hadoop-env.shas follows:
export HADOOP_LOG_DIR=/path/to/hadoop/extract/logs/
And then try again sbin/start-dfs.sh, and it should work.
In packaged environments, start-stop scripts are configured to provide a unique location for each type of service through the same HADOOP_LOG_DIRenv-var, so they do not have the same problem as you.
If you use packages instead, do not use these scripts, but simply run:
service hadoop-hdfs-namenode start
service hadoop-hdfs-datanode start
service hadoop-hdfs-secondarynamenode start