使用 C# 的 Mapreduce:处理整个输入文件
Mapreduce with C#: Process whole input files
问题:
我正在用 C# 为 HDInsight 创建一个 MapReduce 应用程序。我需要处理整个输入文件。
我明白,在 Hadoop 中有两个选项可以实现这一点:
- 派生自 InputFormat class,并始终让 isSplitable
return 错误
- 将 min_splitsize 设置为足够大的值
我不知道如何在 HDInsight 上使用 C# 实现这些选项中的任何一个。
详情:
我要么
使用 Microsoft.Hadoop.MapReduce,并通过 hadoop.MapReduceJob.ExecuteJob<MyJob>();
启动作业
或者简单地创建一个控制台应用程序并通过
从 azure powershell 启动它
$mrJobDef = New-AzureHDInsightStreamingMapReduceJobDefinition -JobName MyJob -StatusFolder $mrStatusOutput -Mapper $mrMapper -Reducer $mrReducer -InputPath $mrInput -OutputPath $mrOutput
$mrJobDef.Files.Add($mrMapperFile)
$mrJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $mrJobDef
任何一种方法的解决方案都会有很大帮助。
您可以使用 powershell 中的 -Defines 参数设置 min_splitsize
$clusterName = "YourClusterName"
$jobConfig = @{ "min_splitsize"="512mb"; "mapred.output.compression.codec"="org.apache.hadoop.io.compress.GzipCodec" }
$myWordCountJob = New-AzureHDInsightMapReduceJobDefinition -JarFile "/example/jars/hadoop-examples.jar" -ClassName "wordcount" -jobName "WordCountJob" -StatusFolder "/MyMRJobs/WordCountJobStatus" -Defines $jobConfig
或 C#
var mapReduceJob = new MapReduceJobCreateParameters()
{
ClassName = "wordcount", // required
JobName = "MyWordCountJob", //optional
JarFile = "/example/jars/hadoop-examples.jar", // Required, alternative syntax: wasb://hdijobs@azimasv2.blob.core.windows.net/example/jar/hadoop-examples.jar
StatusFolder = "/AzimMRJobs/WordCountJobStatus" //Optional, but good to use to know where logs are uploaded in Azure Storage
};
mapReduceJob.Defines.Add("min_splitsize", "512mb");
虽然我认为这不能保证每个文件都会被完整读取。为此,您可能需要此处说明的 Java SDK
http://www.andrewsmoll.com/3-hacks-for-hadoop-and-hdinsight-clusters/
问题:
我正在用 C# 为 HDInsight 创建一个 MapReduce 应用程序。我需要处理整个输入文件。
我明白,在 Hadoop 中有两个选项可以实现这一点:
- 派生自 InputFormat class,并始终让 isSplitable return 错误
- 将 min_splitsize 设置为足够大的值
我不知道如何在 HDInsight 上使用 C# 实现这些选项中的任何一个。
详情:
我要么
使用 Microsoft.Hadoop.MapReduce,并通过
hadoop.MapReduceJob.ExecuteJob<MyJob>();
启动作业
或者简单地创建一个控制台应用程序并通过
从 azure powershell 启动它$mrJobDef = New-AzureHDInsightStreamingMapReduceJobDefinition -JobName MyJob -StatusFolder $mrStatusOutput -Mapper $mrMapper -Reducer $mrReducer -InputPath $mrInput -OutputPath $mrOutput
$mrJobDef.Files.Add($mrMapperFile)
$mrJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $mrJobDef
任何一种方法的解决方案都会有很大帮助。
您可以使用 powershell 中的 -Defines 参数设置 min_splitsize
$clusterName = "YourClusterName"
$jobConfig = @{ "min_splitsize"="512mb"; "mapred.output.compression.codec"="org.apache.hadoop.io.compress.GzipCodec" }
$myWordCountJob = New-AzureHDInsightMapReduceJobDefinition -JarFile "/example/jars/hadoop-examples.jar" -ClassName "wordcount" -jobName "WordCountJob" -StatusFolder "/MyMRJobs/WordCountJobStatus" -Defines $jobConfig
或 C#
var mapReduceJob = new MapReduceJobCreateParameters()
{
ClassName = "wordcount", // required
JobName = "MyWordCountJob", //optional
JarFile = "/example/jars/hadoop-examples.jar", // Required, alternative syntax: wasb://hdijobs@azimasv2.blob.core.windows.net/example/jar/hadoop-examples.jar
StatusFolder = "/AzimMRJobs/WordCountJobStatus" //Optional, but good to use to know where logs are uploaded in Azure Storage
};
mapReduceJob.Defines.Add("min_splitsize", "512mb");
虽然我认为这不能保证每个文件都会被完整读取。为此,您可能需要此处说明的 Java SDK http://www.andrewsmoll.com/3-hacks-for-hadoop-and-hdinsight-clusters/