/// <summary>
        /// Runs the sample (including pre- and post-cleaning the cluster)
        /// </summary>
        private void RunSample()
        {
            //Connects to cluster based upon the information from config file
            var cluster = new Cluster();
            this.ExecuteStep("Connecting to cluster", () => cluster.Connect(this.certificate, this.subscription, this.clusterName, this.storageAccountName, this.storageAccountKey));
            
            //Cleans cluster
            this.ExecuteStep("Cleaning cluster", cluster.CleanUp);
            
            //Read input CSV files, serialize them and upload to Azure blob
            this.ExecuteStep(
                "Uploading files",
                () =>
                {
                    //The sample expects an excerpt from historical AMEX stock data as distributed by Infochimps, http://www.infochimps.com/
                    //CSV files are distributed with the sample
                    for (char i = 'A'; i < 'C'; i++)
                    {
                        var input = Path.Combine(this.dataSetLocation, "AMEX_daily_prices_" + i + ".csv");

                        // Convert CSV file to Avro format using Reflection and auto generated C# types code,
                        // write it to stream and upload it to cluster
                        using (var stream = new MemoryStream())
                        {
                            SerializeCsv(input, stream);
                            cluster.UploadAvro("AMEX_daily_prices_" + i + ".avro", stream);
                        }
                    }
                });

            //Create Hive table
            this.ExecuteStep("Creating Hive table", cluster.CreateStocksTable);

            //Execute a Hive query
            this.ExecuteStep(
                "Executing Query ",
                () =>
                {
                    const string Query = "SELECT YEAR(stockdate), AVG(closeprice) FROM Stocks WHERE symbol='AIP' GROUP BY year(stockdate);";
                    Console.WriteLine(Query);
                    Console.Out.WriteLine(
                        cluster.Query(new HiveJobCreateParameters { Query = Query, JobName = "YearlyAverages" }));
                },
                true);
            
            //Another Hive query
            //Commented out to diminsh the sample run time
            //this.ExecuteStep(
            //   "Executing Query ",
            //    () =>
            //    {
            //        const string Query = "SELECT YEAR(stockdate), MAX(closeprice) FROM Stocks GROUP BY year(stockdate);";
            //        Console.WriteLine(Query);
            //        Console.Out.WriteLine(
            //            cluster.Query(new HiveJobCreateParameters { Query = Query, JobName = "YearlyMaxes" }));
            //    },
            //    true);
            
            //Clean the cluster
            this.ExecuteStep("Cleaning cluster", cluster.CleanUp);
        }
 /// <summary>
 /// Cleans the cluster.
 /// </summary>
 private void CleanCluster()
 {
     //Connects to cluster based upon the information from config file
     var cluster = new Cluster();
     this.ExecuteStep("Connecting to cluster", () => cluster.Connect(this.certificate, this.subscription, this.clusterName, this.storageAccountName, this.storageAccountKey));
     
     //Call the actual clean up procedure
     this.ExecuteStep("Cleaning cluster", cluster.CleanUp);
 }