想从事大数据、海量数据处理相关的工作,如何自学打基础?
2019-08-23 13:03:44
  • 0
  • 0
  • 0
  • 0



首先

我由各种编程语言的背景——matlab,R,java,C/C++,python,网络编程等
我又一定的数学基础——高数,线代,概率论,统计学等
我又一定的算法基础——经典算法,神经网络,部分预测算法,群智能算法等
但这些目前来讲都不那么重要,但慢慢要用到

Step 1:大数据理论,方法和技术

大数据理论——啥都不说,人家问你什么是大数据时,你能够讲到别人知道什么是大数据
大数据方法——然后别人问你,那怎么实现呢?嗯,继续讲:说的是方法(就好像归并排序算法:分,并)。到目前外行人理解无障碍大数据技术——多嘴的人继续问:用的技术。

这阶段只是基础,不涉及任何技术细节,慢慢看慢慢总结,积累对“大数据”这个词的理解。

Step 2:大数据思维
Bang~这是继Step 1量变发展而来的质变:学了那么久“大数据”,把你扔到制造业,你怎么办?
我想,这就是“学泛”的作用吧,并不是学到什么具体东西,而是学到了对待事物的思维。

----------------------------------------------------------------------
以下阶段我还没开始=_=,不好误导大家
Step 3:大数据技术基础

Step 4:大数据技术进阶

Step 5:打实战

Step 6:大融合

我现在也在学习之中~~这只是我自己为自己打算的学习历程,欢迎给出各种建议~~


我觉得重要的还是:

1. 积累对(工业)大数据的理解:定义和案例;

2. 不断改进自己的思维:要哪些能力?如何培养。

下面说说我的理解吧


1. 积累对(工业)大数据的理解:定义和案例

大数据到目前为止也没有统一的定义,但倒是有些观点可借鉴一番:

(1)    Gartner的3V定义:

Volume,数据量大;

Velocity,数据更新速度快;

Variety,数据多样性。

(2)    维基百科/谷歌(我记得好像是...)的定义:

Big Data is a broad term for data sets so large or complex that traditional data processing applications are inadequate.(即 大数据指的是所涉及的资料量规模巨大到无法通过目前主流软件工具,在合理时间内达到撷取、管理、处理并整理成为帮助企业经营决策目的的资讯。)

这两个定义,一个从“大数据”的属性层面入手,一个从“大数据”的方法层面入手,以理解、定义大数据。网上有各种各样的定义,这是我觉得比较好的两个。

然而,一两句化的定义是解决不了“对大数据的理解”这个问题的,更多的是需要通过对大数据案例学习、对网上别人观点和看法的吸收 以及 自己的实践等渠道,来慢慢加深对大数据的理解,最终才能明白这些定义的隐含内涵。

那我对这些定义的隐含内涵的理解是什么呢?

(1)    我觉得大数据的3V定义中,核心在于“Variety”(多样性)上。其实,我想表达的是:多数据源,或者说,解决问题的多个视角。

对问题的理解使得我们可以通过多个视角去考虑问题,而不同的视角代表了不同的数据源,通过综合这些数据源,我们可以得到更准确、更精确的分析结果。而Volume(量)和Velocity(数据更新速度)只是Variety(多样性)附带的“红利”而已:考虑的视角多了,数据量自然也大了,把动态的视角考虑进去,那么自然也就考虑了数据更新了。(例如,在考虑机器故障预测这件事上,我们不仅可以利用它加工出来的零件的尺寸这个数据,也可以考虑机器本身的振动信号、电压电流信号,甚至加工过程中产生的噪声信号等等,那么我们从机器、零件、环境等多个视角考虑问题,考虑多个数据源,从而实现了一个大数据应用。)

数据采集受硬件约束,而硬件越来越便宜。多视角考虑问题则受人的思维约束,同时也是更好解决问题的主要瓶颈。所以,对问题的理解和思考,应该成为我们的优势所在。

(2)    而维基百科关于大数据的定义,告诉我们算法、数据分析的困难和重要性将更上一层。而由于实现部分,不用制造考虑,交给IT部吧。

