sqoop export导出 map100% reduce0% 卡住的多种原因及解决

我称这种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_0537
19/06/11 09:40:05 INFO mapreduce.Job: Job job_1554176896418_0537 running in uber mode : false
19/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 : FAILED
AttemptID:attempt_1554176896418_0537_m_000000_0 Timed out after 300 secs
19/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 : FAILED
AttemptID:attempt_1554176896418_0537_m_000000_1 Timed out after 300 secs
19/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 : FAILED
AttemptID:attempt_1554176896418_0537_m_000000_2 Timed out after 300 secs
19/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_000000
Job failed as tasks failed. failedMaps:1 failedReduces:0
19/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=2687848448
19/06/11 10:02:05 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead
19/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 instead
19/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.

可以看到,导入任务在INFO mapreduce.Job: map 100% reduce 0%时停住了,停了5分钟,然后任务自动重跑,又卡住停了5分钟,最后任务报了个超时的错误。

很显然,任务失败的直接原因是超时,但是超时的原因是因为导入过程的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>

关闭yarn重启就好了!!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 解决sqoop从postgresql拉数据,报错TCP/IP连接的问题

    问题: sqoop从postgresql拉数据,在执行到mapreduce时报错Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections 问题定位过程: 1.postgresql 5432端口已开放,执行任务的节点能telnet通,并且netcat测试通过 2.sqoop list-tables命令可正常执行,sq

  • sqoop 实现将postgresql表导入hive表

    使用sqoop导入数据至hive常用语句 直接导入hive表 sqoop import --connect jdbc:postgresql://ip/db_name --username user_name --table table_name --hive-import -m 5 内部执行实际分三部,1.将数据导入hdfs(可在hdfs上找到相应目录),2.创建hive表名相同的表,3,将hdfs上数据传入hive表中 sqoop根据postgresql表创建hive表 sqoop creat

  • 解决sqoop import 导入到hive后数据量变多的问题

    使用sqoop import 命令从postgresql导入数据到hive中,发现数据行数变多了,但是任务没有跑错,非常奇怪. 导入语句为: sqoop import --connect jdbc:postgresql://*.*.*.*:5432/database_name --username name111 --password password111 --table table111 --hive-import --hive-database database111 --hive-tab

  • sqoop读取postgresql数据库表格导入到hdfs中的实现

    最近再学习spark streaming做实时计算这方面内容,过程中需要从后台数据库导出数据到hdfs中,经过调研发现需要使用sqoop进行操作,本次操作环境是Linux下. 首先确保环境安装了Hadoop和sqoop,安装只需要下载 ,解压 以及配置环境变量,这里不多说了,网上教程很多. 一.配置sqoop以及验证是否成功 切换到配置文件下:cd $SQOOP_HOME/conf 创建配置环境文件: cp sqoop-env-template.sh sqoop-env.sh 修改配置文件:co

  • sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    我称这种bug是一个典型的"哈姆雷特"bug,就是指那种"报错情况相同但网上却会有各种五花缭乱解决办法"的bug,让我们不知道哪一个才是症结所在. 先看导入命令: [root@host25 ~]# sqoop export --connect "jdbc:mysql://172.16.xxx.xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8" --username=root -

  • python 读写文件包含多种编码格式的解决方式

    今天写一个脚本文件,需要将多个文件中的内容汇总到一个txt文件中,由于多个文件有三种不同的编码方式,读写出现错误,先将解决方法记录如下: # -*- coding: utf-8 -*- import wave import pylab as pl import numpy as np import pandas as pd import os import time import datetime import arrow import chardet import sys reload(sys

  • 浅谈Android Studio导出javadoc文档操作及问题的解决

    1.在Android studio中进行打开一个项目的文件之后,然后进行点击Android stuio中菜单中的"tools"的选项.在弹出了下拉菜单中,进行选中下拉菜单中的"Generate JavaDoc"的选项. 2.在弹出界面中 Output directory是你即将生产的javadoc文件的存储位置,图中1指示的位置:正常点击ok即可: 但是如果有异常情况 比如空指针异常或者文档乱码 java.lang.NullPointerException 或者 j

  • IDEA 卡住buid(编译)不动的解决办法

    [号外号外!] 最终解决办法并不复杂,关键在于"遇见问题,怎么样层层分析,多条路径试错,最终解决问题的思路或者能力"--资深码农的核心竞争力之一 背景 今天结束完最近2个月的一个项目,开心鸭,IDEA切换代码到其它历史项目继续推进.咦,什么情况,原来编译好好的,这次怎么半天编译不动,超过5分钟--原本只要10多秒或者20多秒的,什么情况 多路径尝试,层层递进,终至解决 路径A 原因分析--是不是其他软件开的多,电脑CPU和内存空闲比较少,所以build 比较慢,历史上偶尔遇见过 尝试办

  • 关于多种方式完美解决Python pip命令下载第三方库的问题

    写在前面    众所周知python拥有众多的第三方库,据不完全统计python有1w多个第三方库(为什么是不完全统计,因为我也记不清了☺),那既然有这么多的库,那么不可避免的就是我们要去下载他.但对我们这些国内用户的话,有时候用pip命令安装库的话速度实属龟速,下面介绍几个提速的方法,对你有用的话别忘了点赞关注+收藏哦~   另外最近发现总有人搬运我的文章,并且不加原文链接,这里我郑重声明一下,本人目前仅在CSDN这一个平台发布文章,其他小伙伴如果想转载 或者引用请注明引用来源,未经许可不得直

  • phpExcel导出大量数据出现内存溢出错误的解决方法

    phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码 代码如下: PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的! 1.将单元格数据序列化后保存在内存中 复制代码 代码如下: PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 2.将单元格序列化后再进行Gzip压缩,然后保存在内存中 复制代码 代码如下: PHPEx

  • vue导出excel文件流中文乱码问题及解决

    目录 导出excel文件流中文乱码 导出excel乱码(锟斤拷唷?锟?:锟斤拷) 导出excel文件流中文乱码 解决此方法很多网上的差不多都可以.一下提供简单的方法 loads(){ let data={ userWord:this.dataList.userWord, examId:this.$route.query.id, exportType:this.active, } api.exportUserResult(data).then((res) => { const blob = new

  • asp.net导出Excel乱码的原因及解决方法

    复制代码 代码如下: protected void Excel_Click(object sender, EventArgs e) { Response.Charset = "UTF-8"; Response.ClearContent(); Response.Clear(); Response.ContentEncoding = System.Text.Encoding.UTF8; Response.HeaderEncoding = System.Text.Encoding.UTF8;

  • SQL Server导入导出数据时最常见的一个错误解决方法

    现在建站主要使用的还是ASP与PHP,这两种语言一般使用的数据库分别为SQL Server和mysql,这两种数据库各有各长处,也说不上谁好谁坏,看个人习惯了. SQL Server 导入和导出向导的作用是将数据从源复制到目标.该向导还可以为您创建目标数据库和目标表.但是,如果必须复制多个数据库或表,或者必须复制其他类型的数据库对象,则应改用复制数据库向导. 在数据库导入导出时总失败,错误信息如下: 复制代码 代码如下: 正在验证 (错误) 消息 错误 0xc0202049: 数据流任务 1:

  • 使用Element-UI的el-tabs组件,浏览器卡住了的问题及解决

    目录 Element-UI的el-tabs组件,浏览器卡住 问题 解决方案?? 正确的解决方案 小结 Element-UI el-tabs选项卡踩坑记录 Element-UI的el-tabs组件,浏览器卡住 问题 我使用的版本是:vue@2.5.13.vue-template-compiler@2.5.13.element-ui@2.8.2 在一个页面中使用了 element-ui 的 el-tabs 组件,然后,切换路由进入这个页面的时候,就卡住了,浏览器也卡住了:去掉 el-tabs 就好了

随机推荐