皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

通向大数据的巴别塔:这个完整详细的套路是否适合你?

作者 叶杰生

“天地玄黄,宇宙洪荒”,在二十世纪末开始进入信息化时代,人类慢慢地从线下的面对面交流转移到了线上进行简单的Email信息交互,这是Web1.0信息互联网,在MSN、QQ等PC端软件出现后,人们开始通过文字、语音、视频等方式在网上进行社交,随着移动互联网的高速发展,智能手机的出现,社交、购物、远程教育等活动可以随时随地进行,我们全面进入了Web2.0社交互联网。

而如今,人们在互联网上进行着的各项活动(网页浏览行为、APP使用行为等)信息汇聚成的一片数据的汪洋大海,企业再也无法用以前的小型数据库、小规模计算中心来处理这些庞大的数据了,我们今天一天产生的数据就足以睥睨过去20世纪的所有书籍转为电子文字的大小总和。这些互联网上的活动数据,人们在进行信息“饕餮大餐”后留下的“面包屑”,就如同天上璀璨的繁星,数不胜数。

概要

就是在这样的背景下,大数据孕育而生,在(Google、高校、开源社区等)多年的耕耘下,众多技术百花齐放,到现在已经是百家争鸣的兴盛状况。那么,无论是刚入大学校园的莘莘学子,还是初入职场的技术小白,亦或者是在传统软件里的“老”程序员等,他们在大数据的门前熙来攘往,很多人徘徊踟蹰又不得入。

这是作者为什么写本文的原因,这篇文章将会提供你大数据的学习指南,就像圣经里描述的一样,人们想要登上天堂,于是齐心协力开始搭建巴别塔,大数据的最终目标其实还远远尚未达到,我们也是在进行时,这座巴别塔并不一定适合任何人,你也可以按自身理解另辟蹊径。本文能够给你的,是一份大纲指南,每一个细节单元的内容对应着非常多的教科书,希望你能够在大数据领域里,无论是学术还是工作都能有所突破。

每一个想要学习大数据的人问我的问题常常是,“我应该从Hadoop,还是分布式计算、Flink、Kafka、NoSQL还是Spark开始学起?”我往往这样回答: “这取决于你到底想做什么”。当然,要回答这个问题的前提是,你要有个总体上的了解。所以,让我们通过三个问题(市场、自身、流程三方面)的解答,再一步步了解大数据的整条学习路径。

一、在大数据行业需要什么人才?

  • 大数据工程
  • 大数据分析

这两个领域相互依赖又区分明显,在解决一个实际问题的时候,我们往往先需要一个大数据工程方面的人才先搭建起大规模数据的系统,收集到了数据后布置计算平台,然后就需要大数据分析方面的专家来对数据在计算平台上进行分析和研究,而这样的团队我们称之为数据科学团队,当然,也有十分厉害的人,能够两方面都精通,我们称之为数据科学家,也称为“独角兽”(在企业里,独角兽公司指的是尚未上市,估值超过十亿美金的公司,这里用来比喻数据科学家的珍贵),想要成为“独角兽”的话,需要付出远超常人的艰辛,还需要有十足的天赋,如果没有,往往只能成为大数据的通才,空有口才,却无实干能力。

大数据工程解决的是关于海量数据(起码在T级别以上)的设计、部署、存储和计算需求等方面的问题。在当今,大数据工程师要设计和部署的系统,往往都是与消费者和内部工作人员直接使用的应用程序。

而大数据分析则是基于在处理使用由大数据工程师设计的系统上的大量数据上的相关概念,大数据分析涉及分析趋势,模式和开发各种分类和预测系统。

因此,简而言之,大数据分析涉及大数据的高级计算(统计、建模预测等),而大数据工程涉及系统的设计、部署和实施。

二、你的背景和兴趣如何,你适合什么岗位?

现在,我们已经知道了工业界里需要什么样的大数据人才,那么你究竟是怎样的背景,你究竟适合从事哪一方向的岗位呢?这需要结合你的实际情况进行分析。总的来说,这需要先了解你的教育背景和行业经验:

一、教育背景(这包括个人兴趣和自学功底,不一定指你的大学专业)
1.计算机科学相关
2.数学相关
二、行业经验
1.新手小白(在读生或者刚刚工作)
2.分析相关
3.计算机工程相关

这样,确定了归属,你才能找到你大数据行业学习路径的前提,当你清晰地了解自己的背景后,请选择你想要在大数据方面作为第一个的起点领域。

大数据工程领域

如果你有娴熟的编程能力和理解计算机互联网交互原理(基础),而不对数学和统计学感兴趣,你这种情况下你应该先进入大数据工程领域。

大数据分析领域

如果你擅长编程,并且你的教育背景和兴趣于数学和统计学相关。你先应该进入大数据分析领域。确定从哪里开始后,我们先结合现实案例来描述下大数据是如何解决一个现实问题的。

三、大数据工作完整初体验是怎么样的?

