回顾

作为一名5年开发经验的大数据开发工程师,我对于现在用的大数据组件,虽称不上精通,但至少也算熟悉,能够快速理解需求,快速选择适合的方案。所以接下来的文章系列,我将用我自己的方式来谈谈,如何从一位新手大数据开发,成长为独当一面的的骨干成员。

我作为一个php服务端开发,被招聘到现在的公司,校招的时候对于基础知识得考察比较多,如果有项目经验,那就会着重去问项目上的事情。当时我的项目经验不多,基础知识也不够扎实,所以校招过程比较煎熬,很多公司都进不了面试环节,最终拿到的offer也是寥寥无几。只有目前工作的这家公司、新浪微博和一家互联网金融公司。因为被校招折腾的劳累过度,接完offer,我就没有再继续跑各个宣讲会了。

初进部门,简单的适应了一天,就接到了一个统计需求作为练手项目。整个组,每个人所负责的项目都各不相同,谁手上有些做不完的活,就会拿过来让我做。统计需求虽然简单,但是对于我来说,却是一个挑战,毕竟我只有做平台的经验,对于这类需要先深入了解业务,再了解需求描述,再了解各个字段的统计需求,我抓耳挠腮了好多天,才有些头绪。我也是从那个需求开始,开启了我大数据开发的职业道路。

还在学校的时候,微信问领导我该提前储备些什么知识,被告知Hadoop 相关的都可以,没有具体到哪些组件,我就在网上随便找了些资料看了看。因为个人学习速度比较慢,加之没有地方练手,所以到了上班的时候,对Hadoop还是很陌生。做需求的时候,组员发给我了一些示例,照着示例写着php版的mapper,看着mapreduce任务脚本里面的配置,一脸懵逼,完全不明白那些设置的具体含义。一边改着脚本逻辑,一边提交到集群进行测试,当时我甚至不知道,“Ctrl+C”结束掉命令行的脚本执行过程时,mapreduce任务其实已经跑在了集群,因为提交的大任务太多,还被其他组的人投诉了,说我提交了很多重复任务,占了太多资源,作为新人的我,哪敢说话啊,乖乖认怂道歉。

这时的我完全就是一个大数据小白开发,看着系统部提供的wiki,巨额篇幅的文档,看得人晕头转向,也不知道该求助谁,又怕领导催需求进度,那段时间真是身心俱疲。不过现在想想,的确是我太急躁了,没有掌握到好的方法。铺垫了这么多,接下来我就总结一下,新手应该如何快速上手大数据开发。

干货

​众所周知,既然可以称之为干货,那必定去除了很多水分,内容不会太多,这样整篇文章会显得头重脚轻,希望各位看官理解一下。

不管是大厂还是小厂,凡是有大数据能力的公司,内部基本都会用一套架构,要么是一个大部门维护的大数据基础服务部门,要么就是一个组维护的大数据集群和平台。所以新手大数据工程师别急着看网上的学习资料,又多又杂,看了后面忘了前面,而且还耽误时间。

先把大数据部门提供的wiki,组内提供的测试脚本都过一遍,mapreduce streaming支持很多种语言,用法大同小异,选择自己最熟悉的语言。

mapreduce的运行原理类似于如下流程:

cat test.txt | php mapper.php | sort | php reducer.php

实际mapreduce的执行过程远比这段命令行的过程复杂,但是这个过程用来做前期的代码逻辑测试,是非常好的。

测试完代码逻辑之后,就要提交到集群上,进行线上测试。注意线上测试的时候,选用的测试数据不要太多,既可以保证覆盖你代码的所有分支逻辑,也可以快速地看到运行结果。

需要注意的一些配置项:

mapreduce.input.fileinputformat.split.maxsize   
mapreduce.input.fileinputformat.split.minsize //与上一个配置一起,确定输入数据分块
mapreduce.job.running.map.limit // 同时运行的map数,reduce类似
mapred.map.max.attempts //失败重试

任务的最大map数,和你输入数据的总size/设置的最小分块size 有关,合理拆分map数量:map数量太大,任务调度时需要消耗很长时间;数量太少,运行时间太长。

经过上面两个步骤,你就算是进入了大数据开发的世界。