2017-03-29 2 views
1

테이블을 HDFS에서 SQOOP로 내보내려고하지만 Java 예외가 발생합니다.SQOOP 내보내기 실패

sqoop export --connect jdbc:mysql://172.31.54.174/Database --driver com.mysql.jdbc.Driver --username user --password userpassword --table accounts --export-dir /user/pri/accounts 

가 실행하는 동안이 쿼리에 오류가 아래에 나와 있습니다 : 다음과 같이 내가 사용 쿼리는

17/03/29 07:54:26 INFO mapreduce.Job: map 0% reduce 0% 
17/03/29 07:54:30 INFO mapreduce.Job: Task Id : attempt_1489328678238_4886_m_000002_0, Status : FAILED 
Error: java.io.IOException: Can't export data, please check failed map task logs 
     at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:112) 
     at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39) 
     at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146) 
     at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64) 
     at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) 
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
     at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 
     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:1657) 
     at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162) 
Caused by: java.lang.RuntimeException: Can't parse input data: '\N' 
     at accounts.__loadFromFields(accounts.java:691) 
     at accounts.parse(accounts.java:584) 
     at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83) 
     ... 10 more 
Caused by: java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] 
     at java.sql.Timestamp.valueOf(Timestamp.java:204) 
     at accounts.__loadFromFields(accounts.java:643) 
     ... 12 more 

내가 수출하고 파일은 다음과 같이 데이터가 포함

1,2008-10-23 16:05:05.0,\N,Donald,Becton,2275 Washburn Street,Oakland,CA,94660,5100032418,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0 

2,2008-11-12 03:00:01.0,\N,Donna,Jones,3885 Elliott Street,San Francisco,CA,94171,4150835799,2014-03-18 13:29:47.0,2014-03-18 13:29:47.0 

또한 테이블 계정을 만들고 그 구조는 다음과 같습니다 :

+----------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+-------------+------+-----+---------+-------+ | acct_num | varchar(20) | NO | PRI | | | | acct_create_dt | datetime | NO | | NULL | | | acc_close_dt | datetime | YES | | NULL | | | first_name | varchar(20) | NO | | NULL | | | last_name | varchar(20) | NO | | NULL | | | address | varchar(30) | NO | | NULL | | | city | varchar(20) | NO | | NULL | | | state | varchar(20) | NO | | NULL | | | zipcode | varchar(20) | NO | | NULL | | | phone_number | varchar(20) | YES | | NULL | | | created | datetime | NO | | NULL | | | modified | datetime | NO | | NULL | | +----------------+-------------+------+-----+---------+-------+

또한 오류 스크린 샷을 첨부하고 있습니다. enter image description here

답변

0

로그에서 볼 수 있듯이 '\ N'은 이스케이프 문자와 유사하므로 varchar에 적합하지 않습니다. 왜 같은 것을 추가하는지 이해하지 못합니다. 또한 타임 스탬프 형식 문제가 표시됩니다. 또한 기본 키에 사용중인 열이 자체적으로 반복되는 경우 기존 데이터를 체크인하십시오.

0

sqoop 내보내기 명령에 --input-null-string '\\N' --input-null-non-string '\\N'을 추가하십시오.

관련 문제