MySQL JDBC Driver
Oracle JDBC Driver
Microsoft SQL Server JDBC Driver
curl -L 'http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.0.2206.100_enu.tar.gz' | tar xz
PostgreSQL JDBC Driver
curl -L 'http://jdbc.postgresql.org/download/postgresql-9.2-1002.jdbc4.jar' -o postgresql-9.2-1002.jdbc4.jar
Luego copiaremos el jar que se encuentra en sqljdbc_4.0/enu/sqljdbc4.jar en /var/lib/sqoop ( puede requerir un reinicio)
Con esto ya podremos realizar la conexión
Para comprobar si funciona listaremos las bases de datos ( en el caso de sqlserver, en el resto de la misma manera cambiando la información del conector ):
sqoop list-databases --connect jdbc:sqlserver://: --username --password
Para realizar la importación a Hdfs :
sqoop import --connect "jdbc:sqlserver://
: ;database=;username= ;password= " --table
Para realizar la importación a Hive directamente
sqoop import --connect "jdbc:sqlserver://
;database= ;username= ;password= " --table --hive-import
Si queremos realizar una importación de todas las tablas que contiene una base de datos, podemos hacer :
sqoop import-all-tables --connect "jdbc:sqlserver://ip:puerto;databalse=nombreDB;username=user;password=pass"
Si alguna de las tablas no tiene primaryKey tenemos dos opciones, definir por que campo diferenciaremos con -split-by o marcar que en vez de ejecutar los 4 maps que arranca por defecto sqoop, lo hagamos con un solo map con la instrucción -m 1, de esta manera no será necesario realizar los splits de la entrada del map y todo se tratara en el mismo map task.
También podemos excluir alguna de las tablas que queramos al hacer toda la importación mediante el argumento --exlclude-table nombretaba1,nombretabla2...
De esta manera la instrucción para importar todas las tablas de una bd a hive menos una, con alguna que no contenga primarykey, quedaría así :
sqoop import-all-tables --connect "jdbc:sqlserver://ip:puerto;databalse=nombreDB;username=user;password=pass" -m 1 --exclude-table nombretabla --hive-import
Los hdfs importados se guardarán en hive/warehouse y veremos que solo contienen un part-m-00000 correspondiente a cada una de las tablas que hemos importado
Para crear una tabla en hive igual que la que tenemos en la base de datos haremos :
sqoop create-hive-table --connect "jdbc:sqlserver://ip:puerto;databalse=nombreDB;username=user;password=pass" --table NombreDeLaTabla
La instrucción creará la estructura de la misma forma que en nuestra BD relacional pero no importara los datos que esta contenga.
Para cargar los datos des de un hdfs (que puede haber sido cargado previamente con sqoop en hdfs) a una tabla de hive haremos (previamente estaremos en el hive shell ) :
hive>LOAD DATA INPATH "nombredelHdfs" INTO TABLE nombreDeLaTabla
Si los datos a cargar están de manera local en nuestro filesystem, haremos :
hive>LOAD DATA LOCAL INPATH "nombredelarchivo" INTO TABLE nombreDeLaTabla
Veamos ahora un contenido un poco mas avanzado
Una alternativa si no queremos importar toda una tabla y queremos hacerlo a medida mediante una query propia pasa por introducir el parametro -query en la instrucción, en este caso también deberíamos introducir --split-by, veamos un ejemplo :
sqoop import --connect "jdbc:sqlserver://192.168.7.128:1433;database=Selenium;username=sa;password=P@ssw0rd" --query 'SELECT Resultado.idResultado, Paso.idPaso, Resultado.Fecha, Resultado.TiempoPaso,Test.idTest, Resultado.idGrupTest, Browser.Nombre,Calendario.EveryXMinutes, Resultado.idError, Resultado.errorMsg from Resultado INNER JOIN Paso ON Resultado.idPaso = Paso.idPaso INNER JOIN Test ON Resultado.idTest = Test.idTest INNER JOIN Browser ON Test.Browser = Browser.id INNER JOIN TestCalendario ON Resultado.idTest = TestCalendario.idTest INNER JOIN Calendario ON TestCalendario.idCalendario = Calendario.idCalendario WHERE $CONDITIONS' --split-by Resultado.idTest --incremental append --check-column idResultado --target-dir /dfs/sqlData/Resultado
disculpen, que ip debo meter ?
ResponderEliminarLa de tu servidor de base de datos
Eliminar