我是靠谱客的博主 发嗲巨人,最近开发中收集的这篇文章主要介绍漫谈数据开发工程师的技术广度,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0x00 前言

今天和朋友在聊天,聊到怎样在面试和与人沟通的过程中体现自己的技术广度,感觉挺有意思,整理分享一下。分两个点来聊:1.有哪些方面的技术广度可以提高;2.怎样提高。其中第一个点可以近似地转换为数据开发工程师的技能树,有所不同,但是可以按照这个思路来考虑。

数据开发工程师这个职位其实可以干很多事情,因为凡是和数据相关的东西基本上都会有数据开发工程师的身影。比如说推荐系统,虽说会有推荐算法的存在,但是最后的工程实现也会有数据开发工程师的深度参与。而且经常出现的情况的是没有算法工程师,是数据开发工程师来实现的算法和系统,因此这就要求数据开发懂算法和系统开发;再比如说运维,一般很难有专业的运维来帮你搭集群,尝试各种组件,即使有这样的运维(我们就是),但是当你需要尝试新的组件的时候,仍然需要数据开发来承担前期的安装和运维的工作,只能是成熟后再交出去,因此这就要求数据开发懂很多运维的知识,至少是能熟练玩Linux,有时候甚至还要会去机房装机器(之前干过这事);然后说系统开发,很多系统定制性很强,比如Olap系统,初期很难找到专业的前端帮你做,那就要自己搞了,有些开源的组件可以直接用,比如Kylin+Saiku,但是很多时候要定制开发,因此这就要求数据开发懂不少前端和Web开发的东西

上面说的很多东西不一定要求精通,但是很多还是要知道一些,至少老板提到说想做一个数据可视化的系统,你要能想到数据可视化能用Zeppelin做个简单的展示,或者可以用Superset、Gephi,然后如果需要做成系统了你要能想到我们可以用Echarts来做图表的展示,专业一点的话可以用D3.js,如果这个系统的后台数据源是ES,我们还可以用Kibana来直接出图。

0x01 数据开发工程师的技能树

前面吐槽有点多,进入一点正题。下图是一个大致的数据开发工程师的技能树。我把它分为了几个模块。其中大数据组件就不用说了,然后还包括了开发能力、数据仓库、算法和其它技能。下面挨个过一遍。

1.大数据组件

大数据组件非常多,可以说这两年太多了,但是总的来讲,还是有几个代表的系统在。存储领域有HDFS、BigTable,计算领域有MapReduce和Spark,它们引领了一波波浪潮。然后还有一些十分重要组件,比如作为数据仓库引擎的Hive、作为检索系统的ES、作为消息队列的Kafka、作为日志收集的Flume、数据库同步工具Sqoop、各种NoSql。

对于这么多的组件,我们该怎么办?

首先,HDFS 一定要玩明白,十分熟悉它的原理,最好深入理解,能解决各种问题。MapReduce和Hbase要熟悉原理和应用场景,但不用精通,工作中常用到的除外。因为即使MapReduce和Hbase在工作中用不到,HDFS肯定也会用到。(Google的三篇论文分别衍生出三个系统:HDFS、MapReduce、Hbase。HDFS和MapReduce同属于Hadoop)

然后,对于各种组件,如果在工作中遇到了,就深入搞一两个,没遇到的,要去做三件事:1.看懂它的架构;2.明白它的使用场景;3.看一下其它公司的使用案例。

最后,还是要看一些组件的核心源码,组件太多了,挑其中核心的组件,看这些组件的核心内容。比如说实时处理的框架有Spark Streaming、Storm、Flink, 我们可以考虑只看其中代表性强的Storm,然后看Storm的话,不用全看,只看其中最核心的设计,核心设计和代码还是人力能看完的。

2.开发能力

开发能力暂时分三部分来聊吧,数据清洗、系统和语言。

数据清洗就不用谈了,大部分数据开发都要搞,写写Spark、MapReduce或者Hive脚本。要注意的是,我们要有升华,要尝试总结一些规律来,有一些升华。比如说数据倾斜怎么搞,怎么样保证实时数据清洗一条数据不丢一条不重复,怎么处理异常数据。

系统的话,是各种系统的开发,数据开发一般跑不掉报表系统,这是能给老板看的最基本的价值体现点。然后对于后台系统来讲,最好了解元数据系统、调度系统这些系统的设计方法。然后就是推荐系统和广告系统,如果没机会接触,至少知道一些他们的设计思路,明白整个框架,要能达到让你现在设计一个推荐系统你能设计出来一个简单的版本。

语言的话Java是必学的,而且要特别深。Python最好要搞一下,因为越来越多的系统来支持了Python,特别是机器学习和深度学习,清一色的Python。Scala、Go这些可以略作了解,用到了学就好。不得不提的是Sql,Sql能解决很多的问题,千万不要看不起Sql,很多和逻辑都可以用Sql轻易解决,即使在SparkStreaming中也可以套Sql来解决问题。