也就是说,一个定义分别告诉我们:多视角;另一个:能做不可能的事情,虽然很难。

综上,我认为,(制造中)大数据应该是一种基于多视角分析问题,并利用高扩展性、实时性的算法分析问题的一种科学范式。

这样还是很泛,真的制造大数据是很狭隘的(就目前而言)。
而无论是工业4.0,还是工业大数据或智能制造,从本质上看就是IT技术(信息)与工业技术(物理)的融合,而制造的人将是这场融合中重要的催化剂:最贴近工业技术,同时又能几时吸收一些前沿IT技术的思想,将两者融合以优化制造流程!(你可以看看GE的那个白皮书)

所以,其实对制造的大数据,我还有一点想法:

切勿切勿切勿一心落到“大数据”中“大”的追求当中!

McKinsey的报告中强调,并不是说一定要超过特定TB 级的数据集才能算是大数据。(Big Data: The Next Frontier For Innovation, Competition, And Productivity)而其实对于大数据上“量”阈值的界定,是取决于不同行业的,因此用一个单纯的阈值来判断是否是大数据是不实际的。

在制造步入数据化时代之际,更重要的是改变思维:以往无数据状况下,只能依靠纯粹机理的因果分析;而今获取数据的渠道多样且容易,应该多考虑如何利用数据以辅助优化、决策,而不单单利用机理分析!

最后,数据分析更贴近实际,而大数据分析可能是屠龙之技,是需要积累的(看看人家互联网都积累那么久,现在都还没多少很成功出名的大数据case)!


2. 不断改进自己的思维:要哪些能力?如何培养。

上面说了,制造的人是Cyber Physics System中 cyber 和 physics融合的leader,那么作为leader得做什么呢?

(1) 启动智能制造模式;

(2) 明确所需能力,并培养及获取。

领导做事并共同进步。


启动智能制造模式
GE在提出工业互联网时涉及了三个点:传感器、全新的互联网连接(平台)和数据分析与技术,这三个点结合实现了智能设备、智能系统和智能决策,从而支撑起工业互联网的框架。

智能设备

为工业设备提供数字化设备是工业互联网革命的第一步。而智能设备为这一步的实现提供了强大的基础:硬件成本的大幅下滑及物联网技术的实现、成熟,使实时、全方位监控设备、获取设备数据成为可能,而微处理器芯片和大数据分析工具及分析技术的持续进步,支撑了海量数据的处理。

这让更广泛的利益相关者能够参与到资产维护、管理和优化之中。它还确保在合适的时间引入本地和远程拥有相关机器专业知识的人。智能信息还可以返回至最初的机器。这不仅包括该机器产生的数据,还包括可以加强机器、设施和大型系统的运营或维护的外部数据。这些数据反馈循环让机器能够从历史中“学习”,从而控制系统更智能的运行。

智能系统

智能系统不单单将智能设备、数据及人结合为一个整体,使智能信息在机器、系统网络、个人或群体之间分享,推动智能协作和更好的决策,还负责网络优化、维护优化、系统恢复、学习等智能功能。

智能决策

工业互联网的全部威力将通过第三个元素实现——智能决策。当从智能设备和系统收集到足够的信息以促进数据驱动的学习时,智能决策就出现了,这反过来让机器子集和系统网络级运营功能从操作员转到安全的数字系统。

明确所需能力,并培养及获取

(1)    精心制定的大数据规划:

大数据及高级数据分析看起来漂亮,但就像战略规划一样,需要无论是对制造等业务流程,还是对数据理解,都具有全局观念和深刻认识的人才、管理者(像Microsoft这样的公司都需要请mu sigma这样的数据处理公司做咨询)。无论何时,在推进工业大数据的过程中,一定要有人总结关于公司的数据概况及其应用案例。

(2)    时刻关注三个关键能力的成长:

A.     鉴别、结合及管理多种数据源:对自己部门相关的总体数据有深刻理解,对其他部门数据有一个数据概况的认识,并思考如何结合及管理。

B.     构建高级分析模型的能力。

C.     为了确保数据和模型能够真正生成更好的决策,管理层必须具备推动转变体制的能力:如赋权相关人员,组织扁平化,数据共享会等习惯。

