解决sqoop java.util.NoSuchElementException

本文介绍了解决Sqoop导出数据至MySQL时遇到NoSuchElementException错误的方法。首先需要确保Hive表定义中指定了正确的字段分隔符,并在执行Sqoop导出命令时使用--input-fields-terminated-by参数来指定数据文件中的字段分隔符。
如果报错
11/08/05 10:51:22 INFO mapred.JobClient: Running job: job_201108051007_0010
11/08/05 10:51:23 INFO mapred.JobClient: map 0% reduce 0%
11/08/05 10:51:36 INFO mapred.JobClient: Task Id : attempt_201108051007_0010_m_000000_0, Status : FAILED
java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at uv_info.__loadFromFields(uv_info.java:194)
at uv_info.parse(uv_info.java:143)
at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:79)
at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:38)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at com.cloudera.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:187)
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(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
解决此错误需要注意2点:
1)确保你创建的表指定了分隔符,例如:
create table if not exists apachelogsummary(
host STRING,
size STRING,
sumsize STRING)
partitioned by (dt STRING)
[color=red]ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;[/color]
如果你不指定,那么hdfs产生的数据文件会像这样:
221.204.248.109^A162612.7783203125^A1.8820923416702835
61.164.153.130^A24674.1982421875^A0.28558099817346644
222.73.95.121^A20020.7822265625^A0.23172201651114005
202.108.251.23^A14764.1708984375^A0.1708816076208044
61.164.153.171^A14522.759765625^A0.1680874972873264
122.227.222.116^A12595.080078125^A0.14577638979311341
114.80.142.87^A9494.8564453125^A0.10989417182074653
125.39.39.84^A7066.0595703125^A0.0817830968786169
218.25.106.248^A5449.583984375^A0.06307388870804398
123.126.50.68^A5217.9619140625^A0.06039307770905671
都这样了,你让sqoop怎么告诉mysql哪个字段对应哪个字段呢。。
2)sqoop导出命令的时候,要指定对应的数据文件分隔符--input-fields-terminated-by '\t'使它能够正确的解析文件字段。

./sqoop export --connect jdbc:mysql://localhost:3306/datacenter --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03 --input-fields-terminated-by '\t'
[root@node1 lib]# sqoop export \ > --connect jdbc:mysql://192.168.249.151:3306/metastore \ > --username root \ > --password 123456 \ > --table total_msg_cnt \ > --export-dir /user/hive/warehouse/mybase.db/total_msg_cnt \ > --input-fields-terminated-by ',' \ > --num-mappers 1 Warning: /export/server/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /export/server/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. Warning: /export/server/sqoop-1.4.6/../zookeeper does not exist! Accumulo imports will fail. Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation. 错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty 25/06/29 15:43:23 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 25/06/29 15:43:23 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 25/06/29 15:43:23 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 25/06/29 15:43:23 INFO tool.CodeGenTool: Beginning code generation Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 25/06/29 15:43:24 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `total_msg_cnt` AS t LIMIT 1 25/06/29 15:43:24 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `total_msg_cnt` AS t LIMIT 1 25/06/29 15:43:24 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /export/software/hadoop-2.7.5 注: /tmp/sqoop-root/compile/bd973557a2b55f58f8fb21700304a651/total_msg_cnt.java使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 25/06/29 15:43:26 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/bd973557a2b55f58f8fb21700304a651/total_msg_cnt.jar 25/06/29 15:43:26 INFO mapreduce.ExportJobBase: Beginning export of total_msg_cnt 25/06/29 15:43:27 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar 25/06/29 15:43:28 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative 25/06/29 15:43:28 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 25/06/29 15:43:28 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps 25/06/29 15:43:29 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.249.151:8032 25/06/29 15:43:34 INFO input.FileInputFormat: Total input paths to process : 1 25/06/29 15:43:34 INFO input.FileInputFormat: Total input paths to process : 1 25/06/29 15:43:34 INFO mapreduce.JobSubmitter: number of splits:1 25/06/29 15:43:34 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 25/06/29 15:43:34 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1751172328542_000525/06/29 15:43:35 INFO impl.YarnClientImpl: Submitted application application_1751172328542_000525/06/29 15:43:35 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1751172328542_0005/ 25/06/29 15:43:35 INFO mapreduce.Job: Running job: job_1751172328542_0005 25/06/29 15:43:55 INFO mapreduce.Job: Job job_1751172328542_0005 running in uber mode : false 25/06/29 15:43:55 INFO mapreduce.Job: map 0% reduce 0% 25/06/29 15:44:13 INFO mapreduce.Job: Task Id : attempt_1751172328542_0005_m_000000_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: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:1754) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.RuntimeException: Can't parse input data: '2024-06-243735' at total_msg_cnt.__loadFromFields(total_msg_cnt.java:249) at total_msg_cnt.parse(total_msg_cnt.java:192) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83) ... 10 more Caused by: java.util.NoSuchElementException at java.util.ArrayList$Itr.next(ArrayList.java:862) at total_msg_cnt.__loadFromFields(total_msg_cnt.java:244) ... 12 more Container killed by the ApplicationMaster. Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143 25/06/29 15:44:23 INFO mapreduce.Job: Task Id : attempt_1751172328542_0005_m_000000_1, 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: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:1754) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.RuntimeException: Can't parse input data: '2024-06-243735' at total_msg_cnt.__loadFromFields(total_msg_cnt.java:249) at total_msg_cnt.parse(total_msg_cnt.java:192) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83) ... 10 more Caused by: java.util.NoSuchElementException at java.util.ArrayList$Itr.next(ArrayList.java:862) at total_msg_cnt.__loadFromFields(total_msg_cnt.java:244) ... 12 more 25/06/29 15:44:35 INFO mapreduce.Job: Task Id : attempt_1751172328542_0005_m_000000_2, 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: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:1754) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.RuntimeException: Can't parse input data: '2024-06-243735' at total_msg_cnt.__loadFromFields(total_msg_cnt.java:249) at total_msg_cnt.parse(total_msg_cnt.java:192) at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83) ... 10 more Caused by: java.util.NoSuchElementException at java.util.ArrayList$Itr.next(ArrayList.java:862) at total_msg_cnt.__loadFromFields(total_msg_cnt.java:244) ... 12 more 25/06/29 15:44:43 INFO mapreduce.Job: map 100% reduce 0% 25/06/29 15:44:44 INFO mapreduce.Job: Job job_1751172328542_0005 failed with state FAILED due to: Task failed task_1751172328542_0005_m_000000 Job failed as tasks failed. failedMaps:1 failedReduces:0 25/06/29 15:44:44 INFO mapreduce.Job: Counters: 9 Job Counters Failed map tasks=4 Launched map tasks=4 Other local map tasks=3 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=39274 Total time spent by all reduces in occupied slots (ms)=0 Total time spent by all map tasks (ms)=39274 Total vcore-milliseconds taken by all map tasks=39274 Total megabyte-milliseconds taken by all map tasks=40216576 25/06/29 15:44:44 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead 25/06/29 15:44:44 INFO mapreduce.ExportJobBase: Transferred 0 bytes in 75.7247 seconds (0 bytes/sec) 25/06/29 15:44:44 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead 25/06/29 15:44:44 INFO mapreduce.ExportJobBase: Exported 0 records. 25/06/29 15:44:44 ERROR tool.ExportTool: Error during export: Export job failed!
06-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值