前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >独访二十年大数据工程师的中肯意见!

独访二十年大数据工程师的中肯意见!

作者头像
用户1667431
发布2018-04-18 14:42:36
5880
发布2018-04-18 14:42:36
举报
文章被收录于专栏:大数据钻研大数据钻研

今天有幸访问到一名资深大数据工程师,为我们解答许多心中疑问! TalkingData是中国最大的独立第三方移动数据服务平台 一、TalkingData公司目前所面临的技术挑战及项目实例

1.开发语言

提到大数据,我们知道有数据工程师和数据科学家,都必不可少的用到一些开发语言。我们公司第一个最常用的语言就是java,大家常用的语言就来自于java,像我是在传统软件公司工作很多年,那时候软件公司都来源于企业市场,基础就是java,所以公司核心的开发语言就是java。

但是对于大数据处理来讲,因为大家知道Spark,如果在Spark上开发大数据的处理逻辑的话,要实现大数据的相关工程,虽然你可以用java,python,但是真正工程化效果最好的就是scala,作为一种函数编程语言来讲,scala本身的生命里就来源于他对于数据更友好。java语言是面向对象的语言,其实业务逻辑更合适。面向数据的话,scalen本身的特点以及特性都更加适合做大数据的处理,所以scala也是我们公司比较重要的语言。

另外就是objective-c,因为我们要提供到开发者SDK,SDK主要包括两个大的主要平台,包括IOS和安卓,经典的安卓都是用的java开发,除非新的语言像python语言。IOS的开发语言必然要使用到Objective-c,另外,为什么大家会看到c++?其实,大数据刚出来的时候,我们似乎找不到c++的用武之地,因为我们知道的大数据平台貌似都是运行在java虚拟机上的。但是,如果进一步使用大数据技术,就会面临很多的问题。比方说,我们每天处理好的数据,我们希望能够把它变成数据服务的形式提供出去,这就需要一个比较好的数据库去存储。我们传统的数据库,比如说,MySQL,ArangoDB都比较适合链接交易这种场景,但是如果有数十亿条数据,主要是为了提供数据服务,就是说可能有一个键key,要把它对应的value查出来,这时候,传统的数据库在应对这种大规模数据的时候就有很多的短处。实际上,我们就在尝试一些新型的用C++实现的一些数据库,因为对于任何一个互联网公司来讲,大家都是使用开源,首先要驾驭这个开源,我们想要驾驭它,一定要了解这个语言。我们希望遇到问题的时候能够自己解决。

Python 是目前对于数据科学非常火热的一门语言。对于我们数据科学团队来讲,大部分情况是用一些抽出来的数据做模型训练,python因为有许多的算法库,也更容易掌握,这样对于他们来讲,去做一些模型训练就会更快。另外,我们的技术运营团队,他们也会用python 去做一些技术运营的工具。另外一个十分典型的就是JavaScript,因为任何一个公司都要有跟用户交互的能力,比如说前端,JavaScript也就是我们前端团队非常关键的开发语言。

还有像GO和R,我们公司的分布式数据收集是用GO语言来写的,技术运营团队的运营支撑系统也会用GO语言来写。因为GO语言作为新的语言,有许多好的特性去支撑快速的开发,对于我们这些需要较高的吞吐力而业务逻辑能力不是很复杂的场景来讲,GO是一个比较好的语言。R语言是一个数据科学的语言。

2.开源技术

(1)大数据技术

说到开源技术,如果大家想进入到大数据领域,这也可能是大家需要了解和掌握的,我们用到的开源技术有大数据相关的Hadoop,这个我们已经用了超过10年的时间了,基本上现在Hadoop变成了大数据的标配,对于我们公司来讲,我们利用了Hadoop两个核心的能力,一个是分布式的文件系统,另外一个就是资源调动。Spark是我们公司13年就开始尝试,是目前做大数据处理,偏离线处理的核心的架构都是用的Spark。

Druid可能很多同学不知道,但是在国内的工业界,尤其是互联网、大数据圈内非常火热的大数据平台。它是美国的华人主导开发的一个平台,它是解决如何在大数据场景下更好的做多维分析的。我们实际上是把它做了一部分的改造,支撑线上的分析业务。我们的移动分析后的分析引擎都是基于Druid做的。

