Estoy tratando de importar datos directamente desde mysql para parquet pero parece que no funciona correctamente…

Estoy usando CDH5.3 que incluye Sqoop 1.4.5.

Aquí está mi línea de comando :

sqoop import --connect jdbc:mysql://xx.xx.xx.xx/database --username username --password mypass --query 'SELECT page_id,user_id FROM pages_users WHERE $CONDITIONS' --split-by page_id --hive-import --hive-table default.pages_users3 --target-dir hive_pages_users --as-parquetfile

Luego me sale este error :

Warning: /opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
15/01/09 14:31:49 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5-cdh5.3.0
15/01/09 14:31:49 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
15/01/09 14:31:49 INFO tool.BaseSqoopTool: Using Hive-specific delimiters for output. You can override
15/01/09 14:31:49 INFO tool.BaseSqoopTool: delimiters with --fields-terminated-by, etc.
15/01/09 14:31:49 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
15/01/09 14:31:49 INFO tool.CodeGenTool: Beginning code generation
15/01/09 14:31:50 INFO manager.SqlManager: Executing SQL statement: SELECT page_id,user_id FROM pages_users WHERE  (1 = 0) 
15/01/09 14:31:50 INFO manager.SqlManager: Executing SQL statement: SELECT page_id,user_id FROM pages_users WHERE  (1 = 0) 
15/01/09 14:31:50 INFO manager.SqlManager: Executing SQL statement: SELECT page_id,user_id FROM pages_users WHERE  (1 = 0) 
15/01/09 14:31:50 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce
Note: /tmp/sqoop-root/compile/b90e7b492f5b66554f2cca3f88ef7a61/QueryResult.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
15/01/09 14:31:51 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/b90e7b492f5b66554f2cca3f88ef7a61/QueryResult.jar
15/01/09 14:31:51 INFO mapreduce.ImportJobBase: Beginning query import.
15/01/09 14:31:51 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
15/01/09 14:31:51 INFO manager.SqlManager: Executing SQL statement: SELECT page_id,user_id FROM pages_users WHERE  (1 = 0) 
15/01/09 14:31:51 INFO manager.SqlManager: Executing SQL statement: SELECT page_id,user_id FROM pages_users WHERE  (1 = 0) 
15/01/09 14:31:51 WARN spi.Registration: Not loading URI patterns in org.kitesdk.data.spi.hive.Loader
15/01/09 14:31:51 ERROR sqoop.Sqoop: Got exception running Sqoop: org.kitesdk.data.DatasetNotFoundException: Unknown dataset URI: hive?dataset=default.pages_users3
org.kitesdk.data.DatasetNotFoundException: Unknown dataset URI: hive?dataset=default.pages_users3
    at org.kitesdk.data.spi.Registration.lookupDatasetUri(Registration.java:109)
    at org.kitesdk.data.Datasets.create(Datasets.java:189)
    at org.kitesdk.data.Datasets.create(Datasets.java:240)
    at org.apache.sqoop.mapreduce.ParquetJob.createDataset(ParquetJob.java:81)
    at org.apache.sqoop.mapreduce.ParquetJob.configureImportJob(ParquetJob.java:70)
    at org.apache.sqoop.mapreduce.DataDrivenImportJob.configureMapper(DataDrivenImportJob.java:112)
    at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:262)
    at org.apache.sqoop.manager.SqlManager.importQuery(SqlManager.java:721)
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:499)
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
    at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
    at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

No tengo ningún problema en la importación de datos a la colmena formato de archivo pero parquet es un problema… ¿tiene usted alguna idea de por qué ocurre esto ?

Gracias 🙂

OriginalEl autor Taoma_k | 2015-01-09

