2012-10-01 7 views
18

Da quello che ho capito, Hadoop è un sistema di storage distribuito. Tuttavia quello che non ottengo è, possiamo sostituire il normale RDBMS (MySQL, Postgresql, Oracle) con Hadoop? O Hadoop è solo un altro tipo di filesystem e possiamo eseguire RDBMS su di esso?Hadoop e Django, è possibile?

Inoltre, è possibile integrare Django con Hadoop? Di solito, come i framework web (ASP.NET, PHP, Java (JSP, JSF, ecc.) Si integrano con Hadoop?

Sono un po 'confuso con Hadoop vs RDBMS e gradirei qualsiasi spiegazione. (Mi dispiace, ho letto la documentazione molte volte, ma forse a causa della mia mancanza di conoscenza in inglese, trovo la documentazione un po 'confusa per la maggior parte del tempo)

+0

Non ho usato Hadoop. Ho appena letto la prima pagina. Penso che sia solo una soluzione per filesystem. Non sostituirà un RDBMS e potrebbe non funzionare bene con uno. Penso che mettere un database su un'unità logica distribuita su più macchine possa causare seri problemi di prestazioni; questo richiede maggiori ricerche se hai intenzione di provarlo. – dokkaebi

+0

Hadoop funziona su semplici file di grandi dimensioni e non ha indicizzazione. Se vuoi un accesso casuale ai dati hai bisogno di HBase. Entrambi si basano su HDFS, che gestisce file enormi in un cluster. Darò una spiegazione migliore più tardi :-) – romedius

+0

@romedius per favore, non posso aspettare :). Finora tutte le letture che ho passato mi rendono più confuso. –

risposta

21

Che cos'è Hadoop?

Immagina la seguente sfida: hai molti dati e con molto intendo almeno Terabyte. Vuoi trasformare questi dati o estrarre alcune informazioni ed elaborarle in un formato che viene indicizzato, compresso o "digerito" in modo da poter lavorare con esso.

Hadoop è in grado di parallelizzare un tale processo di elaborazione e, qui viene la parte migliore, si occupa di cose come la memorizzazione ridondante dei file, la distribuzione dell'attività su diversi computer sul cluster ecc. (Sì, è necessario un cluster , altrimenti Hadoop non è in grado di compensare la perdita di prestazioni del framework).

Se osservi per la prima volta l'ecosistema di Hadoop troverai 3 grandi termini: HDFS (Hadoop Filesystem), Hadoop stesso (con MapReduce) e HBase (il "database" a volte colonna, che non si adatta esattamente)

HDFS è il filesystem utilizzato da Hadoop e HBase. È un ulteriore livello in cima al normale filesystem degli host. HDFS suddivide i file caricati in blocchi (in genere 64 MB) e li mantiene disponibili nel cluster e si occupa della loro replica.

Quando Hadoop ottiene un'attività da eseguire, ottiene il percorso dei file di input su HDFS, il percorso di output desiderato, un Mapper e una Classe di riduzione. Il Mapper e il Reducer sono di solito una classe Java passata in un file JAR (ma con Hadoop Streaming è possibile utilizzare qualsiasi strumento di comando che si desidera). Il mappatore viene chiamato per elaborare ogni voce (di solito per riga, ad esempio: "restituisce 1 se la riga contiene una parola F * non valida") dei file di input, l'output viene passato al riduttore, che unisce i singoli output in un desiderato altro formato (es .: aggiunta di numeri). Questo è un modo semplice per ottenere un contatore di "parolacce".

La cosa interessante: il calcolo della mappatura viene eseguito sul nodo: si elaborano i blocchi in modo lineare e si spostano solo i dati semi-digeriti (di solito più piccoli) sulla rete verso i riduttori.

E se uno dei nodi muore: ce n'è un altro con gli stessi dati.

HBase sfrutta la memoria distribuita dei file e memorizza le sue tabelle, suddivise in blocchi sul cluster. HBase dà, contrariamente a Hadoop, accesso casuale ai dati.

Come vedete HBase e Hadoop sono molto diversi da RDMBS. Inoltre a HBase mancano molti concetti di RDBMS. La modellazione dei dati con trigger, dichiarazioni preparate, chiavi esterne ecc. Non è la cosa che HBase pensava di fare (non sono sicuro al 100%, quindi correggimi ;-))

Can Django integrato con Hadoop?

Per Java è semplice: Hadoop è scritto in Java e tutte le API sono lì, pronte per l'uso.

Per Python/Django non lo so (ancora), ma sono sicuro che si può fare qualcosa con Hadoop streaming/Jython come ultima risorsa. Ho trovato il seguente: Hadoopy e Python in Mappers and Reducers.

+0

P.s .: Aggiungerò alcuni link ad esso più tardi :-) – romedius

+0

Fantastica spiegazione. Quindi, solo per curiosità, HBase è più probabile dello stesso RDMS? (Intendo curva di apprendimento, familiarità, ecc.) –

+2

HBase può essere considerato un database (il suo NoSQL! Yay!), Hadoop stesso è più simile a un mostruoso motore di elaborazione dati su un file system distribuito. Alcune persone abusano di Hbase e Hbase per casi d'uso di Data Warehousing. Se questo è l'approccio giusto fa parte di un'altra discussione. – romedius

1

di base (!) Esempio di integrazione Django con Hadoop [LINK RIMOSSO]

Io uso Oozie REST API per l'esecuzione del lavoro, e 'Hadoop gatto' per afferrare i risultati di posti di lavoro (a causa di HDFS' natura distribuita). La migliore app è usare qualcosa come Hoop per ottenere dati HDFS. Ad ogni modo, questa non è una soluzione semplice.

P.S. Ho refactored questo codice e lo ho inserito in https://github.com/Obie-Wan/django_hadoop. Ora è un'app django separata.

+0

Come si usa? Potresti aggiungere qualche documento per favore? – lizzie

+0

Aggiornato il file README. Sentiti libero di aggiungere un problema con le tue domande su github. In bocca al lupo. –

3

Django può connettersi con la maggior parte di RDMS, quindi è possibile utilizzarlo con una soluzione basata su Hadoop.

Ricorda, Hadoop è molte cose, quindi in particolare, vuoi qualcosa con bassa latenza come HBase, non provare a usarlo con Hive o Impala.

Python ha un'associazione basata sulla deriva, base intelligente, che consente di interrogare Hbase.