/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
#pragma warning disable 1591
namespace Amazon.ElasticMapReduce.Model
{
///
/// Valid config files.
///
public enum ConfigFile
{
Site,
Default,
Core,
Hdfs,
Mapred
}
public class ConfigureHadoop
{
List args = new List();
readonly string bucket;
internal ConfigureHadoop(string bucket)
{
this.bucket = bucket;
}
///
/// Specify an XML file in S3 to merge with Hadoop's default configuration.
///
/// The config file to merge with.
/// The path in S3 of the XML file.
public void AddXml(ConfigFile file, string xmlPath)
{
string arg = "";
switch (file)
{
case ConfigFile.Site:
arg = "-S";
break;
case ConfigFile.Default:
arg = "-D";
break;
case ConfigFile.Core:
arg = "-C";
break;
case ConfigFile.Hdfs:
arg = "-H";
break;
case ConfigFile.Mapred:
arg = "-M";
break;
}
args.Add(arg);
args.Add(xmlPath);
}
///
/// Specify a key-value pair to merge with Hadoop's default configuration.
///
/// The config file to merge with.
/// The config key.
/// The config value.
public void AddKeyValue(ConfigFile file, String key, String value)
{
String arg = "";
switch (file)
{
case ConfigFile.Site:
arg = "-s";
break;
case ConfigFile.Default:
arg = "-d"; break;
case ConfigFile.Core:
arg = "-c";
break;
case ConfigFile.Hdfs:
arg = "-h";
break;
case ConfigFile.Mapred:
arg = "-m";
break;
}
args.Add(arg);
args.Add(key + "=" + value);
}
///
/// Returns an object which can be used in a RunJobflow call.
///
/// an object which can be used in a RunJobflow call.
public BootstrapActionConfig Build()
{
return new BootstrapActionConfig
{
Name = "Configure Hadoop",
ScriptBootstrapAction = new ScriptBootstrapActionConfig
{
Path = string.Format(CultureInfo.InvariantCulture, "s3://{0}/bootstrap-actions/configure-hadoop", bucket),
Args = args
}
};
}
}
}