CDK-647: Update examples to use Flume's Log4jAppender and DatasetSink

 * This patch includes configuring the Log4jAppender to gracefully
    handle connection errors. This is useful as it avoids a circular
    dependency between loading the log4j configuration to create the
    dataset and starting Flume after the dataset exists.
 * The README for the logging, logging-webapp, and demo examples have
    been updated accordingly.
 * This patch also includes some fixes needed to work on the CDH5.1
    QuickStart VM. I suspect more of the examples may have issues.
    So I'll file a follow-up JIRA to check them out and to update the
    top-level README to account for changes between the 4.4 and 5.1 VMs.
> If no URL is provided, it should look up the schema at the destination side. This would require changes to Flume's Log4jAppender and the DatasetSink to actually implement.

I agree that the application tier shouldn't need to talk with the cluster, only Flume (that was the motivation for the DatasetSink), but I don't think it works to ask Flume what schema it expects. The application should be built to produce records with a certain Schema because that's what it understands. Then the Flume sink handles reading the records from clients using its Schema for the read Schema and the client's Schema for the write Schema. This is what the DatasetSink does to handle different schema versions and thus support rolling restarts.

The property here, AvroSchemaUrl, is used to set a URI for the Schema that the client is sending with. This is an optimization only. The application's schema is fixed, but sending the schema with each record is costly. Sending a URI instead takes less room, but can't change the client's schema. It's intended to get that schema to the sink so the sink can read the data.

My question was kind of confusing, probably because I was confused when I asked it and was also thinking that the clients would interact with the cluster if this is an HDFS URI. In reality, there's probably little value in using webhdfs here because Flume already has to be able to send data to the cluster in order to write at all.