6 Comentarios

  1. 8

    Por favor, no utilice <db>.<table> con --hive-table. Esto no funciona bien con Parquet de importación. Sqoop utiliza Kite SDK para escribir Parquet archivos y no se como esta <db>.<table> formato.

    Lugar, por favor, utilice –la colmena de la base de datos –la colmena de la tabla . para el comando, debe ser:

        sqoop import --connect jdbc:mysql://xx.xx.xx.xx/database \
        --username username --password mypass \
        --query 'SELECT page_id,user_id FROM pages_users WHERE $CONDITIONS' --split-by page_id \
        --hive-import --hive-database default --hive-table pages_users3 \
        --target-dir hive_pages_users --as-parquetfile
    

    OriginalEl autor Yibing

  2. 4

    Aquí está mi cartera en la CDH 5.5 para importar desde una jdbc en la Colmena de parquet archivos.
    JDBC origen de datos de Oracle, pero la siguiente explicación se ajusta MySQL.

    1) Sqoop:

    $ sqoop import --connect "jdbc:oracle:thin:@(complete TNS descriptor)" \
        --username MRT_OWNER -P \
        --compress --compression-codec snappy \
        --as-parquetfile \
        --table TIME_DIM \
        --warehouse-dir /user/hive/warehouse \
        --num-mappers 1
    

    Elegí –num-cartógrafos como 1 porque TIME_DIM de la tabla, sólo alrededor de ~20k filas, y no es aconsejado para dividir parquet de tabla en varios archivos para un pequeño conjunto de datos. Cada mapper crea una salida independiente (parquet) archivo.

    (ps. para los usuarios de Oracle: he tenido que conectar como propietario de la tabla de origen, de lo contrario tenía que especificar «MRT_OWNER.TIME_DIM», y fue recibiendo el error org.kitesdk.de datos.ValidationException: espacio de Nombres MRT_OWNER.TIME_DIM no es alfanumérico ( ‘ _ ‘ ), parece un sqoop error).

    (ps2. Nombre de la tabla tenía que estar todo en mayúsculas.. no estoy seguro si esto es Oracle específico (no debería ser) y si este es otro sqoop error).

    (ps3. –compress –de compresión-codec snappy parámetros fueron reconocidos, pero al parecer, no se hizo ningún efecto)

    2) comando Anterior crea un directorio llamado

    /user/hive/warehouse/TIME_DIM
    

    Es una buena idea para moverlo a una específica de la Colmena directorio de base de datos, por ejemplo:

    $ hadoop fs -mv /hivewarehouse/TIME_DIM /hivewarehouse/dwh.db/time_dim
    

    Asumiendo el nombre de la Colmena de la base de datos/esquema es «dwh».

    3) Crear la Colmena de la tabla, tomando esquema directamente de parquet de archivo:

    $ hadoop fs -ls /user/hive/warehouse/dwh.db/time_dim | grep parquet
    
    -rwxrwx--x+  3 hive hive       1216 2016-02-04 23:56 /user/hive/warehouse/dwh.db/time_dim/62679a1c-b848-426a-bb8e-9372328ddad7.parquet
    

    Si el comando anterior devuelve más de parquet archivo (lo que significa que había más de un mapper, el –num-mappers parámetro), usted puede elegir cualquier de parquet archivo en el siguiente comando.

    Este comando se debe ejecutar en el Impala y no en la Colmena. Colmena en la actualidad no se puede inferir esquema de parquet archivos, pero Impala puede:

    [impala-shell] > CREATE TABLE dwh.time_dim
    LIKE PARQUET '/user/hive/warehouse/dwh.db/time_dim/62679a1c-b848-426a-bb8e-9372328ddad7.parquet'
    COMMENT 'sqooped from MRT_OWNER.TIME_DIM'
    STORED AS PARQUET
    LOCATION     'hdfs:///user/hive/warehouse/dwh.db/time_dim'
    ;
    

    ps. También es posible inferir esquema de parquet usando Chispa, por ejemplo,

    spark.read.schema('hdfs:///user/hive/warehouse/dwh.db/time_dim')
    

    4) Ya que la tabla no se creó en la Colmena (que recoge las estadísticas de forma automática), es una buena idea para recopilar estadísticas:

    [impala-shell] > compute stats dwh.time_dim;
    

    https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_import_literal

    Excelentemente ilustrado.

    OriginalEl autor Tagar

  3. 0

    Parece la base de datos apoyo que falta en su distribución. Parece que fue agregado recientemente. Pruebe a establecer --hive-table a --hive-table pages_users3 y la eliminación de --target-dir.

    Si lo anterior no funciona, prueba:

    1. Este blog.
    2. La docs.
    3. De verificación con el [email protected] lista de correo.
    a partir de la documentación:la importación de una forma libre consulta, debe especificar un directorio de destino con –target-dir.

    OriginalEl autor abeaamase

  4. 0

    He encontrado una solución, yo droppped todas las partes de la colmena y utilizar el objetivo de directorios para almacenar los datos… Parece que funciona :

    sqoop import --connect jdbc:mysql://xx.xx.xx.xx/database --username username --password mypass --query 'SELECT page_id,user_id FROM pages_users WHERE $CONDITIONS' --split-by page_id --target-dir /home/cloudera/user/hive/warehouse/soprism.db/pages_users3 --as-parquetfile -m 1
    

    Yo, a continuación, el enlace al directorio de hacer una tabla externa de Impala…

    OriginalEl autor Taoma_k

  5. 0

    –como-parquetfile

    fue añadido en Sqoop 1.4.6 (CDH 5.5).

    OriginalEl autor Tagar

  6. 0

    (ps. para los usuarios de Oracle: he tenido que conectar como propietario de la tabla de origen, de lo contrario tenía que especificar «MRT_OWNER.TIME_DIM», y fue recibiendo el error org.kitesdk.de datos.ValidationException: espacio de Nombres MRT_OWNER.TIME_DIM no es alfanumérico ( ‘ _ ‘ ), parece un sqoop error).

    Esto puede ser solucionado si la base de datos de nombre y el nombre de la tabla se escribe como db_name/table_name en lugar de db_name.table_name.

    OriginalEl autor Pnkzz

Dejar respuesta

Please enter your comment!
Please enter your name here