2014-12-09 8 views
5

Sto tentando di inviare un processo MapReduce al cluster HDInsight. Nel mio lavoro non ho scritto riduzioni perché non voglio ridurre nulla. Tutto quello che voglio fare è analizzare il nome di ciascun file e aggiungere i valori a ogni riga del file. In modo che avrò tutti i dati necessari all'interno del file.Invia C# MapReduce Job Windows Azure HDInsight - Il codice di stato della risposta non indica il successo: 500 (Errore server)

mio codice è

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; 
      } 
     } 
    } 
} 

Di solito quello che ti cosa la ragione di 500 (Errore del server)? Sto fornendo le credenziali sbagliate? In realtà non ho davvero capito la differenza tra i parametri Username e HadoopUser nel metodo Hadoop.Connect?

Grazie,

+0

eventuali miglioramenti su questo? – Rengasamy

risposta

1

ho avuto circa stesso problema in passato (è stato in grado di presentare lavoro alveare al cluster con la risposta BadGateway). Ho contattato il team di supporto e nel mio caso il problema era in perdita di memoria sul nodo principale, il che significa che il problema non era da parte del cliente e sembra essere stato ereditato dal problema di hadoop.

Ho risolto quella roba ridistribuendo il cluster. Hai provato a inviare altri lavori (quelli semplici)? Se è così, allora suggerisco di avere un contatto con il team di supporto di Azure o semplicemente ridistribuire il cluster se non è doloroso per te.

Problemi correlati