Cómo importar datos de hdfs a mysql a través de sqoop
sqoop es una herramienta que puede transferir datos entre bases de datos relacionales y HDFS. Aquí, escribo un programa Java para implementar sqoop para escribir datos de HDFS a MYSQL.
Antes de entrar en contacto con sqoop, yo mismo escribí una clase de transmisión para implementar datos de HDFS a MYSQL. Aquí hay una breve introducción a la idea del tiempo:
1. Cree una tabla de parámetros A en MYSQL para registrar el nombre de la tabla B y los campos de la tabla que se transferirán.
2. El formato de los datos en HDFS es el mismo que el número de campos en la tabla B en la tabla de parámetros A en MYSQL.
3. Lea la tabla B que se transferirá desde la tabla de parámetros A de MYSQL. Coloque estos campos en una instrucción de inserción, por ejemplo
, en insert into b(column1, column2..) value(value1, value2...)
4. El directorio correspondiente lee los datos línea por línea e importa los datos a la tabla B de MYSQL en lotes a través de JDBC.
Ahora uso sqoop para reemplazar la función de transmisión original. Primero haga un poco de trabajo de preparación:
1. Debe haber un paquete jar de mysql y un paquete jar de sqoop en la carpeta lib debajo de cada nodo de hadoop.
2. El formato de datos en un directorio en HDFS es consistente con el número de campos en la tabla correspondiente en MYSQL.
Las clases de implementación son las siguientes:
paquete sqoop;
importar java .util.ArrayList;
importar java.util. Lista;
importar org.apache.hadoop.conf.Configuration;
importar org.apache.sqoop.Sqoop;
importar org.apache.sqoop. tool.ExportTool ;
/**
* Utilice SQOOP para importar datos de HDFS a MYSQL.
* */
prueba de clase pública {
public static void main(String[] args) {
Listlt; generadoJarsList = new ArrayListlt; Stringgt ();
Configuración conf = nueva Configuración();
conf.set("fs.default.name", "hdfs://master :9000");
conf.set("hadoop.job.ugi", "hadooper,hadoopgroup");
conf.set("mapred.job.tracker", "master: 9001");
ArrayListlt; Stringgt; list = new ArrayListlt (); //Definir una lista
list.add("--table") ;
list.add("a_baat_client"); //Tabla en mysql. Los datos se importarán a esta tabla en el futuro.
list.add("--export-dir");
list.add("/tmp/datatres/"); //Directorio en HDFS. Los datos de este directorio deben importarse a la tabla a_baat_client.
list.add("--connect");
list.add("jdbc:mysql://192.168.1.10:3306/report");
list.add("--nombre de usuario");
list.add("root"); //nombre de usuario mysql
list add(" --contraseña");
list.add("root"); //contraseña de mysql
list.add("--lines-terminate-by"); p>
list.add("\\n"); //Símbolo de nueva línea de datos
list.add("-m");
list.add( "1"); //Definir el número de mapreduce.
String[] arg = new String[1];
ExportTool exportador = new ExportTool();
Sqoop sqoop = new Sqoop(exportador);
sqoop.setConf(conf);
arg = list.toArray(new String[0]);
int resultado = Sqoop.runSqoop(sqoop, arg );
System.out.println("res:" result); //Imprime el resultado de la ejecución.
}
}
Durante la ejecución de esta clase de exportación, puede consultar la página http://master:50030 en el navegador. Descubrirá que exportar datos también es un proceso de convertir tareas en ejecución de mapreduce.
Por supuesto, el código Java anterior también se puede implementar mediante la línea de comando. El comando es el siguiente:
bin/sqoop export --connect jdbc:mysql://192.168.1.10:3306/report \
--table a_baat_client --nombre de usuario root - -contraseña raíz \
--export-dir /tmp/datatres/ -m 1
Se trata de que sqoop importe datos de HDFS a MYSQL. Importar datos de HIVE a MYSQL en realidad puede entenderse como importar los datos de la ruta HDFS correspondiente a la tabla HIVE a MYSQL, por lo que no entraré en detalles aquí.