我用一个比喻说说个人理解吧:大数据平台在一些地方被称为数据仓库,如果把数据仓库比作粮仓的话,大数据平台开发工程师提供工具,比如研发更快的收割机、设计更大的仓库等等;大数据开发工程师使用这些工具处理数据,比如将农田里的收割、晾晒、去皮、研磨成可以食用的大米面粉。
上图的数据金字塔展示了数据科学领域各岗位的大致职能。
大数据开发和大数据平台开发的工作都主要集中在1、2、3三层。
原始的数据就像农田里的麦子,需要经过层层工序,才能最终将其转化餐桌上的面包。大数据开发和大数据平台开发打通了粮食收割、清理、制粉的整个流程,将原始的粮食转化成了面粉。
大数据平台工程师开发主要关注提供大数据基础设施和工具。目前的大数据公司都建有自己的数据仓库,数据仓库中的一个子任务就是构建OLAP(Online Analytical Processing,联机分析处理)工具:主要是在Hadoop生态上,构建大数据分析平台。
大数据平台开发所做的工作包括提供HDFS、HBase、对象存储等数据存储服务;Hive和Spark批处理、Druid和Kylin预处理等数据分析工具;Spark Streaming、Flink等流式计算工具。
总之,大数据平台开发工程师关注基础设施和工具。
大数据工程师的一个重要任务是ETL(Extract、Trasform、Load):使用大数据平台开发工程师提供的基础设施和工具,在收集到的数据上做提取和转化,生成更高层次的数据。
这部分工程师关注业务相关的数据流。因为原始数据一般都是互相独立的,数据与数据之间关联性差,使用这些原始数据,几乎很难快速生成用户画像、广告收入等高层次数据分析结果,更不用提如何进行机器学习建模了。以今日头条内容推荐引擎为例,整个推荐引擎要接入不同类型的异构大数据源:每个用户在APP上的使用行为、公司购买的第三方数据(包括用户金融能力数据等)、自媒体产生的海量图文视频内容等等。数据工程师的工作包括:将用户在APP内的点击行为与点击的内容做关联,生成用户兴趣画像;将用户的APP内部数据与第三方数据关联,生成用户的消费能力画像等。
大数据开发工程师主要对收集过来的底层数据做处理,建立一系列数据管道,将来自不同数据源的原始数据经过层层转化,生成对数据分析和算法建模更有价值的中间数据,一般称这个流程为数据流。小公司限于人力有限,数据流的响应时间有可能是天级或小时级;大公司对数据流的响应要求极高,有可能是分钟级、秒级甚至亚秒级。很多朋友都发现,在今日头条刚刚搜索过某一个内容,下一分钟就能收到相似内容的推荐了,因为大数据开发工程师提供了这种秒级数据管道。
无论是大数据平台开发工程师还是大数据开发工程师都对从业人员的“编程开发”和“大数据”大数据要求比较高,而且数据量越大的公司,对技能要求越高。公司一般要求工程师在Java和Scala语言上,基于Hadoop生态系统,构建实时或批量的数据流。但公司与公司的差异很大,整个技术栈和工作内容与公司架构高度相关。某招聘APP上对大数据开发工程师的技能要求:Java、Scala、Linux、Hadoop、Kafka、Spark、Flink等。
面试时一般会重点考察候选人对Google大数据三大论文的理解,即MapReduce、GFS和BigTable,分别对应了开源的Hadoop MapReduce、HDFS和HBase,这三篇论文也被称为驱动大数据的三驾马车。
大数据平台开发工程师提供基础设施和工具,是大数据平台的底层保障,工作内容离业务较远。大数据开发工程师依赖这些工具,在业务数据做提取和转化,构建数据流,工作内容离业务较近。