如果你不对整体的流程有所了解,你只是盲人摸象,只是在黑暗中摸索着大数据这只巨大无比的原始象。为了确定工作流程,你首先必须了解常见的大数据术语。那么让我们来看一下大数据工作实际上是什么意思?首先,我们要确定需求,确定需求就必须用到大数据的专业术语,我们先简单过一下确定一个需求所会用的术语。

                                大数据术语(部分)

大数据项目有两个主要方面 – 数据要求和处理要求。

一、数据要求术语

  1. 结构:如果数据是按照预定义的数据格式排列存储(即具有表结构),则称为结构化数据。如果它存储在文件中没有固定的模式,则称为非结构化数据,一般数据分为这两种结构,当然,像JSON这样的则称为半结构化数据。
  2. 大小:系统所处理的数据量评估,例如说大概一天会有100M以内的数据需要系统处理,那么则评估为S,往上以此增加为M,L,XL,XXL和最后的实时流处理等。
  3. Sink吞吐量:定义系统可以接收数据的速率,低速率的称为L(如同2G网络,中速的为M(如同3G)高速的称为H(如同4G或者以上)。
  4. 源吞吐量:定义可以将数据更新和转换到系统的速率,如同Sink吞吐量一样分为三个等级。

二、处理要求术语

  1. 查询时间:系统执行查询所需的时间,其实等同于查询效率,也跟吞吐量一样分为H/M/L三种等级。
  2. 处理时间:处理数据所需的时间,分为H/M/L。
  3. 精度:数据处理的准确性,有些数据需要非常精确,有些只要大概的一个统计值来替代即可,则分为精确/近似。

那么如何用这些术语来如何描述需求与设计大数据系统架构呢?

各种现实情境下有各其问题各自对应的具体要求,大数据里,往往需要结合以上两个方面的要求来进行分析,才能最终确定拍板定案。

假设我们有一下这个场景: 我们公司的需要制作一个能够通过从客户数据,潜在客户数据,呼叫中心数据,销售数据,产品数据,博客等多个数据源创建的数据湖来设计分析公司销售业绩的系统。

这只是我所想出的一个解决方案,不排除有更好的解决方案。那么,大数据工程师如何解决这个问题呢?牢记一点,大数据系统不仅要设计成能够无缝集成其他来自各种源的数据,使其一直有效可用,还必须设计成一种能够对数据的进行分析、和使用的平台,能够简易快速地让大数据分析师在上面开发应用程序(在这种情况下也为智能仪表板)。

因此我们的最终目标是:

  1. 通过集成来自多个来源的数据创建数据湖。
  2. 定期自动更新数据(在这种情况下可能是每周)
  3. 数据可用性分析(全天候,甚至每天)
  4. 架构,便于访问和无缝部署分析仪表板。

现在我们知道我们的最终目标是什么,让我们尝试以术语的专业方式来制定要求。

 

一、数据相关要求

  1. 结构:大部分数据是结构化的,并具有定义的数据模型。但数据源,如网络日志,客户互动/呼叫中心数据,销售目录中的图像数据,产品广告数据。图像和多媒体广告数据的可用性和要求可能取决于公司。 结论:结构化与非结构化数据都需要兼顾。
  2. 大小:L或XL(选择Hadoop)
  3. Sink吞吐量:H
  4. 质量:M(Hadoop&Kafka)
  5. 完整性:不完整

二、处理相关要求

  1. 查询时间:M至L
  2. 处理时间:M至L
  3. 精度:准确

同时随着多个数据源的集成,重要的是注意到不同的数据将以不同的速率进入系统。例如,网络日志将以高级别的粒度(实时流的形式)进入。因此,综合上述对系统要求的分析,我们可以推荐以下大数据架构设计。

通向大数据的巴别塔:这个完整详细的套路是否适合你?

这样,我们就完成了一次完整的大数据系统设计体验,关于系统实现或者数据分析的技术细节可以通过下面学习路径具体习得。

大数据学习路径

在这个下面树形图的帮助下,你就可以开始学习大数据的旅程。现在,你已经了解大数据行业,大数据从业人员的不同角色和要求,也知道了这身的兴趣出发点,我们希望你先从自己的出发点开始,到达Data Scientist节点的时候,能够再学习其他路径的知识。

(点击放大图像)

通向大数据的巴别塔:这个完整详细的套路是否适合你?

共分为四条学习路径:

  1. 大数据工程;
  2. 大数据分析;
  3. 共同学习;
  4. 数据科学。总体要点

一、大数据工程和大数据分析路径是起始路径,共同学习和数据科学路径的前提依赖于前面两者。

二、任何想要部署应用程序的工程师必须掌握的基本概念之一是Bash脚本,你必须非常了解Linux和bash脚本,这是处理大数据的基本要求。大部分大数据技术核心都是用Java或Scala语言写的。但是别担心,如果你不想用这些语言写代码,那么你可以选择Python或者R,因为大部分的大数据技术现在都支持Python和R。因此,你可以从上述任何一种语言开始。我建议选择Python或Java。

三、你需要熟悉在云端服务器上工作,这是因为如果你没有在云端处理过大数据,没有人会重视你。可以尝试使用AWS、或阿里云等提供商的小型数据集,大多数都有一个小型的免费服务版本让你练习。

四、你需要了解一个分布式文件系统。最流行的DFS就是Hadoop分布式文件系统。在这个阶段你还可以学习一些你领域相关的NoSQL数据库。下图可以帮助你选择一个NoSQL数据库,以便根据你感兴趣的领域进行学习。

五、到目前为止的路径是每个大数据工程师必须知道的基础知识。现在,你决定是否要处理数据流或存储着的大量数据,这是用于定义大数据(Volume,Velocity,Variety和Veracity)的四个维度中两个之间的选择。

六、假设你决定使用数据流来开发实时或近实时分析系统。那么你应该采取Kafka路径,或者你采取Map reduce路径,你就需要按照你创建的路径学习。请注意,在MapReduce路径中,不需要Pig和Hive都学习,只学习其中之一就足够了。

学习流程

  1. 先从起始路径开始,用深度优先策略遍历。
  2. 到下一个节点前先停止,检查文章最后学习资源附录中给出的资源。
  3. 如果你充分了解并且在使用该技术方面有相当的信心,那么请转到下一个节点。
  4. 在每个节点尝试完成至少3个编程问题。
  5. 转入下一个节点学习。
  6. 到达路径尾端节点。
  7. 从另外一条路径再开始。

别让最后一步(第七步)挡住了你!说实话,没有应用程序能够同时以流处理或慢速延迟处理数据。因此,你在工程技术上需要成为架构的高手。另外,请注意,这不是学习大数据技术的唯一方法。你可以随时创建自己的路径。但这是一个可以被任何人使用的路径。如果想进入大数据分析领域,也可以遵循相同的路径。对于能够处理大数据的数据科学家,需要在下面部分的树中有机器学习、深度学习、可视乎研究等,先要将重点放在机器学习上。

我希望你喜欢阅读这篇文章。借助这种学习途径,你能够踏上在大数据行业的旅程。我已经涵盖了大部分要求工作的主要概念。如果有任何疑问或疑问,请随时提问。

学习资源附录(推荐Google)

  1. Bash Scripting

    Bash Guide for Beginners by Machtelt Garrels

  2. Python

    Python for Everybody Specialization by Coursera Learning Path for Data Science in Python for Coursera

  3. Java

    Introduction to Programming with Java 1 : Starting to Code with Java by Udemy

    Intermediate and Advanced Java Programming by Udemy

    Introduction to Programming with Java 2  by Udemy Object Oriented Java Programming: Data Structures and Beyond        Specialization by Coursera

  4. Cloud

    Big Data Technology Fundamentals by Amazon Web Services

    Big Data on AWS by Amazon Web Services

  5. HDFS

    Big Data and Hadoop Essentials by Udemy

    Big Data Fundamentals by Big Data University

    Hadoop Starter Kit by Udemy

    Apache Hadoop Documentation

    Book –Hadoop Cluster Deployment

  6. Apache Zookeeper

    Apache Zookeeper Documentation

    Book – Zookeeper

  7. Apache Kafka

    The complete Apache Kafka course for beginners by Udemy

    Learn Apache Kafka Basics and Advanced topic by Udemy

    Apache Kafka Documentation

    Book – Learning Apache Kafka

  8. SQL

    Managing Big Data with MySQL by Coursera

    SQLCourse by SQLcourse.com

    Beginner’s Guide to PostgreSQL by Udemy

    High-Performance MySQL

  9. Hive

    Accessing Hadoop Data using Hive by Big Data University

    Learning Apache Hadoop Ecosystem Hive by Udemy

    Apache Hive Documentation

    Programming Hive

  10. Pig

    Apache Pig 101 by Big Data University

    Programming Hadoop with Apache Pig by Udemy

    Apache Pig Documentation

    Book- Programming Pig

  11. Apache Storm

    Real-time analytics with Apache Storm by Udacity

    Apache Storm Documentation

  12. Apache Kinesis

    Apache Kinesis Documentation

    Amazon Kinesis Streams Developer Resources by Amazon Web Services

  13. Apache Spark

    Data Science and Engineering with Apache by edx

    Apache Spark Documentation

    Book – Learning Spark

  14. Apache Spark Streaming

    Apache Spark Streaming Documentation

本文借鉴参考了saurabh的Big Data Learning Path for all Engineers and Data Scientists out there

作者介绍

叶杰生,TalkingData数据科学组,主要职责是负责挖掘与处理TalkingData的地理位置数据以及开发相关位置服务,后期与数据管理组和数据收集组同事联合开发了WI-FI采集器-来来,熟悉掌握scala编程语言、spark、hadoop、jenkins、zepplin等大数据处理相关开源工具,熟悉机器学习相关算法理论,关注大数据、人工智能以及深度学习等领域,目前转入总部6负责AI、IOT相关研究,探索数据到智能的可行方案。

转自 http://www.infoq.com/cn/articles/big-data-leads-to-the-tower-of-babel