Execution

Just for feedback
Ah, yes, I'm glad you brought that up. I'd appreciate your advice.

The reason was that I wasn't sure whether exportDir would generally be known at configuration time or not? It seems to me that you could often be exporting the results of some import or upload, in which case you're going to discover the exportDir during the execution of the job. But you might also be writing the results of some pipe out to some temporary file, in which case you'll probably have a fixed export dir that you know at configuration time.

So the current API makes both options convenient, but there is no type safety around it. So there is a sqoopExport method that takes an exportDir in addition to the config, and adds the exportDir to the config. And there is a sqoopExport method that just takes the config. And you can create a sqoopExport config with or without the exportDir. And it's up to the user to specify exportDir once either way.

But it's a bit of a pain, and I should probably standardize to one approach. The options are:

**Add exportDir as required parameter on options**
```
// when exportDir is known at compile time
class MyConf { val export = maestro.sqoopExport(exportDir = "predetermined") }
sqoopExport(conf.export)

// when exportDir is discovered during execution
class MyConf { def export(exportDir: String) = maestro.sqoopExport(exportDir = exportDir) }
sqoopExport(conf.export(exportDirReturnedByUpload))
```

**Add exportDir as parameter to sqoopExport call**
```
// when exportDir is known at compile time
class MyConf { val export = maestro.sqoopExport(); val exportDir = "predetermined" }
sqoopExport(conf.export, conf.exportDir)

// when exportDir is discovered during execution
class MyConf { val export = maestro.sqoopExport() }
sqoopExport(conf.export, exportDirReturnedByUpload)
```