Flink是一个流式的框架,因为随着大数据的价值被逐渐的证明,大家希望大数据的处理速度能够越来越快,希望能够实时的产生一些大数据的处理结果,甚至做实时的预测,这时候,Hadoop和Spark都有一些短处,比如说,Hadoop完全不支持实时,而Spark在2.0之前,虽然支持实时,但是实时是一个vp的概念,比如,纯粹的流式处理,Spark原来是不支持的,但是2.0之后,开始引入小结构化流式。但是目前来讲,在2.2之后,Spark结构化流式虽然现在比原来要稳定许多,但是还不能成熟的生产。那如何去做比较成熟的流式处理的话,现在我们尝试的是Flink,这是德国的,是一个大学团队出来开发出的项目,目前来讲在实时流式处理上的功能和应用性的话是最好的。

Strom是出来时间比较久的流式框架,它对于某些数据量不是特别大,逻辑性不是很复杂,只做统计性计算还是不错的。

(2)数据可视化

前面提到大数据的一些东西,后面还有数据可视化,因为对于大数据来讲,只对于数据进行加工,不以一定方式展现出来,其实还是存在很多问题的。对于我们公司来讲,最初我们对于数据可视化并不是很重视,随着业务的发展,我们发现数据可视化越来越重要。我们可以看到我们用到的一些技术架构,iview是我们公司自己基于公司需求开发出来的在vue上的一个可见库,node.js我们公司大前端,我们现在前端也在往大前端走,它们在做一些数据集合和逻辑分装的时候,也适用node.js作为中间层。

(3)技术运营

我们技术运营团队也走的比较靠前,我们是在国内很早用Docker来实现容器管理的公司之一。现在大数据平台是我们后面做数据处理基本上是用在Docker上做隔离。

(4)数据存储

任何一个公司做业务,都免不了数据库,MySQL是我们必用的,我们也会用HBase去做一些数据量比较大的服务,现在我们决定用scyllaDB把HBase去掉,主要是HBase一些机器的问题。其他像Redis大家可能都知道,如果做缓存,Redis是一个不二的选择,MongoDB现在我们公司用的越来越少,主要是它有很多的缺陷。但是如果自己想快速担一个项目,就是一个不错选择,他非常灵活,对于应对数据变化上非常好的数据库,但是在一个生产环境里,数据规模比较大的情况下,虽然新的版本越来越好,但是会有很多不稳定的因素。Ceph是一个开源的对象存储,我们也在尝试把这个引入到环节当中。ArangoDB是一个图数据库,基于新的互联网和大数据时代,图关系越来越重要,图数据库也越来越重要了。

3.数据科学

前面是数据工程相关的东西,有数据必然要有数据科学家的介入,我们公司从人员组成上来讲,我们把公司分成了几块,技术上有数据科学家团队和数据工程师团队。我们所有工程师都划为工程师团队,对数据价值进行探索,也是数据科学家的工作。对于我们来讲,有使用一些大规模机器学习的框架,我们也会有自己的大规模机器学习的框架Fregata,我们希望用尽量少的代价在大规模数据上,将模型给训练出来。毕竟对于目前来讲,经常需要面对的是几十亿设备或者几千万维度,对于更好的进行模型的训练是很大的挑战。对于我们来讲,我们会做一些数据开源的技术框架,保证大规模数据能够正常的往下运转。

二、如何帮助大数据工程师实现技术成长?

前面讲了一些公司的技术和技术站,我相信对于大家学习能够有很大的帮助。那下面讲我们面临这些挑战,如何更好的去培养人才呢?

下面跟大家讲一讲我们公司在工程师发展的一些尝试,因为对于现在这种企业来讲,都在面临一些挑战,因为传统的一些管理方式和培养方式都未必适合现在的环境,我们公司从去年开始就发现公司的培养方式都需要一些调整,管理层都在考虑如何去做。每一个新员工进来的时候,我也会跟他去聊,看如何在新的环境里边更好的成长。我想跟大家讲一讲,我们公司如何去做的。

1.真实的大数据业务场景-在解决问题中成长

