本文适合还不十分了解大数据的你,同样适合不确定要不要学习大数据的你,将带你了解行业的需求和与之相关的岗位,也同样适合刚刚踏入大数据领域工作的你,欢迎收藏并将文章分享给身边的朋友。
笔者从事大数据开发和培训多年,曾为多家机构优化完整大数据课程教学体系,也为多所高校设计并实施大数据专业培养方案,并进行过多次大数据师资培训、高校骨干教师学习交流,希望自己的一点粗浅认识可以帮助到大家。
本文并不是要将大数据描述成一个万能的、能解决所有问题的东西,而是客观的阐述其作用,能够解决的一些问题。希望将这一领域尽可能完整的介绍给你,至于如何明智的选择应该要依据自己的实际情况来决定。
要说什么是大数据我想大家多少已经知道了,很多落地的案例已经深入到了我们的生活中。大数据具有数据量大、数据类型丰富复杂、数据增长速度快等特点,一切的数据分析必须建立在真实的数据集上才会有意义,而数据质量本身也是影响大数据分析结果的主要的因素之一。
简单来说,我们应该学习的就是一系列的大数据生态圈技术组件,以及贯穿整个数据分析流程的分析方法和思维,并且思路更重要一些!只有明确了数据分析场景与流程,我们才能够确定需要整合哪些大数据组件来解决这一问题。
大数据分析的第一步就是对数据的收集和管理,我们应该先来了解一下数据是怎么样产生的?又是被如何捕获的?那些看似杂乱的数据真的能被分析吗?
主动产生的数据比较好理解,在个人会使用互联网或者各种应用的过程中,通过填写提交表单就会产生数据。类似的,我们在线下环境中,比如银行开卡、纸质表格的填写,最终都会变成电子数据流入到系统中。通常,我们会将这一类行为归为用户注册,通常会是产生数据的起点。(当然,有一些时候我们分析的数据也可能并不关心用户自身的信息。)除此之外,利用一些平台的功能,用户会上传和发布很多类型的数据,如文本类信息、音频、视频等,这都是数据产生和积累的方式。
对于用户行为数据更多的来自于应用埋点和捕获,因为用户使用应用一定要通过鼠标点击或者手指触碰来和用户界面进行交互。以网页应用(网站)为例,对于鼠标的所有行为大多数都能够最终靠事件监听的方式来捕获,鼠标在某个区域停留的时间、要不要进行点击,我们还可以根据用户的行为数据刻画出整个页面的热力图。
最常见的结构化数据就是存储在关系型数据库中的数据,如MySQL、Oracle等,这一些数据都具备一个特点,就是十分规范。因为关系型数据库属于写时模式,也就是说不符合预先设定的数据类型和规范的数据不会通过校验,存不到数据库中。除数据库中的数据以外,那些能直接导入到数据库中的数据文件我们也可以把它们视为结构化的数据,如:CSV格式。这一些数据常常要具备统一的列分隔符、行分隔符,统一的日期格式等等。
对于非机构化的数据指的就是除结构化数据以外的另一大类数据,通常没有预期的数据机构,存储在非关系型数据库中,如:Redis、MongoDB,使用NoSQL来做相关操作。也可能是非文本类型的数据,需要非常对应的手段来处理和分析。
问起大数据到底能不能预测,倒不如来说一说大数据是如何预测的。如果结合AI领域来说的话就很复杂了,就说最简单的场景:用统计分析的办法来进行辅助决策,或者用经典数据挖掘算法进行模型的训练。既然是预测,那就非常有可能准确,也有一定的可能不准确,分析者需要做的就是合理的使用各种数据维度,结合相应的算法或统计分析方法,去训练或拟合出一个潜在的规律。这样的一个过程就好比,给了我们三个点(1,1)、(2,2)、(3,3),我们大家可以大概猜到它的函数式有可能为y=x一样。当然,实际的分析过程要比这复杂的多得多,毕竟有很多函数式都能够完全满足这三个点,但到底哪一个是我想要的规律呢?这就需要理论知识与行业经验并重,不断的打磨和优化才能获得一个可靠的模型。
但是我们大家可以明确的一点是,大数据的预测也好、推荐也好,都是基于算法的,是数学的,也是科学的,但并不会百分之百的准确。
了解了什么是大数据,接下来介绍一下大数据开发这一岗位,先直接上岗位描述(JD:Job Description)给大家感受一下。然后来说明一下大数据开发工程师的主要工作,最后再来总结一下要掌握的技能。
从上面的岗位描述中我们大家可以发现大数据开发工程师一般会与业务进行对接,要么是基于某一个场景进行有明确的目的性的数据处理,要么是打造一个大数据产品。在这里我们也需要纠正一个小小的概念,可能有些小伙伴认为有大数据岗位需求的公司一定是一个自身具备大量数据、有着大量用户积淀的公司,其实不然。
除了分析公司自身业务数据以外,一样能打造一款通用的大数据产品,你们可以参考我的另一篇文章:如何用开源组件“攒”出一个大数据建模平台。所以大数据的岗位虽然不像普通的开发工程师那么多,但是需求依然存在。
如果是分析公司自身的业务数据,一般会更偏重于使用大数据组件和算法库,构建出一个可行的数据分析方案。你们可以看出,现在完全不涉及算法的大数据岗位已经比较少了。这里的算法指的并不是数据结构,而是指机器学习库,与数据挖掘相关的算法,至少要知道怎么控制算法的输入与输出,算法能够解决的问题,可能不会涉及到亲自建模,在大数据分析的小节中会详细介绍。
如果是开发一个大数据产品,比如建模平台,或者是致力于解决数据采集、数据可视化的解决方案。那么这更适合从开发工程师转行大数据开发工程师的小伙伴,相当于在开发一个应用的基础上又增加了底层的大数据组件。这就要求我们既需要懂得原始的服务端框架的那一套,又能够驾驭大数据开发API。
操作系统:Linux(基本操作、软件维护、权限管理、定时任务、简单Shell等)
说到数据分析师,这不是本文的重点,因为门槛相比来说较高,另一方面更偏数学、统计学方向,更多的是与数据、算法打交道,编程的产物通常不是应用,而是一个算法模型。我们仍旧是先来看一看相关的JD:
如果说大数据开发的岗位需求是一条一条的话。。。那么数据分析师的岗位需求大概率是一篇一篇的。。。
从上面的要求的中能够正常的看到,每一个岗位都讲业务场景介绍的很详细,毕竟,数据分析师的主要工作之一是建立算法模型,这是垂直领域的深耕。通常我们没办法直接用那些已存在的算法,必须要做评估、优化、或是组合使用。除此之外,你还必须拥有这一领域的业务经验,才能够很好的胜任。
上面介绍了和大数据相关的两个主要工作岗位,其实与大数据相关的岗位还有很多,真正归纳起来,ETL工程师也可以说擦边,因为随着数据量的不断增大,无论是银行内部还是大数据服务企业都在从传统ETL工具向大数据集群进行过渡。
涉及到了这么多的技术点,如何学习才更高效呢?首先好入门的自然是大数据开发,对于Linux的操作系统和编程语言的部分没什么过多说明的,别觉得有些东西没用就跳过,有一些时候编程思想和解决实际问题的方法同样很重要,课本上有的一定要扎实。对于和大数据相关的组件,看上去十分的繁杂,很多小伙伴可能都是钻研于每个组件的用法、算子、函数、API,这当然没有错,但是同时一定别忘记埋在其中的主线,那就是:完整的数据分析流程。在学习的过程中一定要了解各组件的特点、区别和应用的数据场景。
在离线计算场景下,使用的都是历史数据,也就是不会再发生改变的数据。在数据源确定以后,这一些数据不会再增加、也不会再更新,更适合对实时性要求不高的场景。大多数情况下是周期性的计算某一个指标或执行一个Job,运算耗时基本上能控制在分钟级。
实时计算所面对的数据是不断的流入的,要可使用合适的组件处理实时流入的数据。有一些时候单位时间内的数据流入会比较多,消费的比较慢。有一些时候单位时间内的数据流入会比较少,消费的会比较快。所以在采集数据时一方面要保证数据不丢失,同时还需要有中间件来管理好数据。在进行实时计算时能够正常的使用微批次的方式也能够正常的使用其他方式,同时要处理好计算结果合并的问题,实时展示最新的结果。
以上只是简单的列举了一些实现不同场景数据流程的组件整合方案,诣在对大家说一定要善于发现和总结不同组件的特点,把合适的组件放在合适的位置,这也是面试官经常喜欢问的场景题目。
其实每个组件的使用方法和调用API并没有很复杂,重点还是在于流程化、一体化、把组件之间连接起来,不断的渗透和强化数据分析和处理的思路,能够把一个需求直接翻译成数据分析方案,这才是学习的重点。
作者介绍:资深开发者,全栈开发工程师,大数据高级开发工程师。具有多年开发及培训经验,实施过多次面向学生、企业、高校骨干教师等各种各样的形式的培训。
加入我们,亲身体验一家专业科技媒体采写的每一个细节,在最有前景的行业,和一群遍布全球最优秀的人一起成长。坐标北京·清华东门,在大数据文摘主页对话页回复“招聘”了解详情。简历请直接发送至
本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问。