记一次hive中遇到的坑


0x01

今天,由于公司要进行新老数据仓库的迁移,于是顺便接手了其中一部分的工作,其实大部分迁移工作都比较简单,就是把从ods层-dw层-dm层-sh展示层中涉及到旧仓库的表替换成新仓库的表,并且检查其中字段的差异性,并进行相应的操作。于是撸起袖子开工。

0x02

  1. 前期的进展很顺利,很快就完成了几张表的迁移,心想着按这个进度,不到一个小时就能完成了。Orz
  2. 在进行到第五张表的迁移时,发现很久没有完成,于是检查了日志,发现卡在了reduce阶段,从60%作用开始,基本上每隔10分钟左右进度才增加1%。
  3. 遇到这种情况,第一反应就是发生了数据倾斜,于是马上进行数据源的排查,在这里先说明一下查询语句主体,大致如下select xxx from t1 left join on t2 where t1.sid = t2.sid left join t3 on t1.uid = t3.uid。其中t2和t3均已经进行了去重和选定分区的处理。
  4. t1以及t2的数据量在百万级别,t3在亿级别作用。然后对t1进行了count(distinct uid)后,发现了异常数据 null的量在千万级别,于是采取了直接剔除null的解决方案,心想这个应该就不会进行数据倾斜了,于是再次运行脚本,然后等待,结果出乎我的意料,这次没有卡在60%,而是卡在了65%,泪崩啊。
  5. 再次检查日志,发现reduce个数只有一个,心想大概是hive自动判断reduce个数不准确,于是手动强制设定了reduce的个数set mapred.reduce.tasks=800;。再一次运行,等待,60%--70%--80%--90%--95%...,这下终于正常了。...99%--99%--99%--99%...,在看到一连串的99%不断刷新的同时,我终于接受了还有错误的事实。
  6. 到底哪里出错了呢,按说数据量也并不是特别大呀,想了想,还有一个办法,就是使用hive.groupby.skewindata=true;来进行当有数据倾斜时进行负载均衡,其实理性告诉我,和这个关系不大,但是没办法了呀,只能试一下了。结果不出我所料,还是卡在了99%。
  7. 还有半小时就到饭点了,怎么办,这时候同事对我随口提了一句,检查一下数据类型,说不定是数据类型不一致造成的呢。"不应该呀",我嘀咕着,抱着死马当活马医的态度,我看了一些表结构,发现还真不一样,t1的是bigint,而t2和t3的是string。但是我记得hive有自动隐式转换机制的呀,为了验证我的观点,我进行了select cast(1010000001000390061 as bigint) = cast(1010000001000390061 as string)查询,结果就是返回true,应该不是这个原因。是的。
  8. 但是也想不到别的办法了,于是再去吃饭之前,我还是提交了这个微小的改动,cast(t1.sid as string) = t2.sid,在吃饭的过程中,我一直在想解决的办法,吃完饭回来,奇迹发生了,居然就是这个原因!!!
  9. 突然想起来,之前有过一次,好像也是数据类型的原因,在使用join时,对两个bigint类型和string类型进行等值操作时,乍一看,操作没问题,可是仔细一看,返回的数据不对啊。当时也没注意这个细节。
  10. 难道是超出了bigint范围?在查询了select cast(10010000001000390061 as bigint)后,惊奇的发现居然返回了9223372036854775807,这下明白了,应该是在join时,由于t3的uid字段超出了bigint的范围,从而使得最后的连接后数据量剧增,想一下,百万 * 百万 * 亿 ,大概有10的20次方,难怪卡在了99%。

0xff

  • 回顾这一次填坑之旅,不仅意识到了不能完全依赖于平台提供的便利功能,而疏忽了其背后原理性的东西。如自动转换类型的原理,以及相关的限制。
  • 对于不同层的表的维度字段的定义,尽量保证维度字段的类型保持一致,不然有可能会出现一些奇怪的问题,比如我这次遇到的由于超出范围而造成自动转换的结果不准确的bug。
  • 在遇到问题迟迟不能解决的时候,不妨问问身边的人,俗话说的好,当局者迷,旁观者清嘛。Orz
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容

  • hive优化总结 - 上帝之手 - 博客频道 - CSDN.NET http://blog.csdn.net/p...
    葡萄喃喃呓语阅读 844评论 0 2
  • Hive性能优化 1.概述继续《那些年使用Hive踩过的坑》一文中的剩余部分,本篇博客赘述了在工作中总结Hive的...
    Albert陈凯阅读 1,448评论 0 8
  • Student(Sid,Sname,Sage,Ssex) 学生表Course(Cid,Cname,Tid) 课程表...
    小炉炉阅读 1,390评论 0 0
  • 想记录一下两个方面的感受,第一、学习课程认识到说话逻辑思维的重要性。要表达的内容怎么才能让对方听起来更舒服、更容易...
    梦磊阅读 197评论 1 0
  • 在上一篇文章里面我写了单点突破,本片主要想谈一谈个人对投资的理解。 1 借势 任何一个事物的发展都是离不开外部环境...
    探花磨刀石阅读 279评论 1 2