2016-01-29 65 views
1

我正在使用Microsoft MapReduce SDK來啓動僅Mapper作業。MapReduce.SDK:如何等待MapReduce作業?

hadoop.MapReduceJob.ExecuteJob電話被扔「響應狀態代碼表明沒有成功:404(未找到)」立即例外。

在視察HDInsight查詢控制檯的工作成功啓動以後完成。它也寫入適當的輸出文件。

我的猜測是,ExecuteJob正在努力工作完成之前訪問輸出數據。

處理這種情況的正確方法是什麼?

using System; 
using System.Linq; 
using System.Security.Cryptography.X509Certificates; 
using Microsoft.WindowsAzure.Management.HDInsight; 
using Microsoft.Hadoop.MapReduce; 
using AzureAnalyzer.MultiAnalyzer; 

namespace AzureAnalyzer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IHadoop hadoop = Hadoop.Connect(Constants.azureClusterUri, Constants.clusterUser, 
      Constants.hadoopUser, Constants.clusterPassword, Constants.storageAccount, 
      Constants.storageAccountKey, Constants.container, true); 

      try { 
       var output = hadoop.MapReduceJob.ExecuteJob<MultiAnalyzerJob>(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("\nException: " + ex.Message); 
      } 
     } 
    } 
} 

回答

0

請確認是否所有必需的服務來運行程序的啓動和運行。 404錯誤表明程序試圖在內部訪問的某個URL不可訪問。

+0

您能否指點我解釋的任何資源,需要運行哪些服務以及如何驗證它們? –

+0

此鏈接是一個很好的參考。 https://azure.microsoft.com/en-in/documentation/articles/hdinsight-hadoop-emulator-get-started/希望你瞭解這些服務。 – Marco99

+0

是的,那些服務一直在運行。也許我應該提到我在Azure中運行映射器,而不是在仿真器上運行。在這種情況下,我懷疑這些服務是否必要。 –

1

我有另一種方式做同樣的事情,但需要多一點的努力,因爲它需要映射器和減速機文件轉移到Hadoop集羣存儲。

你需要添加Microsoft.Hadoop.Client那麼微軟Azure HDInsight NuGet包爲好。

var jobcred = new BasicAuthCredential(); 
     jobcred.UserName = "clusteruserid"; 
     jobcred.Password = "clusterpassword"; 
     jobcred.Server = new Uri("https://clusterurl"); 

StreamingMapReduceJobCreateParameters jobpara = new StreamingMapReduceJobCreateParameters() 
     { 
      JobName="mapreduce", 
      Mapper = "Mapper.exe", 
      Reducer = "Reducer.exe", 
      Input= "wasb:///mydata/input", 
      Output = "wasb:///mydata/Output", 
      StatusFolder= "wasb:///mydata/sOutput" 

     }; 
     jobpara.Files.Add("wasb:///mydata/Mapper.exe"); 
     jobpara.Files.Add("wasb:///mydata/Reducer.exe"); 


// Create a Hadoop client to connect to HDInsight. 
     var jobClient = JobSubmissionClientFactory.Connect(jobcred); 


     // Run the MapReduce job. 
     JobCreationResults mrJobResults = jobClient.CreateStreamingJob(jobpara); 


     // Wait for the job to complete. 
     Console.Write("Job running..."); 
     JobDetails jobInProgress = jobClient.GetJob(mrJobResults.JobId); 
     while (jobInProgress.StatusCode != JobStatusCode.Completed 
      && jobInProgress.StatusCode != JobStatusCode.Failed) 
     { 
      Console.Write("."); 
      jobInProgress = jobClient.GetJob(jobInProgress.JobId); 
      Thread.Sleep(TimeSpan.FromSeconds(10)); 
     } 
     // Job is complete. 
     Console.WriteLine("!"); 
     Console.WriteLine("Job complete!"); 
     Console.WriteLine("Press a key to end."); 
     Console.Read(); 

希望這有助於。我能夠在不拋出任何異常的情況下運行作業。

這其實等待的工作要完成。

+0

非常感謝。終於有效的東西! – NAS