第一个需要知识业务场景,读再多的书,如果不能实际操练,东西都不会变成自己的。对于目前我们公司来讲,工程师最快速的成长,是能够接触真实的大数据业务场景,比如面临大量的数据,解决大量的问题,如果出现延迟的问题,该怎么去解决,这时候很多情况书上没有,需要自己去想,或者自己去翻源代码。我认为真实的业务场景是促进自己成长最真实的东西。

2.开放、平等、分享的企业文化-在工作中相互学习和挑战

公司要创造让开放平等交流的场景,有时候交流讨论是让自己把思路问题理清晰的一个途径,公司经常会有一些员工自己组织的分享,任何一个架构都会有一些架构评审,大家会比较开放的讨论问题,经常会有碰撞。我经常会说不要怕别人挑战你,挑战会肾上腺素分泌,这样大家会更佳聪明,这时候有时候想不到的方案就会想出来。所以我提倡大家技术上相互挑战。不要一个人局限在自己的空间里。

3.员工自己组织的职业委员会

另外公司也会尝试一些新的途径,任何一个公司都会有一些职级体系,我们最初的创业公司没有这些体系,随着后来规模越来越大,一种办法是像一些大公司学习,比如说阿里,腾讯,但是CEO觉得新的时代是一个社群的时代,所以在考虑有没有更好的办法能把这个事情做的更好。我相信用工程师委员会来做这个事情是比较少的,大部分的公司都不是这么做的,

4.新员工导师计划-让新人更容易融入公司

新员工导师计划,任何一个新员工进来都会有一个导师,会引导你如何更好的融入公司。

5.早餐会、午餐会-让沟通更加顺畅

如何更好的沟通。刚开始公司比较小的时候,沟通是比较有效的,但是随着公司规模越来越大,沟通就变成很大的问题,有部门,有级别,想法很难全面了解,现在公司就会组织一些新的形式,比如说早餐会和午餐会。早餐会公司管理层每天要约几个员工进行沟通了解,还有新老员工午餐会,这样能够让整个公司的沟通更佳顺畅。同时,我们也在做老崔直通车,如果不方便面对面沟通的话,就会直接进行线上的交流,可以直接跟工程师发东西,直接反馈处理。

6.请进来、走出去-行业交流开拓眼界

我们对于员工的成长,会进行行业的交流,交流时双向的,我们和清华北大国外的硅谷都有交流,会邀请一些人物来公司进行讲座,也会让员工出去讲,讲自己做了哪些事情,或者办一些沙龙,让大家能有更多的机会去交流,通过行业的交流扩充大家的眼界。

7.黑客送、创新项目-追求极致、锐意创新

当然,像一些黑客松,包括一些创新项目,相信很多公司都会有类似的东西,目的是让员工除了日常的工作,还有机会去碰撞,能把一些想法变成现实,能从事的项目做一些贡献,自己也会有一些兴趣,去提高自己,我们在不断的做尝试。因为从员工处得到的建议往往更有意义也更容易实现,因此,我们在努力听取这些建议,以把这些想法变成现实。

四、如何用三年时间从 Java 工程师转型成为大数据科学家

下面,我跟大家讲一个比较现实的例子。这是一个比较有代表性的一个成长的例子。

这个员工是2014年4月份入职的,他进来的时候,我负责我们平台后台的数据建设,我想把原来的平台转化为spark。我先讲一下他的背景,他是大专毕业的,这个工程师来之前,并不懂spark,他来的时候,我看重了一点,他上一家是一个电商公司,做推荐相关的工作,当时能够把推荐搞得清楚的很少,当时面试的时候,他就把整个做的一套都能搞得比较清晰,他不爱说话,但是讲到技术点都讲的比较透,给他offer的时候,我跟他说你可能需要用spark,你最好在入职前学习一些,入职之后,我就发现,这个人的工作精神和工作态度远远出乎的想象。入职之后,我第一周就问他问他看了没有,他说看了,后来我就让他接手相关的工作,后来他很快的把东西都完成了。他除了做了这些事情之外,还做了另外一些事情,他发现当时的一些东西很不成熟,不好用,这个工程师就自己花时间晚上加班自己写了一个新的调度的引擎,他自己喜欢去钻研,他一步步改造数据平台,去优化,1年的时间,他和另外一个工程师,把支撑公司数据使用的平台就搭建起来了,而且他整个code做的非常规整,产出也很高。16年,公司事情比较多,他一个人承担的几个人的责任,后来他主动跟我交流说,他做大数据比较久了,能不能尝试一下做数据科学家,承担一些算法相关的工作。后来,到16年,他就到数据科学做事情,他看了很多相关的书,并且读了很多的课程,到团队里面,不是科班出身,但是最优秀的员工之一。到今年年初的时候,应该4-5月份找到我说能不能做一些和业务相关的事情,正好我负责公司BO技术团队后来我就让他就参与到BO里边,也是核心成员,我告诉他说,一个好的数据科学家是做不仅仅应该是命题作文,还应该去做非命题作文,先去定义问题,再去解决问题。后来他现在在团队里就负责定义问题。这是在我们公司比较典型的,从一个背景不是特别好的人到现在非常优秀的数据科学家的成长轨迹,最核心的就是做事情的态度,去做去想,在座各位,如果像发展的话,不在于你现在会什么,而在于你想成为什么样的人。

