某不愿透露姓名的神州实习生:一闪,怎么每次我在你文章里都是反面形象,能不能给我安排个正面的人设(不然我点踩)
我:好的好的,肯定安排.........(你这个X毛,上次笔试让你帮我做个算法题,支支吾吾半天做不出来)
Hive On Spark的JVM重用
我:来来来,大佬喝茶
老程序员:怎么想到给我买奶茶?(有什么问题快点问)
我:(昨天被你装到了,今天我要扳回来)我就是想问问咱们Hive处理小文件的时候都有啥方法?
老程序员:(瞟)这个问题你进公司的时候没问你吗,CombineTextInputFormat,JVM重用呗
我:那我Hive on Spark也可以开启JVM重用吗
老程序员:(惊!要坏.这我可不知道啊)你去试试,不能啥问题都让我给你解决啊.(快点走,我赶快百度一下)
我:我觉得是因为Spark中Executor本身是一个对象,它有一个属性的类型是ThreadPool,咱们的MR任务本身是一个进程,但是Executor底下的Task是一个个线程,相当于本身就开启了JVM重用.
老程序员:(诶呀,栽了)不错,跟我的想法差不多
Sqoop导出问题
我:咱们ads层的表导出到mysql之后咋这么多重复的?
老程序员:(偷看)
我:噢噢噢噢,原来是mysql里建表忘记设置主键字段了
老程序员:那你知道为什么设置好主键字段就不会重复吗
我:不是因为主键的唯一性吗
老程序员:准确的说应该是sqoop在导出的时候使用的是”有则更新,无则插入”的语法,而这种语法就是根据唯一键来判断要写入的数据是否已经存在了,所以加上主键字段之后,重复写就会变成更新写.
我:(怎么感觉好像在哪里看见过这个说法..是不是CSDN上陈哈哈的博客上看到的)原来是这样,我最近在研究DataX,毕竟Sqoop已经宣布不会再更新了
老程序员:哟,学习上还挺积极,那你sqoop已经钻研的差不多了?
我:一般一般.世界第三
老程序员:Sqoop的底层是啥
我:默认4个Map
老程序员:那我要是有的Map成功有的Map失败.怎么保证数据的一致性?
我:刚刚不是说了吗,有则更新,无则插入,那我重新跑一遍不就完了吗
老程序员:那要是第一次导出失败,那个不完整数据被领导看见了,你重新跑了一遍之后,领导一看数据不一样了,那你咋办
我:(那我就gg了)我直接用一个map跑,要么成功要么失败
老程序员:...(谁把你招进来的)
我:确实是可以实现的嘛,但是我可能会用那个叫--stage-table的方式,让数据先写到临时表,如果失败,老板也看不到数据,成功的话就会一起写进去了
老程序员:(可恶,竟然没装到)
ps:昨天晚上去买玉米吃,走路玩手机把手机摔了,所以走路别玩手机.