一、大数据概念的由来
首先我们来认识一下,什么是大数据,现在这个词已经没有那么火热了,很多人也多少有了一些认识。大家打开百度,也可以直接查到一些定义和特性。
那在这里我以开发者的视角来给大家讲一个小故事。在比较久远的年代,人们记录信息只能通过文字,也就是说数据的作用是能够把需要的信息记录下来。
在那个时候,数据的流通并不是很方便,数据的增长量也不是很大,数据的类型也比较单一。随着科技的发展,声音和图像都可以通过相应的设备进行记录并且以相应格式的文件存储在电脑的磁盘中,也就是说数据的类型不再是单一的文本类型。
在《遗失的访谈》:尘封的预见一文中,乔布斯说:“软件行业正在发生两件激动人心的事:一个是面向对象编程,另一个就是Web。Web将实现我们盼望已久的梦想,计算机不再仅仅充当计算工具,开始承担通信功能。”这个访谈发生在1995年,我们也不得不佩服一下伟人的远见。
由于互联网的发展,数据的流通变得简单且频繁,出现了很多电商平台及社交网站,同时还包括各大搜索引擎,这其中的数据都蕴含着很大的价值。
此时,在金融证券领域也积攒下了大量的数据。当数据量较小时,我们想要分析这些数据其实并不困难,可以通过相关的建模工具以及数据库软件,结合统计分析的方法,还是能够得出一个比较满意的结果的。
但是,当数据量增大以后,数据类型变得复杂以后,我们依然期望通过对真实的历史数据进行分析,在可接受的时间范围内获得其中潜在的价值,这就是我们需要解决的问题,也是大数据相应的特点。
因此,一个庞大的大数据软件体系诞生,其中包括了大大小小的组件和框架,满足数据处理过程中各个环节的需要。
二、大数据的应用领域
那么刚刚和大家讲了一下大数据的相关概念以及致力于解决的问题,核心价值在于能够创造利润和提高效益。由于任何行业都离不开数据,所以也可以说数据是无处不在的。
作为一个个体,我们使用的电子设备在不断的进行着数据交互;从宏观上来说,作为各个软件服务的提供商收集到的数据量是特别庞大的。
例如购物平台的交易数据,金融证券的变化信息,各应用中能够采集到的用户行为信息,流量中包含的信息。
大数据涉及的领域是十分广泛的,并且由于我们处在一个人口大国,在数据量方面的优势是很明显的。
无论是生物领域的基因大数据,科教领域的智慧教育,和我们生活相关的智慧城市,还是具体到某一个领域的数据分析,你都能够找到大数据的影子。
从事数据分析相关工作的朋友应该知道,对于一个数据计算结果影响更多的还是数据质量,而算法只能起到修正和调优的作用。那么数据质量可以通过数据维度的数量以及数据本身是否失真等因素决定。
如果数据维度越全面,那么我们可以将一个角色刻画的更为细致和具体,也更容易做出精确的预测。数据维度大家可以理解为是角色的属性或者发生的某个行为的指标,比如身高,体重,月收入,每个月的花销等等。
三、企业的人才需求
然大数据的应用领域如此之广,那么是不是对于从业者的要求都是那么高呢?
其实并不是大家想象的那样,因为虽然领域不同,但是处理数据的过程是基本一致的,不同的地方在于数据的来源,数据的类型以及使用的算法和研究的目的。
而对于开发者来说,以上的不同可以使用四个字来概括,那就是:业务逻辑。在一个团队中,必然要有一个相应领域的专家去把握大的方向,而并不需要每个人都在这个领域中钻研的很深入。
目前的人才需求主要可以分为两个大的方向,大数据开发以及数据分析师。大家可能听说过开发工程师和算法工程师两个岗位,但是都比较笼统。
在大数据领域中,开发工程师需要从事的工作主要包括大数据集群环境的搭建以及维护,应用的封装与开发,实现整个数据分析的各个流程的业务衔接。
算法工程师主要负责数据分析的核心部分,即知道了What I want的前提下,进一步确定What I need,最终明确How to do,通常需要数学专业出身,有丰富的业务经验,吃过大量paper的人才能完美胜任。
四、大数据的学习路线
那么刚刚只是在概括的说大数据领域的人才需求,下面以开发者和学习者的角度再来介绍一下如何转型大数据领域以及如何推开大数据的大门。
在确定学习路线之前,我们要关注当下的主流技术。针对去学习,比较直接的方式就是在各大招聘网站去看一下岗位职责以及技术要求,或者通过百度指数的走势对比来确定学习的优先级。
现在来说一些专业性的知识,当我们需要处理大数据量的数据时,一台机器是不够的,核心思想就是分而治之,一项任务由多个人,多台机器一同完成,同时为了保证数据存储的稳定性,会采用冗余存储的方式。
早年时Google发布了有关于GFS的论文,提出了分布式和扩展性的概念,这也是大数据存储的核心思想,将一份数据存储多份。
为此,需要多台计算机协同工作,而Windows在商用服务器方面的表现一直差强人意。所以我们除了大数据相关概念的学习以外,首先要学习的就是Linux操作系统。
整个大数据处理软件种类繁多,也各司其职,适用于不同的数据处理需要。从整个数据分析的流程来说,可以分为三大部分:数据采集、数据分析、结果展现。
其中数据采集部分根据数据类型的不同也有不同的处理方式。国内主要使用Hadoop作为分布式文件存储系统,称之为HDFS。也就是说首先我们需要想办法将数据存储到HDFS中,对于文本文件的处理较为简单,可以直接进行上传。
而对于各应用产生的数据,通常存放在数据库中,我们会使用Sqoop组件进行数据的拉取,同时使用Hive数据仓库以及Hbase分布式数据库进行管理。由于时间的关系我们不能对每一个软件展开介绍,感兴趣的朋友可以关注我的知识星球进行提问。
在数据分析阶段,我们需要先进行准备工作,称之为数据清洗,通常可以使用hql来完成,在数据分析阶段,如果是简单的统计分析,我们可以使用Hadoop封装的MapReduce计算模型来实现,或者使用hql。
如果需要进行预测分析,则需要使用相应支持机器学习库的计算框架来完成,如Spark,并且整个的分析过程也会发生一些变化,聚类与分类算法的流程是不同的,随着学习的深入大家可以自行扩展。
在数据可视化部分主要是使用一些web组件进行图表的展现,这一部分对于开发者来说应该算是轻车熟路,主要使用的是百度的开源项目Echarts,特别新版本推出以后,对于千万级别数据的渲染提供了较好的支持。
当然,以上介绍的都只是必须掌握的部分,除此之外根据不同的业务场景,还需要针对流数据的处理,低延时的数据分析,深度学习框架等等,
在此列举部分技术点:flume,kafka,Storm,Elasticsearch,Cboard。
那么对于还在学校中的同学们,如果你是数学专业,而又想向大数据开发岗位发展,那么恭喜你,你做了一个很明智的选择,虽然在刚开始的时候受限于编码的能力,但是数学对人思维的影响是潜移默化的,后期你所展现出的优势是十分明显的。
除了学好本专业的课程以外,还需要付出一番努力,去接触一些相关的基础学习内容,如:Linux,Java,数据库,软件工程,数据结构。
如果你想在数据分析方向更有建树,那么根据我目前对市场的了解,企业还是会更认可研究生学历,并且科班出身的统计专业以及数学相关专业的学生。
如果是非名校毕业的本科生可能很难在一开始就找到十分心仪的数据分析师的工作,毕竟这一岗位需要的并不仅仅是算法的知识,业务经验同样重要。
以上只是我个人的一点认知,供大家学习和参考,不足之处还可以再多多交流,谢谢大家。