3. 数据仓库

不得不重点聊一下数据仓库,很多大数据开发对数据仓库不太了解,可能还会认为我们是互联网公司只有传统公司才搞数据仓库吧。其实不然,数据仓库是一套完整的理论体系,它包括数据清洗、管理、建模和展示等一套的理论。后面我会专门分享,之前也写了几篇数据仓库的文章,可以在简书中搜一下,比如:《漫谈数据仓库之维度建模》、《大数据场景下该如何优雅地设计数据分层》。

数据仓库的东西我还是想单独详细地写,这里不再细致讨论了。 需要大家了解的是,最好能明白维度建模、OLAP和数据集市是做什么的,为什么要有大宽表、维度表和事实表,为什么要有数据分层。

然后用户画像和特征工程最好也要有所了解,特征工程居士了解就相对少一点。

4. 算法

算法是个好东西,说起来算法大家会主要想到经典算法和机器学习算法,最近火起来的还有深度学习算法。

经典算法就不说了,属于基本功。其中的图论和树还是要好好看看,决定有用。比如说调度系统的设计要看图论吧,社交关系算法要看图论吧,文件系统目录树要看树吧,数据挖掘算法也有很多和树相关的。

数据挖掘算法最好还是要懂一些,即使不做算法研究,但是实现算法还是很必要的,不然功劳都被算法工程师抢了。 而且作为大数据开发,更应该肩负起数据挖掘算法在分布式系统中的设计和优化,这里的技术含量十足。 在这里,懂一些各个算法的大致原理,明白使用场景,有工作需要的话最好能亲自实现一下。

深度学习算法就不提了。

然后是大数据算法,什么才是大数据算法?这个不好说,但是不能把数据挖掘算法都放这,数据挖掘算法解决的问题不是大规模数据处理,而是从数据中挖掘价值。 大数据算法我们可以理解为是为了处理海量数据而设计的算法,目前我接触到的有基数统计算法的Hyperloglog应该算是一种,它在Redis和Druid中都有使用,然后还有《大数据算法》书中提到的外存算法和亚线性算法等。这一类算法目前学习还不够深入,后续慢慢边写边学。

5. 其它

算法之外就是其它的一些东西了,不必要但是我认为还是挺重要的。

先说Linux,这个我感觉必要性比较高,本文前面也提到了,我感觉大部分大数据工程师都应该会具备,只是会的深浅而已,比较接触底层的童鞋应该要对Linux了解的更深,比如我在一段时间内就经常去装系统换硬盘。

然后是爬虫,爬虫前面也写了两篇文章,我一直感觉爬虫是数据工程师的一项基本技能,无他,好玩。自己能拿到数据,想干什么都行。当然爬虫工程师还是要搞的很深的。

云计算 的东西也很值得了解,最开始的时候,我一直认为Hadoop、Spark这类平台的应该算是云计算的内容,不过到底是什么无所谓,就当他们有联系但是又有区别好了。云计算主要分三层IaaS、PaaS、和SaaS,容器技术火起来之后又有了DaaS这种容器即服务的概念。随着云市场和大数据技术的成熟,微软的Azure、亚马逊的AWS、阿里的阿里云这些大佬们也都正在把Hadoop、Spark这些大数据组件嵌入到它们的云产品中,因此我可以理解为我们用的不少大数据组件应该算是PaaS,即平台即服务。

0x02 怎样提高技术广度

前面的内容写的有点多,这里就少写一点,后续有空继续搞。

个人认为。技术广度的提高还是有几个点要注意:

  1. 兴趣最重要,不然是很难有动力去学很多东西的
  2. 多听听讲座,和大家聊聊天,认识认识自己的不足,来点危机感。
  3. 自己做点有意思的小东西玩。尽可能多地用到新技术。

说点实际的吧,最近在搞一个小系列:自己写爬虫爬数据,然后在上面跑PageRank算法、LPA算法,然后用上图数据库来玩,再把这些算法变成MR和Spark的版本,再接着自己再用D3.js出点图看看。然后再爬些文本数据,做做NLP的处理,接着准备搞点信息检索的东西试试,然后是一些数据挖掘的算法各种跑着玩,比如LDA跑个主题提取。总之是一系列的东西吧。在这中间会穿插着算法的理解、个人的想法、方案的设计和一些代码的实现,偶尔再尝试分享一下用到的系统的设计。

上面提到的很多东西其实是之前就会的,但是很久不碰就忘了,还有一些事不太熟悉的,趁着这一波一网打尽,多学一点是一点。 我感觉这也是一种扩充技术广度的方式。

0xFF 写在最后

一家之言,自己写着玩,算是吐槽+闲扯。很多东西自己也不会,但是还是希望早点掌握了,可以出去吹。

看完有想法的可以互相交流,只求轻喷。

最后

以上就是发嗲巨人为你收集整理的漫谈数据开发工程师的技术广度的全部内容,希望文章能够帮你解决漫谈数据开发工程师的技术广度所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部