2010-08-16 11 views
12

Sto lavorando a una soluzione in cui avrò un cluster Hadoop con Hive in esecuzione e voglio inviare i lavori e le query hive da un'applicazione .NET per essere elaborati e ricevere una notifica quando sono fatti. Non riesco a trovare alcuna soluzione per l'interfaccia con Hadoop diversa da quella direttamente da un'app Java, esiste una API a cui posso accedere che non sto trovando?Come connettersi a Hadoop/Hive da .NET

risposta

9

A quanto pare è possibile collegarsi ad Hadoop con soluzioni non Java - vedere Do I have to write my application in Java?

+0

Ah, sapeva in streaming (ma che funziona dalla riga di comando) - ma non sapevo sui Tubi Hadoop che è SWIG compatibile quindi dovrei essere in grado di generare un C# API in cima esso. –

3

Thrift API è anche un altro modo per altra lingua per accedere HDFS e hive

8

Con Hadoop: non c'è modo dritto per connettersi da C# perché il livello di comunicazione Hadoop funziona solo con java e non è multipiattaforma. Probabilmente è possibile, ma in modi non banali. So che c'è una patch per aggiungere il supporto dei protocol buffer per Hadoop ma al momento della scrittura (agosto 2011) non è ancora stato rilasciato.

Con Hive la situazione è migliore perché Hive ha un'interfaccia Thrift che supporta C#. È possibile scaricare interfacce Hive Thrift e generare client C# da soli, ma attenzione che richiede l'hacking del codice generato. Invece ti consiglierei di scaricare dll da https://bitbucket.org/vadim/hive-sharp/downloads/hive-sharp-lib.dll o usare Nuget package manager, cercare "hive": http://nuget.org/List/Packages/Hive.Sharp.Lib Disclaimer: I'm the author.

7
  1. C'è il driver ODBC Hortonworks. Non l'ho usato personalmente, ma ti permetterà di lavorare con hive come con qualsiasi altra origine dati ODBC. È possibile utilizzare la classe OdbcConnection per connettersi a Hive dopo aver installato il driver ODBC.

  2. Come indicato in altre risposte, è possibile utilizzare l'api di deriva. Per questo è necessario generare classi C# dai file di definizione dell'interfaccia, che è possibile scaricare dal repository di origine Hive. Questo approccio funziona per me.

  3. È possibile utilizzare IKVM per convertire le librerie java del client hadoop in assiemi .Net che è possibile utilizzare da C#. Non ho usato IKVM con il client Hive, ma ho IKVMed un'altra libreria client hadoop e sorprendentemente ha funzionato.

EDIT:

  1. C'è anche Apache Templeton, che permette di inviare i lavori di Hive (Pig e MR anche) utilizzando l'interfaccia Rest. Il problema è che genera un'altra attività sulla mappa per inviare il lavoro Hive, il che lo rende più lento.
3

E 'possibile accedere Hive utilizzando C#, facendo uso di connettori ODBC di Microsoft. Scaricare il pacchetto Nuget per "Microsoft.Hadoop.Hive" e seguire l'esempio fornito a http://msdn.microsoft.com/en-us/library/dn749834.aspx

Il trucco sta nel costruire la stringa di connessione ad agganciare. Il modo migliore che ho trovato è stato scaricare il driver Microsoft Hive ODBC (http://www.microsoft.com/en-us/download/details.aspx?id=40886), installarlo, quindi utilizzare Server Explorer in Visual Studio per aggiungere una nuova connessione, quindi creare la stringa di connessione per me.Per fare questo, ho usato le seguenti operazioni:

  • modificare l'origine dati di "origine dati ODBC di Microsoft" e assicurarsi che si sta utilizzando il "dati .NET Framework per ODBC", come fornitore di dati.

Change Data Source Dialog Window

  • Sotto la parte "specifica fonte dei dati", selezionare la casella "Usa stringa di connessione", quindi fare clic sul pulsante "Crea".

Add Connection Dialog Window

  • Nella scheda "Origine dati", selezionare il nome di origine di dati "Sample Microsoft Hive DSN", quindi fare clic sul pulsante "OK".

Select Data Source Dialog Window

  • una finestra dal titolo "Dialogo Microsoft Hive driver ODBC Connection" si aprirà. Immettere una descrizione facoltativa, quindi digitare il percorso del server Hive, la porta che si intende utilizzare e il database a cui deve connettersi. Indicare il tipo di server Hive e specificare un meccanismo di autenticazione da utilizzare, quindi compilare i campi appropriati.

Microsoft Hive ODBC Driver Connection Dialog Window

  • Infine, fare clic sul pulsante "Test" nella parte inferiore per garantire che siete in grado di connettersi correttamente. In caso di successo, fai clic sul pulsante "OK", quindi tornerai nella finestra "Modifica connessione". Inserisci qui le informazioni di accesso per il tuo servizio Hive.

Utilizzare questa origine dati o copiare la stringa di connessione che è stata creata per l'utente e utilizzarla all'interno dell'applicazione.

+0

Può essere utilizzato per scrivere dati su hdf anziché su hive? –

0

biblioteca Usa Hbase.Net da https://hbasenet.codeplex.com/

Quindi è possibile connettersi a HBase/alveare come illustrato di seguito:

 Client c = new Client("10.20.14.179", 9090, 1000000); 

     var cli = c.TotalClients; 

     var tableList = c.GetTableNames(); 

FYI, stiamo usando Hortonworks sandbox e collega bene.

Nell'esempio precedente, 10.20.14.179 è host e 9090 è porta.

Inoltre, qui di seguito potrebbe aiutare da https://community.hortonworks.com/questions/25101/is-there-a-way-to-connect-to-hbase-using-c.html

Non c'è nativo C# HBase cliente. tuttavia, ci sono diverse opzioni per interagire con HBase da C#.

  1. C# HBase Thrift cliente - Thrift permette di definire endpoint del servizio e modelli di dati in un formato comune e l'utilizzo di generatori di codice per creare binding in lingua originale. HBase fornisce un server di Thirft e definizioni . Esistono molti esempi online per la creazione di un client di risparmio energetico C# HBase .

  2. Marlin - Marlin è un client C# per l'interazione con Stargate (API REST HBase ) che alla fine è diventato hbase-sdk-for-net. Non ho provato lo stesso contro HBase 1.x +, ma considerando che utilizza Stargate, mi aspetto che funzioni. Se si prevede di utilizzare Stargate e implementare il proprio client, che raccomanderei su Thrift, assicurarsi di utilizzare protobufs per evitare l'overhead di serializzazione JSON . L'utilizzo di un approccio basato su HTTP semplifica inoltre le richieste di bilanciamento del carico su più gateway.

  3. Phoenix Query Server - Phoenix è uno skin SQL su HBase. Phoenix Query Il server è un'API REST per l'invio di query SQL a Phoenix. Ecco codice di esempio, tuttavia, non l'ho ancora testato.

  4. Driver ODBC Simba HBase - Utilizzo di ODBC per connettersi a HBase. Ho sentito il feedback positivo su questo approccio, specialmente da strumenti come il Tableau . Questo non è open source e richiede l'acquisto di una licenza.