2011-01-10 7 views

risposta

7

Tenendo presente ciò che ha detto orangeoctopus (attenzione al DDOS ...) hai dato un'occhiata a DBStorage?

data = LOAD '...' AS (...); 
... 
STORE data INTO DBStorage('com.mysql.jdbc.Driver', 'dbc:mysql://host/db', 'INSERT ...'); 
4

Il problema principale che vedo è che ogni riduttore verrà effettivamente inserito nel database nello stesso momento.

Se non si pensi che questo sarà un problema, vi consiglio di scrivere un custom Storage method che utilizza JDBC (o qualcosa di simile) per inserire nel database direttamente e scrivere nulla fuori di HDFS.

Se si ha paura di eseguire un attacco DDOS nel proprio database, sarebbe forse meglio raccogliere i dati su HDFS ed eseguire un caricamento di massa separato in mysql.

+0

Sembra che ci sia alcun modo per aggirare la scrittura di un UDF che utilizza JDBC. .Grazie! – Christoph

2

Attualmente sto sperimentando un'applicazione per maiali incorporati che carica i risultati in mysql tramite PigServer.OpenIterator e una connessione JDBC. Ha funzionato molto bene nei test, ma non l'ho ancora provato su scala. Questo è simile al metodo di archiviazione personalizzato già suggerito, ma viene eseguito da un singolo punto, quindi nessun attacco DDOS accidentale. Si finisce per pagare il costo del trasferimento di rete due volte (cluster -> staging machine, staging machine -> server DB) se non si esegue il caricamento dal server DB (personalmente preferisco non eseguire nient'altro che il DB stesso dal DB server), ma non è diverso dall'opzione "scrivi il file e lo carica in blocco".

1

Provare a utilizzare Sqoop

+1

Sebbene ciò possa teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackexchange.com/q/8259) includere qui le parti essenziali della risposta e fornire il link per riferimento. – Kev

2

Sqoop può essere il buon modo per andare, ma è difficile da set-up (secondo me) come tutti questi progetti Hadoop relativi ...

di maiale DBStorage è funzionante bene (almeno per la conservazione).

Non dimenticare di registrare il PiggyBank e il driver di MySQL:

-- Register Piggy bank 
REGISTER /opt/cmr/pig/pig-0.10.0/lib/piggybank.jar; 

-- Register MySQL driver 
REGISTER /opt/cmr/mysql/drivers/mysql-connector-java-5.1.15-bin.jar 

Ecco un esempio di richiamo:

-- Store a relation into a SQL table 
STORE relation INTO 'unused' USING org.apache.pig.piggybank.storage.DBStorage('com.mysql.jdbc.Driver', 'jdbc:mysql://<mysqlserver>/<database>', '<login>', '<password>', 'REPLACE INTO <table> (<column1>, <column2>) VALUES (?, ?)'); 
Problemi correlati