@rdbb ,
It is possible to even have a one-node cluster (With CM and CDH), but that is certainly not something that you would want to do if you want to leverage the inherent redundancy and load distrobution of CDH.
Functionally, you can put roles most anywhere you please; as far as what is best for your desired use cases, though, we can't really comment without more context.
If you only have 4 hosts, you still need to consider what sort of memory the roles that are on those hosts will demand (as well as CPU and disk). Also, do you want to use High Availability for HDFS and YARN (NameNode and Resource Manager)?
Given enough RAM, disk, etc. you could put master host and edge node on one node and then use the other 3 as worker nodes.
It is more about what you want to get out of this cluster, how important uptime is, and what resources you have.
If you don't care too much and just want to play around, the configuration I described with master/edge on one host and workers on the other 3 is fine. In fact, that's basically what we do for our nightly builds here at Cloudera.
I hope that halps a bit. Feel free to ask more questions.