(3)    自动化带来的效益是明显的,信息化建设则是长期的;可能需要新的管理架构、角色或分工在其中进行协调:

信息化建设是长期且需要不断投入的,大方向对了,还需要高执行力的领导层及独立部门人员进行推行。




在这里还是要推荐下我自己建的大数据学习交流群:199427210,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。

一、如果你是零基础小白新手上路

如果你刚刚进入数据科学领域,请记住这一点:这个领域发展很快,我在这里给出的建议基本上在你工作时已经过时了。能满足2017年招聘岗位要求的建议策略,在如今可能就不满足,而今天的数据科学领域招聘标准与一两年后的标准之间的差异可能更大.

因此,如果你打算在数据科学领域发展事业,并且没有编程经验和STEM(科学Science,科技Technology,工程Engineering,数学Mathematics四门学科英文首字母的缩写)背景,那么这里有一些建议:

首先要保持开放的心态。如果你是一个新手,那么你实际上并不知道什么是数据科学,所以它完全有可能不是你想要的工作领域。请与LinkedIn上的一些数据科学家进行联系,请他们喝咖啡并向他们请教;并关注数据科学播客。要成为数据科学家需要花费大量的时间和精力,如果仅因你自认为驾驭数据科学很酷,然后就一头扎进去,这并不是冒险的好理由。请确保充分了解数据科学中不好的方面,比如数据整理,以及构建数据生产流水线,而这些工作占了数据科学家日常工作的大部分时间。

如果你决定要从事数据科学领域的工作,那太好了!你首先要做的是学习Python。尽快在MOOC(大规模网络公开课平台即慕课)上选择相关的课程项目。当熟悉Python基本用法后,请学习如何使用Jupyter otebooks工具,并选学一些数据科学领域的网络公开课。

如果你是完全从零开始的,一开始就以高级的数据科学职位为目标可能不太好,选择一些入门级的职位比较好,比如数据可视化或数据分析职业的需求量很大,并且市场需求也大。这些岗位的人员通常与数据科学家一起工作,一旦你积累了相关经验,就为今后的胜任更高级的数据科学相关职位奠定了基础。

如何包装个人品牌:如果你已经准备好申请工作,你可能会惊讶地发现个人品牌在数据科学中非常重要。由于你没有任何专业经验,或者没有计算机科学专业的研究生学位,你也许会担心个人亮点不足。但实际上这可能是最大的优势所在:如自学成才的开发人员/数据科学家,这些将成为公司可以利用的快速学习和努力工作的优点。但问题是,你背负着去实现那个形象的重担:这是一座陡峭的山需要你去攀登,但是回报肯定是值得的。

二:如果你已经是一枚软件工程师

在我遇到的专业数据科学家中约有20%是软件工程师,一方面,他们有从编写程序到形成产品的工作经验,是开发团队中难得的经验人才。另一方面,对于全栈开发人员的需求很多,使得公司比较愿意朝着全栈工程师方向培养软件工程师,即使他们的录用通知上写的职位是“数据科学”。所以你要避免被当作软件工程师而不是数据科学家。

其他一些建议:

首先可以先往更注重后端/数据库的方向上靠。把深化对数据生成线流水线的认识作为良好的开端,可以帮助你建立关键的数据处理技能;当然也可以帮你重塑自己,把自己塑造成一个经验丰富的数据管理者。

机器学习工程可能是更容易过渡到数据科学领域的,因为它和该领域的研究内容最接近。你可以先着手部署模型或将它们集成到现有应用程序,因为这可以充分利用你的现有技能,这是迈出第一步的好方法,反正以后你总是可以投入更多精力到模型开发中的。

为了让招聘人印象深刻,你很可能需要建立机器学习或数据科学项目。那么利用你的软件工程技能,把这些项目集成到可以向招聘人员和技术主管展示的应用程序中。这会特别有效,因为它很直观,并体现了你作为一个全栈数据科学家的潜力。

要记住的是:在过渡期,你的薪资极大可能会变少。即使是高级软件工程师换到数据科学领域时,通常也是要先过渡到初级职位的,但令人惊讶的是,他们中的很多人在做决定时并没有考虑这个因素,然而拿到的薪资少了,却又失望。

