2017-10-05 3 views
0

Je veux importer des données Mysql-HDFS avec Sqoop2Sqoop2 n'a pas l'importation de MySQL à HDFS avec « causés par: java.lang.ClassCastException: java.math.BigInteger ne peut pas être jeté à java.lang.Long »

Ma table ressemble

CREATE TABLE `campaign` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(128) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

J'ai créé 2 liens

sqoop:000> show link 
+----+-------+--------------+------------------------+---------+ 
| Id | Name | Connector Id |  Connector Name  | Enabled | 
+----+-------+--------------+------------------------+---------+ 
| 2 | hdfs | 3   | hdfs-connector   | true | 
| 7 | mysql | 1   | generic-jdbc-connector | true | 
+----+-------+--------------+------------------------+---------+ 

J'ai créé travail avec

Table SQL statement: SELECT id, name FROM campaign WHERE ${CONDITIONS} 

Aussi j'ai essayé cette déclaration sql - elle aussi n'a pas

Table SQL statement: SELECT cast(id as UNSIGNED INTEGER) id, name FROM campaign WHERE ${CONDITIONS} 

Mon travail ressemble à:

sqoop:000> show job 
+----+-----------------+----------------+--------------+---------+ 
| Id |  Name  | From Connector | To Connector | Enabled | 
+----+-----------------+----------------+--------------+---------+ 
| 4 | campaign_import | 1    | 3   | true | 
+----+-----------------+----------------+--------------+---------+ 

J'ai couru avec succès ce travail

sqoop:000> start job -j 4 

Et puis j'ai attrapé l'erreur sur mes mappers

Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long at

Texte intégral de l'erreur ressemble

Error: org.apache.sqoop.common.SqoopException: MAPRED_EXEC_0017:Error occurs during extractor run at org.apache.sqoop.job.mr.SqoopMapper.run(SqoopMapper.java:99) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1917) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long at org.apache.sqoop.connector.common.SqoopIDFUtils.toCSVFixedPoint(SqoopIDFUtils.java:133) at org.apache.sqoop.connector.common.SqoopIDFUtils.toCSV(SqoopIDFUtils.java:588) at org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.toCSV(CSVIntermediateDataFormat.java:116) at org.apache.sqoop.connector.idf.CSVIntermediateDataFormat.setObjectData(CSVIntermediateDataFormat.java:87) at org.apache.sqoop.job.mr.SqoopMapper$SqoopMapDataWriter.writeArrayRecord(SqoopMapper.java:125) at org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract(GenericJdbcExtractor.java:96) at org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract(GenericJdbcExtractor.java:38) at org.apache.sqoop.job.mr.SqoopMapper.run(SqoopMapper.java:95) ... 7 more 

Il ressemble à problème de id de type (bigint) dans campaign table, mais je ne sais pas comment le résoudre sans changer ce type de champ:

Peut-être que quelqu'un a une idée?

Répondre

0

Il fonctionne pour moi quand j'ai changé de table instruction SQL pour

SELECT cast(id as SIGNED INTEGER) id, name FROM campaign WHERE ${CONDITIONS} 

Je regardais de plus près et vu que

1) avec table instruction SQL: SELECT id, name FROM campaign WHERE ${CONDITIONS} J'ai attrapé erreur:

Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long

2) Avec le tableau instruction SQL: SELECT cast(id as UNSIGNED INTEGER) id, name FROM campaign WHERE ${CONDITIONS} J'ai attrapé erreur:

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

Alors problème était avec la coulée et je dois jeter BIGINT-SIGNED INTEGER