带C#的Mapreduce:处理整个输入文件
问题: 我正在用C#for HDInsight创建一个MapReduce应用程序。我需要处理整个输入文件 我知道,Hadoop中有两个选项可以实现这一点:带C#的Mapreduce:处理整个输入文件,c#,mapreduce,hadoop-streaming,azure-hdinsight,C#,Mapreduce,Hadoop Streaming,Azure Hdinsight,问题: 我正在用C#for HDInsight创建一个MapReduce应用程序。我需要处理整个输入文件 我知道,Hadoop中有两个选项可以实现这一点: 从InputFormat类派生,并始终允许isSplitable 返回错误 将min_splitsize设置为足够大的值 我不知道如何使用C#on HDInsight实现这些选项 详细信息: 我不是 使用Microsoft.Hadoop.MapReduce,并通过Hadoop.MapReduceJob.ExecuteJob()启动作业
- 从InputFormat类派生,并始终允许isSplitable 返回错误
- 将min_splitsize设置为足够大的值
- 使用Microsoft.Hadoop.MapReduce,并通过
Hadoop.MapReduceJob.ExecuteJob()启动作业代码>
- 或者通过创建控制台应用程序并通过从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参数设置最小拆分大小
$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#
尽管我认为这并不能保证每个文件都能被完全读取。要做到这一点,您可能需要这里介绍的JavaSDK
资源:
Andrew,谢谢,这听起来正是我想要的。我只是需要一些时间来验证一下。
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");