三、结合自身经验谈谈如何成为优秀的大数据工程师

我自己工作了接近20年的时间,下面为讲一讲完工作以来成长的经历,希望对大家有写帮助。因为20年期间,计算机技术发展很快,97年的时候,企业信息化都没有很好的完成,到现在互联网和大数据时代,我自己的成长可能也对大家有一些帮助。

1.兴趣是做好一切事情的原动力

首先,我自己大学不是学计算机的,我大学时北大物理系,我发现自己对物理不感兴趣,一方面,我觉得物理对于我来讲周期太长了,一辈子可能都没有成就,我很难承受一辈子都没有任何成就。另外一方面,物理后面有些挑战。而我自己比较喜欢自己去做创新型的一些事情。我当时的兴趣点一个是生物,另外一个是计算机。而生物跨专业需要学的东西比较多,而计算机的话,大一就有相关的课程,都有相关的基础。后来我就把自己的业余时间都投给了计算机。当时我是我们专业去计算机中心最多的学生。后来大三的时候,在决定要不要读研究生,读什么专业研究生,后来,我就我就决定先考计算机研究生,考完研找计算机相关的工作。

2.从业接近20年

还不错的是,我考上了计算机相关的研究生,我也找到了一个计算机相关的工作,当时思考要读研还是要工作,后来决定还是先读研,因为大学里边时自学的,可能专业的学习下比较好,当时在华北计算技术研究所里读的研究生,可以研究生毕业之后直接留下来,但是我比较喜欢企业,研究生毕业后直接进了方正,在研究所里面的时候一直做C++,到方正的时候就开始接触项目,因为那时候时99年,开始有一些互联网化的项目,开始接触Java。在方正做了一年多。

人一般在27-28岁的时候比较迷茫,这时候一定要定下心来,我觉得我是在第三家公司的时候定下心来的,我当时在做技术售后,公司当时是在全球最领先的中间公司,我当时是看源代码,帮客户解决最困难的问题。当时在那边很长时间,主要是因为帮客户解决问题,比较有成就感。当时我是中国区唯一处于这种角色的人,整个中国区,所有复杂的问题,别人搞不定的事情都会来找我。第一个是比较爽,所有高压类的,别人搞不定的都要自己解决,只要解决了问题,反馈就很好,自己也有成就感。那几年基本上所有的时间都在帮别人解决问题,很好的锻炼了自己解决问题的能力,而且这些问题都不是书本上的,很多都要自己去思考怎么解决,并且要不断的学习新的知识。

因为我在那个公司建立了很好的口碑,大家都认识我,人脉也就建立起来了,现在公司的CEO当时经常会请问我一些问题,虽然我们两个不是一个TEAM,但是都互相信任起来了,后来他创业的时候也就拉我进来了。所以我建议大家要有责任心,要不设任何边界,建立相互信任的关系,很多时候不要想短期回报和长期回报,这是对于新进入职场人的很重要的一点。再有要不断的持续学习,我开始在不断的帮别人解决问题,后来大约10年的时候觉得自己解决问题的能力已经差不多了,我可能重新需要走研发这条路,于是,我就在10年去EBM做一些架构师的美国的项目,当时虽然是角色的转换,但是没有什么挑战,是我重新熟悉研发过程的一个阶段,当时对于我压力不是特别大,当时就在想下一个职业的起点是什么,下一份工作要做什么。

