我称这种bug是一个典型的“哈姆雷特”bug,就是指那种“报错情况相同但网上却会有各种五花缭乱解决办法”的bug,让我们不知道哪一个才是症结所在。

先看导入命令:

[root@host25 ~]# sqoop export --connect "jdbc:mysql://172.16.xxx.xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8" --username=root --password=xxxxx --table rule_tag --update-key rule_code --update-mode allowinsert --export-dir /user/hive/warehouse/lmj_test.db/rule_tag --input-fields-terminated-by '\t' --input-null-string '\\N' --input-null-non-string '\\N' -m1

接下来是报错:

#截取部分19/06/11 09:39:57 INFO mapreduce.Job: The url to track the job: http://dthost25:8088/proxy/application_1554176896418_0537/19/06/11 09:39:57 INFO mapreduce.Job: Running job: job_1554176896418_053719/06/11 09:40:05 INFO mapreduce.Job: Job job_1554176896418_0537 running in uber mode : false19/06/11 09:40:05 INFO mapreduce.Job: map 0% reduce 0%19/06/11 09:40:19 INFO mapreduce.Job: map 100% reduce 0%19/06/11 09:45:34 INFO mapreduce.Job: Task Id : attempt_1554176896418_0537_m_000000_0, Status : FAILEDAttemptID:attempt_1554176896418_0537_m_000000_0 Timed out after 300 secs19/06/11 09:45:36 INFO mapreduce.Job: map 0% reduce 0%19/06/11 09:45:48 INFO mapreduce.Job: map 100% reduce 0%19/06/11 09:51:04 INFO mapreduce.Job: Task Id : attempt_1554176896418_0537_m_000000_1, Status : FAILEDAttemptID:attempt_1554176896418_0537_m_000000_1 Timed out after 300 secs19/06/11 09:51:05 INFO mapreduce.Job: map 0% reduce 0%19/06/11 09:51:17 INFO mapreduce.Job: map 100% reduce 0%19/06/11 09:56:34 INFO mapreduce.Job: Task Id : attempt_1554176896418_0537_m_000000_2, Status : FAILEDAttemptID:attempt_1554176896418_0537_m_000000_2 Timed out after 300 secs19/06/11 09:56:35 INFO mapreduce.Job: map 0% reduce 0%19/06/11 09:56:48 INFO mapreduce.Job: map 100% reduce 0%19/06/11 10:02:05 INFO mapreduce.Job: Job job_1554176896418_0537 failed with state FAILED due to: Task failed task_1554176896418_0537_m_000000Job failed as tasks failed. failedMaps:1 failedReduces:019/06/11 10:02:05 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)=2624852 Total time spent by all reduces in occupied slots (ms)=0 Total time spent by all map tasks (ms)=1312426 Total vcore-seconds taken by all map tasks=1312426 Total megabyte-seconds taken by all map tasks=268784844819/06/11 10:02:05 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead19/06/11 10:02:05 INFO mapreduce.ExportJobBase: Transferred 0 bytes in 1,333.3153 seconds (0 bytes/sec)19/06/11 10:02:05 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead19/06/11 10:02:05 INFO mapreduce.ExportJobBase: Exported 0 records.19/06/11 10:02:05 ERROR tool.ExportTool: Error during export: Export job failed!Time taken: 1340 s task IDE_TASK_ADE56470-B5A3-4303-EA75-44312FF8AA0C_20190611093945147 is complete.

很显然,任务失败的直接原因是超时,但是超时的原因是因为导入过程的mapreduce任务卡住了,那mapreduce为什么会卡住呢?这个报错日志中并没有提到,这就是查原因时最麻烦的地方。

先说一下结果,最后查了很久才发现,是因为有一行的数据长度,超过了mysql设定的字段长度。也就是在往varchar(50)的字段里导入字符串“字符串很长很长很长很长很长很长很长很长很长”时,任务就阻塞住了。

在这里也跟大家汇总一下网上的各种原因,大家可以逐个检查

在map 100% reduce 0%时卡住的可能原因:(以往mysql导出为例)

1、长度溢出。导入的数据超过了mysql表的字段设定长度

解决办法:重设字段长度即可

2、编码错误。导入的数据不在mysql的编码字符集内

解决办法:其实在mysql数据库中对应UTF-8字符集的不是utf8编码,而是utf8mb4编码。所以当你的导入数据里有若如Emoji表情或者一些生僻汉字时,就会导不进去造成阻塞卡住。所以你需要注意两点:

(1)导入语句中限定useUnicode=true&characterEncoding=utf-8,表示以utf-8的格式导出;

(2)mysql建表语句中有ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3、内存不足。导入数据量可能过大,或者分配内存太少

解决办法:要么分批导入,要么给任务分配更多内存

4、主机名错误。

解决办法:这个好像是涉及到主机名的配置问题

5、主键重复 。

解决办法:这是因为你导入的数据中有重复的主键值,要针对性处理一下数据

补充:sqoop从数据库到处数据到hdfs时mapreduce卡住不动解决

在sqoop时从数据库中导出数据时,出现mapreduce卡住的情况

经过百度之后好像是要设置yarn里面关于内存和虚拟内存的配置项.我以前没配置这几项,也能正常运行。但是这次好像运行的比较大。出现此故障的原因应该是,在每个Docker分配的内存和CPU资源太少,不能满足Hadoop和Hive运行所需的默认资源需求。

解决方案如下:

在yarn-site.xml中加入如下配置:

<property>  <name>yarn.nodemanager.resource.memory-mb</name>  <value>20480</value> </property> <property>  <name>yarn.scheduler.minimum-allocation-mb</name>  <value>2048</value> </property> <property>  <name>yarn.nodemanager.vmem-pmem-ratio</name>  <value>2.1</value> </property> 

更多相关文章

  1. JNI 无法确定Bitmap的签名
  2. android webview 中网页数据与js交互
  3. Android退出程序的多种方法
  4. Android退出程序的多种方法
  5. Android退出程序的多种方法
  6. Android(安卓)3.0之后开机无法接收系统广播权限原因
  7. Android(安卓)Studio编译报Default interface methods are only
  8. ListView setOnItemClickListener无效原因详细分析
  9. ListView setOnItemClickListener无效原因分析

随机推荐

  1. 详解PHP使用gearman进行异步的邮件或短信
  2. php session 会话(专题)
  3. PHP如何结合MySQL进行千万级数据处理
  4. 分析PHP中PHPMailer如何发邮件
  5. 案例分析PHP Web表单生成器
  6. php获取当前时间戳、日期并精确到毫秒(三
  7. PHP使用POP3读取邮箱接收邮件的实例解析
  8. 详解之php反序列化
  9. 教你用php将二维码和文字结合到一个背景
  10. 两分钟带你了解PHP中的运算符