2011-01-10 15 views

Respuesta

7

Teniendo en cuenta lo que dijo orangeoctopus (cuidado con DDOS ...) ¿has echado un vistazo al DBStorage?

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

El problema principal que veo es que cada reductor efectivamente se va a insertar en la base de datos al mismo tiempo.

Si no cree que esto sea un problema, le sugiero que escriba un custom Storage method que usa JDBC (o algo similar) para insertar directamente en la base de datos y no escribir nada en HDFS.

Si tiene miedo de realizar un ataque DDOS en su propia base de datos, quizás sea mejor recopilar los datos en HDFS y realizar una carga masiva separada en mysql.

+0

parece que no hay forma de evitar escribir una UDF que utiliza JDBC. .¡Gracias! – Christoph

2

Actualmente estoy experimentando con una aplicación de cerdo incrustado que carga resultados en mysql a través de PigServer.OpenIterator y una conexión JDBC. Ha funcionado muy bien en las pruebas, pero aún no lo he probado a escala. Esto es similar al método de almacenamiento personalizado ya sugerido, pero se ejecuta desde un solo punto, por lo que no hay un ataque DDOS accidental. De hecho, terminas pagando el costo de transferencia de red dos veces (clúster -> máquina de ensayo, máquina de ensayo -> servidor de bases de datos) si no ejecutas la carga fuera del servidor de bases de datos (personalmente prefiero no ejecutar nada excepto el propio DB fuera de la base de datos servidor), pero eso no es diferente de la opción "escribir el archivo y cargarlo a granel".

1

Intente utilizar Sqoop

+1

Si bien esto podría responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. – Kev

2

Sqoop puede ser el buen camino a seguir, pero es difícil de configurar (en mi humilde opinión) ya que todos estos proyectos relacionados Hadoop ...

DBStorage de cerdo es funciona bien (al menos para almacenar).

No se olvide de registrar el PiggyBank y el controlador de 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 

Aquí está un ejemplo de llamada:

-- 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 (?, ?)'); 
Cuestiones relacionadas