大约在11年的时候,我看到智能手机开始发微博,还能带位置,当时对于我有很大的触动,因为我本身是一个科幻主义,我本身认为世界就应该按照科幻片一样往前发展,往前走,而通过发微博显示位置,让我觉得移动互联网在未来能够发挥很大的变化,它的数据和个人十分相关,下面我想做的事情和这个有关系,这样对于个人和社会都更有意义,所以这是我当时想去做的事情。

11年创业公司来找我,我就决定去了,当时我压根不懂大数据,当时我在EBM做的东西虽然和数据有一定关系,但是都是小数据,虽然我有些东西不懂,但是我觉得不懂永远不是问题,因为这么多年的积累,我有了学习的方法,到了新的环境去学就是了,所以去了之后才是真正接触大数据,其实不是国内最早开始接触大数据的,但是因为有积累,所以知道怎么去掌握一个东西。去了之后,其实挑战不在于新的技术,而是新的工作方式,在原来公司,工作讲究流程,而在新的小公司,工作讲究快速高效,当时我的思路还没有完全转换。有个有意思的事情,当时我们决定做一个广告追踪的产品,CEO问我多长时间能够做出来,然后我刚去的第一周,CEO和产品的人问我做广告追踪的产品最多能用多久,我说2个月吧,CEO说最多3周,后来我就决定3周,2个人加班加点,用了3周的时间,把系统搭建出来,是产品最初的原型,所以人的潜力是无限的,这是外企进入新型的创业公司的转变。

从外企到创业公司,对于我来讲,最大的挑战是角色和节奏的转换。技术学习不是特别大的问题,只要积累了足够多,技术迁移能力就会逐渐具备了。新的技术都是新瓶装旧酒,只要基础掌握的比较劳,看到新的技术理解它的原理就行了,如果有兴趣的东西,可以把他的文档看一遍,了解一下,有时候我还会写一下自己的微信公众号,写的过程也是梳理清楚的过程,如果我们团队要引用这个技术,我也比较有信心,因为我知道它的体系是怎样的,只要做一些深入的调研就可以了。

3.成长经验

前面讲了一些自己的成长经验,总的来说就是,要有担当和责任心,有良好的工作习惯,做事情的态度要不设边界,不要想着自己吃不吃亏,做得多提高的是自己的能力,同时如果得到别人的认可,路就会越走越宽,同时做技术要深挖,年轻的时候不要老想着贪多,因为很多技术基本原理是一样的,把一个技术吃透,做技术迁移能力就会很容易,就像挖井一样,井挖的深浅是不一样的。

四、大数据人才具备何种素质以及如何进行面试?

1.优秀的专业素质

对于需要的人才,每个公司都差不多,有优秀的专业能力,也就是说编码、工程、架构、业务理解能力。对于我们公司来讲还有一个数据思维,因为我们是数据公司,数据思维是说在任何情况下需要考虑是不是需要数据去支撑他,需要收集哪些数据等。如果没有数据思维的话,仅仅靠逻辑不行的。

2.沟通表达能力

另外一个就是沟通表达能力,这对于任何职位来讲,沟通表达能力都是有要求的,同样,作为工程师来讲,文档撰写也是很重要的。

3.责任心和担当

另外就是要有责任心和担当

4.创新思维

最后就是要有创新。任何公司都需要创新,现在公司竞争不是价格战的时代,而是有什么创新的东西能满足客户的需求,能够让客户用我的东西,能够给客户带来价值,这是十分核心的业务能力。

5.面试流程

基本上我们的面试流程和大多数公司差不多,先是筛选简历,HR和你约下电话面试,如果电话面试不合适就不用现场面试了,如果电话面试合适,就会有3轮的专业考核,3个人包括有招聘的leader,资深工程师和跨团队的工程师,不同的方向去考核。3个人给出不同的评价之后,在决定要不要通过下一次的面试,也就是我去面试候选人,如果能通过的话就和HR去沟通,看看给不给offer。相信大部分公司面试的流程都差不多。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据钻研 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档