For the first question, I think both approaches should work. You only have to be careful about startNewChain() because the behaviour can be somewhat unexpected. What it does is specify, that a new chain should be started with the operator on which you call startNewChain(). For example, in:

DataStream input = ...


You will have one chain ("map1") and a second chain ("map2", "map3").

For the second question, I think to make sure that each operator is on a separate machine you would have to set the number of slots to 1. This way you get 3 slots and if you set the resource group or chaining right you will have each operator on a different slot.

NEW: Monitor These Apps!
elasticsearch, apache solr, apache hbase, hadoop, redis, casssandra, amazon cloudwatch, mysql, memcached, apache kafka, apache zookeeper, apache storm, ubuntu, centOS, red hat, debian, puppet labs, java, senseiDB