如何包装个人品牌:一个最简单的方法就是充分利用你的软件开发经验。作为初级职员,已经知道如何编写干净、文档齐全的代码,以及如何与他人协作,这是大多数职位申请者不具备的。如果要真正做到善于写“干净的产品代码”,你还需要尽可能多的去学习数据科学领域中类似的好案例。

三、如果你是相关专业的应届毕业生,新CS、数学或物理学毕业生

如果你是应届理科本科,硕士或博士毕业生,那么你统计学和数学基础可能很好。但你可能从来没有申请过真正的工作职位,也不知道如何准备面试。而且就算你在读期间一直有编码,但很可能无法编写干净、组织良好的代码。

所以要记住以下几点:

你在读期间所学的R是不够的。如果你是一名物理学家,并且赌定要用MATLAB或Mathematica的技能找到工作,那这可能不太会如愿;所以学习Python吧。

你可能需要尽快学习这些你没接触过的东西:协作版本控制(学习如何用GitHub与其他人一起工作)、容器化(学习如何使用Docker)和开发(学习如何用AWS或类似的服务在云上部署模型)。另外,sql也是必须的。

学习Python中的测试驱动开发,如何使用文档字符串,如何对代码进行模块化,以及如何使用Jupyter笔记本(如果还不会的话)。

如果你的领域特别注重数学,那么深度学习可能是一个很好的探索方向。但你可能会发现,从更传统的“scikit-learn”类型的数据科学开始起步,再过渡到深度学习可能更容易。最重要的是要入行,并尽快开始编程。

如何包装个人品牌::特别是如果你学的是数学或物理专业,那么最好的策略是要呈现出自己是具有深厚理论知识的人。要做到这一点,你需要能够自信地解释各种模型是如何工作的,最好要熟悉文献中最新的热点(特别是如果你的目标是深度学习的话)。

当然我所提供的建议并不能涵盖所有职业。对于软件工程师而言,他们确实比其他人走的远一些,一些有数学基础的初学者可能是最适合的深度学习的研究者。但是以上这些建议能为你的技能精进提供一个好的起点。

接下来简单介绍下大数据开发需要学习的知识点

目前基本包括如下知识Linux、Zebra、Hadoop、Flume、Hive、Hbase、Phoenix、Storm、Kafka、Scala、Spark




Linux:

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。【大数据开发学习资料领取方式】:加入大数据技术学习交流群,点击加入群聊,私信管理员即可免费领取学习资料以及全套开发工具!

Zebra:

是早期用来处理大量数据的一个项目,该项目有多台一级引擎,每个一级引擎负责一部分数据,每个一级引擎对自己负责的那部分数据进行处理,统一发往二级引擎进行汇总的操作,最终二级引擎将数据存储到关系型数据库中。是下面知识的基础。

Hadoop:

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算。

Flume:

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

Hive:

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hbase:

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

Phoenix:

Apache的Phoenix使OLTP(联机事务处理过程)和Hadoop运行分析这些低延迟应用提供了以下两个优点:

使标准SQL和JDBC APIs能够具备完全的ACID(指数据库事务正确执行的四个基本要素的缩写)事务处理能力。

使后期绑定和从以HBase为后台存储的NoSQL云数据库进行schema-on-read(读时模式)具备灵活性。

Apache Phoenix与其他Hadoop产品如 Spark, Hive, Pig, Flume, and Map Reduce完全兼容。

Storm:

是Twitter开源的分布式实时大数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。

Kafka:

是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

Scala:

是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。scala设计语法非常简洁,代码量非常少。

Spark:

Spark没有直接执行代码,构建DAG图,根据DAG图开始分配task,分发到各个work进行执行。Spark内部把命令分成两类,transformation/action。遇到action命令时,才会把前面的命令一起来执行。批量执行,吞吐量高!

Spark是Hadoop升级,互相补充。部分替代。Hadoop主要应用于离线处理,Spark相对实时处理(秒级别),Storm真正实时(亚秒级别)。


最新文章
相关阅读