想做数据科学家/工程师?从零开始系统规划大数据学习之路
大数据文摘作品,转载要求见文末
作者 | SAURABH
编译 | 张伯楠,万如苑,刘云南
引言
大数据的领域非常广泛,往往使想要开始学习大数据及相关技术的人望而生畏。大数据技术的种类众多,这同样使得初学者难以选择从何处下手。
这正是我想要撰写本文的原因。本文将为你开始学习大数据的征程以及在大数据产业领域找到工作指明道路,提供帮助。目前我们面临的最大挑战就是根据我们的兴趣和技能选定正确的角色。
为了解决这个问题,我在本文详细阐述了每个与大数据有关的角色,同时考量了工程师以及计算机科学毕业生的不同职位角色。
我尽量详细地回答了每一项人们在学习大数据过程中遇到或可能会遇到的问题。为帮助你根据兴趣选择发展途径,我添加了一组树图,相信会对你找到正确的途径有所帮助。
注释:学习之路树状图
在这个树状图的帮助下,你可以根据你的兴趣和目标选择路径。 然后,你可以开始学习大数据的旅程了。 后台回复“职业路径”3个字,下载高清版本。
目录表
1.如何开始?
2.在大数据领域有哪些职位需求?
3.你的领域是什么,适合什么方向?
4.勾勒你在大数据领域的角色
5.如何成为一名大数据工程师?
o什么是大数据行业术语?
o你需要了解的系统和结构
o学习去设计解决方案并且学习相关技术
6.大数据学习路径
7.资源
1.如何开始?
人们想开始学习大数据的时候,最常问我的问题是,“我应该学Hadoop(hadoop是一款开源软件,主要用于分布式存储和计算,他由HDFS和MapReduce计算框架组成的,他们分别是Google的GFS和MapReduce的开源实现。由于hadoop的易用性和可扩展性,因此成为最近流行的海量数据处理框架。hadoop这个单词来源于其发明者的儿子为一个玩具大象起的名字。), 分布式计算,Kafka(Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统),NoSQL(泛指非关系型的数据库)还是Spark(Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处)?”
而我通常只有一个答案:“这取决于你究竟想做什么。”
因此,让我们用一种有条理的方式来解决这个问题。我们将一步步地探索这条学习之路。
2. 在大数据行业有哪些职业需求?
在大数据行业中有很多领域。通常来说它们可以被分为两类:
大数据工程
大数据分析
这些领域互相独立又互相关联。
大数据工程涉及大量数据的设计,部署,获取以及维护(保存)。大数据工程师需要去设计和部署这样一个系统,使相关数据能面向不同的消费者及内部应用。
而大数据分析的工作则是利用大数据工程师设计的系统所提供的大量数据。大数据分析包括趋势、图样分析以及开发不同的分类、预测预报系统。
因此,简而言之,大数据分析是对数据的高级计算。而大数据工程则是进行系统设计、部署以及计算运行平台的顶层构建。
3.你的领域是什么,适合什么方向?
现在我们已经了解了行业中可供选择的职业种类,让我们想办法来确定哪个领域适合你。这样,我们才能确定你在这个行业中的位置。
通常来说,基于你的教育背景和行业经验我们可以进行如下分类:
教育背景
(包括兴趣,而不一定与你的大学教育有关)
计算机科学
数学
行业经验
新人
数据学家
计算机工程师(在数据相关领域工作)
因此,通过上面的分类,你可以把自己的领域定位如下:
例1:“我是一名计算机科学毕业生,不过没有坚实的数学技巧。”
你对计算机科学或者数学有兴趣,但是之前没有相关经验,你将被定义为一个新人。
例2:“我是一个计算机科学毕业生,目前正从事数据库开发工作。”
你的兴趣在计算机科学方向,你适合计算机工程师(数据相关工程)的角色。
例3:“我正作为数据科学家从事统计工作。”
你对数学领域有兴趣,适合数据科学家的职业角色。
因此,参照着定位你的领域吧。
(此处定义的领域对你确定在大数据行业的学习路径至关重要。)
4.根据领域规划你的角色
现在你已经确定了你的领域,下一步,让我们规划出你要努力的目标职位吧。
如果你有卓越的编程技巧并理解计算机如何在网络(基础)上运作,而你对数学和统计学毫无兴趣,在这种情况下,你应该朝着大数据工程职位努力。
如果你擅长编程同时有数学或者统计学的教育背景或兴趣,你应该朝着大数据分析师职位努力。
5.如何成为一名大数据工程师
让我们先定义一下,一名受到行业承认的大数据工程师都需要学习和了解什么。首先以及最重要的一步是确认你的需求。你不能在不清楚个人需求的情况下直接开始学习大数据。否则,你将一直盲人摸象。
为了明确你的需求,你必须了解常用的大数据术语。所以让我们来看一下大数据到底意味着什么?
5.1 大数据术语
大数据工程通常包括两个方面 – 数据需求以及处理需求。
5.1.1 数据需求术语
结构:你应该知道数据可以储存在表中或者文件中。储存在一个预定义的数据模型(即拥有架构)中的数据称为结构化数据。如果数据储存在文件中且没有预定义模型,则称为非结构化数据。(种类:结构化/非结构化)。
容量:我们用容量来定义数据的数量。(种类:S/M/L/XL/XXL/流)
Sink吞吐量:用系统所能接受的数据率来定义Sink吞吐量。(种类:H/M/L)
源吞吐量:定义为数据更新和转化进入系统的速度。(种类:H/M/L)
5.1.2 处理需求术语
查询时间:系统查询所需时间。(种类:长/中/短)
处理时间:处理数据所需时间。(种类:长/中/短)
精度:数据处理的精确度。(种类:准确/大约)
5.2 你需要知道的系统和架构
情景1:
为分析一个公司的销售表现需要设计一个系统,即创建一个数据池,数据池来自于多重数据源,比如客户数据、领导数据、客服中心数据、销售数据、产品数据、博客等。
5.3 学习设计解决方案和技术
情节1的解决方案:销售数据池
(这是我的个人解决方案,如果你想到一个更高明的解决方案请在下面分享一下)
那么,一个数据工程师会怎样解决这个问题呢?
需要记住的一点是,大数据系统的目的不仅仅是无缝整合各种来源的数据,而使其可用,同时它必须能使得,用于开发应用系统的数据的分析和利用变得简单迅速和易得(在这个案例中是智能控制面板)。
定义最后的目标:
1. 通过整合各种来源的数据创建一个数据池。
2. 每隔一定时间自动更新数据(在这个案例中可能是一周一次)。
3. 可用于分析的数据(在记录时间内,甚至可能是每天)
4. 易得的架构和无缝部署的分析控制面板。
既然我们知道了我们最后的目标,让我们尽量用正式术语制定我们的要求吧。
5.3.1 数据相关要求
结构:大部分数据是结构化的,并具有一个定义了的数据模型。但数据源如网络日志,客户互动/呼叫中心数据,销售目录中的图像数据,产品广告数据等是非结构化的。 图像和多媒体广告数据的可用性和要求可能取决于各个公司。
结论:结构化和非结构化数据
大小:L或XL(选择Hadoop)
Sink 吞吐量:高
质量:中等(Hadoop&Kafka)
完整性:不完整
5.3.2 处理相关要求
查询时间:中至长
处理时间:中至短
精度:准确
随着多个数据源的集成,重要的是要注意不同的数据将以不同的速率进入系统。 例如,网络日志可用高颗粒度连续流进入系统。
基于上述我们对系统要求的分析,我们可以推荐以下大数据体系。
6.大数据学习路径
现在,你已经对大数据行业,大数据从业人员的不同角色和要求有所了解。 我们来看看你应该遵循哪条路来成为一名大数据工程师。
我们知道大数据领域充斥着多种技术。 因此,你学习与你的大数据工作角色相关的技术非常重要。这与任何常规领域有点不同,如数据科学和机器学习中,你可以从某些地方开始并努力完成这一领域内的所有工作。
下面你会发现一个你应该通过的树状图,以找到你自己的路。即使树状图中的一些技术被指向是数据科学家的强项,但是如果你走上一条路,知道所有的技术直到“树叶节点”总是很好的。 该树状图源自lambda架构范例。
注释:学习之路树状图
任何想要调配应用程序的工程师必须知道的基本概念之一是Bash 脚本编程。你必须对linux和bash 脚本编程感到舒适。这是处理大数据的基本要求。
核心是,大部分大数据技术都是用Java或Scala编写的。但是别担心,如果你不想用这些语言编写代码,那么你可以选择Python或者R,因为大部分的大数据技术现在都支持Python和R。
因此,你可以从上述任何一种语言开始。 我建议选择Python或Java。
接下来,你需要熟悉云端工作。 这是因为如果你没有在云端处理大数据,没有人会认真对待。 请尝试在AWS,softlayer或任何其他云端供应商上练习小型数据集。 他们大多数都有一个免费的层次,让学生练习。如果你想的话,你可以暂时跳过此步骤,但请务必在进行任何面试之前在云端工作。
接下来,你需要了解一个分布式文件系统。最流行的分布式文件系统就是Hadoop分布式文件系统。在这个阶段你还可以学习一些你发现与你所在领域相关的NoSQL数据库。下图可以帮助你选择一个NoSQL数据库,以便根据你感兴趣的领域进行学习。
到目前为止的路径是每个大数据工程师必须知道的硬性基础知识。
现在,你决定是否要处理数据流或静止的大量数据。 这是用于定义大数据(Volume,Velocity,Variety和Veracity)的四个V中的两个之间的选择。
那么让我们假设你已经决定使用数据流来开发实时或近实时分析系统。 之后你应该采取卡夫卡(kafka)之路,或者还可以采取Mapreduce的路径。然后你按照你自己创建的路径。 请注意,在Mapreduce路径中,你不需要同时学习pig和hive。 只学习其中之一就足够了。
总结:通过树状图的方式。
从根节点开始,并执行深度优先的通过方式。
在每个节点停止查验链接中给出的资源。
如果你有充足的知识,并且在使用该技术方面有相当的信心,那么请转到下一个节点。
在每个节点尝试完成至少3个编程问题。
移动到下一个节点。
到达树叶节点。
从替代路径开始。
最后一步(#7)阻碍你! 说实话,没有应用程序只有流处理或慢速延迟数据处理。 因此,你在技术上需要成为执行完整的lambda架构的高手。
另外,请注意,这不是学习大数据技术的唯一方法。 你可以随时创建自己的路径。 但这是一个可以被任何人使用的路径。
如果你想进入大数据分析世界,你可以遵循相同的路径,但不要尝试让所有东西都变得完美。
对于能够处理大数据的数据科学家,你需要在下面的树状图中添加一些机器学习渠道,并将重点放在机器学习渠道上,而不是下面提供的树状图。 但我们可以稍后讨论机器学习渠道。
根据你在上述树状图中使用的数据类型,添加选择的NoSQL数据库。
该表格表示数据存储类型要求及相应的软件选择
如你所见,有大量的NoSQL数据库可供选择。 所以它常常取决于你将要使用的数据类型。
而且为了给采用什么类型的NoSQL数据库提供一个明确的答案,你需要考虑到你的系统需求,如延迟,可用性,弹性,准确性当然还有你当前处理的数据类型。
7.资源
初学者的Bash指南,来自Machtelt Garrels
1.Python
让每个人变成python专家,来自Coursera(https://www.coursera.org/specializations/python)
用Python学数据科学之路,来自Coursera(https://www.analyticsvidhya.com/learning-paths-data-science-business-analytics-business-intelligence-big-data/)
2. Java
Java编程简介1:开始使用Java编码,来自 Udemy(https://www.edx.org/course/introduction-programming-java-1-starting-uc3mx-it-1-1x)
中级和高级Java编程,来自Udemy(https://www.udemy.com/intermediate-advanced-java-programming/)
Java 编程介绍2,来自 Udemy(https://www.edx.org/course/introduction-programming-java-2-writing-uc3mx-it-1-2x)
面向对象Java编程:数据结构和超越专业化,来自Coursera(https://www.coursera.org/specializations/java-object-oriented)
3. 云
大数据技术基础,来自亚马逊网络服务(https://www.edx.org/course/introduction-programming-java-starting-uc3mx-it-1-1x)
AWS上的大数据,来自亚马逊网络服务(https://aws.amazon.com/training/course-descriptions/bigdata/)
4. HDFS
大数据和Hadoop 要点,来自 Udemy(https://www.udemy.com/big-data-and-hadoop-essentials-free-tutorial/)
大数据基础,来自大数据大学(https://bigdatauniversity.com/learn/big-data/)
Hadoop入门工具包(https://www.udemy.com/hadoopstarterkit/)
Apache Hadoop文档(https://hadoop.apache.org/docs/r2.7.2/)
书--Hadoop集群部署(http://shop.oreilly.com/product/0636920033448.do)
5. Apache Zookeeper
Apache Zookeeper文档(http://shop.oreilly.com/product/0636920028901.do)
书 - Zookeeper(https://zookeeper.apache.org/doc/r3.4.6/)
6. Apache Kafka
完整初学者Apache Kafka课程(http://shop.oreilly.com/product/0636920028901.do)
学习Apache Kafka基础和高级主题(https://www.udemy.com/learn-apache-kafka-basics-and-advanced-topics/)
Apache Kafka文档(https://kafka.apache.org/documentation/)
书 - 学习Apache Kafka(https://www.amazon.in/Learning-Apache-Kafka-Nishant-Garg-ebook/dp/B00U2MI8MI/256-7260357-1334049?_encoding=UTF8&tag=googinhydr18418-21)
7. SQL
用MySQL管理大数据(https://www.udemy.com/beginners-guide-to-postgresql/)
SQL课程(http://www.sqlcourse.com)
PostgreSQL初学者指南(https://www.udemy.com/beginners-guide-to-postgresql/)
高性能MySQL(http://shop.oreilly.com/product/0636920022343.do)
8. Hive
使用Hive访问Hadoop数据(https://cognitiveclass.ai/learn/big-data/0
学习Apache Hadoop生态系统 Hive(https://cognitiveclass.ai/learn/big-data/)
Apache Hive文档(https://hive.apache.org)
Hive编程(https://hive.apache.org)
9. Pig
Apache Pig 101,来自大数据大学(https://cognitiveclass.ai/courses/introduction-to-pig/)
用Hadoop与Apache Pig编程(https://bigdatauniversity.com/courses/introduction-to-pig/)
Apache Pig文档(http://shop.oreilly.com/product/0636920044383.do)
书 - Pig编程(https://pig.apache.org/docs/r0.12.0/)
10. Apache Storm
使用Apache Storm实时分析(https://www.udacity.com/course/real-time-analytics-with-apache-storm--ud381)
Apache Storm文档(https://www.udacity.com/course/real-time-analytics-with-apache-storm--ud381)
11. Apache Kinesis
Apache Kinesis文档(https://aws.amazon.com/cn/documentation/kinesis/)
Amazon Kinesis通过Amazon Web Services流式浏览开发人员资源(https://aws.amazon.com/cn/documentation/kinesis/)
亚马逊Kinesis Streams开发人员资源,来自亚马逊网络服务(https://aws.amazon.com/documentation/kinesis/)
12. Apache Spark
数据科学、工程与Apache(https://www.edx.org/xseries/data-science-engineering-apache-spark)
Apache Spark文档(https://www.edx.org/xseries/data-science-engineering-apache-spark)
书 - 学习Spark(https://www.edx.org/xseries/data-science-engineering-apacher-sparktm)
13. Apache Spark Streaming
Apache Spark Streaming文档(http://spark.apache.org/streaming/)
尾注
我希望你们喜欢阅读这篇文章。 借助这种学习途径,你将能够踏上你在大数据行业的旅程。 我已经叙述了大部分你找工作会要求的主要概念。
来源:https://www.analyticsvidhya.com/blog/2017/03/big-data-learning-path-for-all-engineers-and-data-scientists-out-there/