2014-12-09 7 views
5

Ich versuche, einen MapReduce-Auftrag an den HDInsight-Cluster zu senden. In meinem Job habe ich keine Reduzierung geschrieben, weil ich nichts reduzieren möchte. Alles, was ich tun möchte, ist, jeden Dateinamen zu analysieren und die Werte an jede Zeile in der Datei anzuhängen. Damit ich alle benötigten Daten in der Datei habe.C# MapReduce-Auftrag einreichen Windows Azure HDInsight - Der Antwortstatuscode zeigt keinen Erfolg an: 500 (Serverfehler)

Mein Code ist

using Microsoft.Hadoop.MapReduce; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace GetMetaDataFromFileName 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var hadoop = connectAzure(); 

      //Temp Workaround to Env Variables 
      Environment.SetEnvironmentVariable("HADOOP_HOME", @"c:\hadoop"); 
      Environment.SetEnvironmentVariable("Java_HOME", @"c:\hadoop\jvm"); 

      var result = hadoop.MapReduceJob.ExecuteJob<MetaDataGetterJob>(); 
     } 

     static IHadoop connectAzure() 
     { 
      //TODO: Update credentials and other information 
      return Hadoop.Connect(
       new Uri("https://sampleclustername.azurehdinsight.net//"), 
       "admin", 
       "Hadoop", 
       "password", 
       "blobstoragename.blob.core.windows.net", //Storage Account that Log files exists 
       "AccessKeySample", //Storage Account Access Key 
       "logs", //Container Name 
       true 
       ); 
     } 

     //Hadoop Mapper 
     public class MetaDataGetter : MapperBase 
     { 
      public override void Map(string inputLine, MapperContext context) 
      { 
       try 
       { 
        //Get the meta data from name of the file 
        string[] _fileMetaData = context.InputFilename.Split('_'); 

        string _PublicIP = _fileMetaData[0].Trim(); 
        string _PhysicalAdapterMAC = _fileMetaData[1].Trim(); 
        string _BootID = _fileMetaData[2].Trim(); 
        string _ServerUploadTime = _fileMetaData[3].Trim(); 
        string _LogType = _fileMetaData[4].Trim(); 
        string _MachineUpTime = _fileMetaData[5].Trim(); 

        //Generate CSV portion 
        string _RowHeader = string.Format("{0},{1},{2},{3},{4},{5},", _PublicIP, _PhysicalAdapterMAC, _BootID, _ServerUploadTime, _LogType, _MachineUpTime); 

        //TODO: Append _RowHeader to every row in the file. 
        context.EmitLine(_RowHeader + inputLine); 
       } 
       catch(ArgumentException ex) 
       { 
        return; 
       } 
      } 
     } 

     //Hadoop Job Definition 
     public class MetaDataGetterJob : HadoopJob<MetaDataGetter> 
     { 
      public override HadoopJobConfiguration Configure(ExecutorContext context) 
      { 
       //Initiate the job config 
       HadoopJobConfiguration config = new HadoopJobConfiguration(); 
       config.InputPath = "asv://[email protected]/Input"; 
       config.OutputFolder = "asv://[email protected]/Output"; 
       config.DeleteOutputFolder = true; 
       return config; 
      } 
     } 
    } 
} 

der Regel, was tun Sie, was der Grund von 500 (Server Error)? Erhalte ich falsche Zugangsdaten? Eigentlich habe ich den Unterschied zwischen Benutzername und HadoopUser Parameter in Hadoop.Connect Methode nicht wirklich verstanden?

Danke,

+0

irgendwelche Verbesserungen an diesem? – Rengasamy

Antwort

1

Ich hatte ungefähr gleiches Problem in der Vergangenheit (konnte nicht hive Auftrag an den Cluster mit BadGateway Antwort einreichen). Ich habe das Support-Team kontaktiert und in meinem Fall lag das Problem im Speicherverlust am Hauptknoten, was bedeutet, dass das Problem nicht auf der Seite des Clients war und es scheint, dass es ein geerbtes Hadoop-Problem ist.

Ich habe dieses Problem durch erneute Bereitstellung des Clusters gelöst. Haben Sie versucht, andere Jobs (einfache) einzureichen? Wenn ja, dann schlage ich vor, einen Kontakt mit dem azurischen Support-Team zu haben oder den Cluster einfach erneut bereitzustellen, wenn es für Sie nicht schmerzhaft ist.