Защо sqoop се проваля при NumberFormatException за числова колона по време на експортиране от кошер към mysql

Имам простата заявка за кошер

INSERT OVERWRITE DIRECTORY '/tmp/test'
SELECT 
flight,
SUM(CASE WHEN ev=2 THEN 1 ELSE 0 END) AS req 
from data_table
group by flight;

Резултатът изглежда като добре (разделени с ^A в редактора) две цифрови колони. Създадох mysql таблица

create table hive_table(fl int,evs int);

Накрая искам да експортирам данните от hdfs в mysql с sqoop

sqoop export --connect jdbc:mysql://mysqlhost/dwh --username user --password password --table hive_table --export-dir /tmp/test/ --input-fields-terminated-by "\000" --lines-terminated-by '\n'

Но получавам следните грешки (въпреки че виждам, че низът е числова стойност) и цялото експортиране е неуспешно. Само не мога да разбера защо? Използвам cloudera cdh3

13/06/02 22:37:17 INFO mapred.JobClient:  map 0% reduce 0%
13/06/02 22:37:22 INFO mapred.JobClient: Task Id : attempt_201304210944_0692_m_000001_0, Status : FAILED
java.lang.NumberFormatException: For input string: "100322836692"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:458)
    at java.lang.Integer.valueOf(Integer.java:554)
    at hive_table.__loadFromFields(hive_table.java:191)
    at hive_table.parse(hive_table.java:143)
    at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:81)
    at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:40)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at com.cloudera.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:189)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformatio

person Julias    schedule 02.06.2013    source източник


Отговори (1)


Трябва да създадете своята MySQL таблица с BIGINT, тъй като някои от изходните ви данни като 100322836692 са твърде големи, за да се поберат в цяло число (от -2147483648 до 2147483648), така че когато Sqoop се опита да импортира, ще погледне схемата, установете, че вие очаквам цяло число, опитайте се да анализирате цялото число и след това се проваляте, защото е твърде голямо.

Това се очаква, когато работите с големи количества с Hive, когато правите COUNT или SUM Виждал съм много време тази грешка, която не винаги е много ясна.

Това трябва да го поправи:

create table hive_table(fl bigint, evs bigint);
person Charles Menguy    schedule 02.06.2013