抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2017 年 5 月 11 日

“天地玄黄,宇宙洪荒”,在二十世纪末开始进入信息化时代,人类慢慢地从线下的面对面交流转移到了线上进行简单的 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 相关研究,探索数据到智能的可行方案。

2017 年 5 月 11 日 17:323198

评论

发布
暂无评论
发现更多内容

第7周总结:性能

慵秋

数字货币并不能完美诠释区块链金融

CECBC区块链专委会

区块链技术 社会价值 打通数据孤岛 重建产业信用

【数据结构】Java 常用集合类 HashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

Django Models随机获取指定数量数据方法

BigYoung

django 数据 random 随机 Models

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

web 性能压测工具

Z冰红茶

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

计算机网络基础(八)---网络层-路由概述

书旅

计算机网络 网络协议 计算机基础 AS

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

PV与UV你的网站也可以

北漂码农有话说

为啥Underlay才是容器网络的最佳落地选择

BoCloud博云

云计算 容器 容器网络

创新监管首批8个试点应用公示 其中7个涉及区块链

CECBC区块链专委会

Java如何调用Python(二)

wjchenge

架构感悟 7- 性能优化何为

旭东(Frank)

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

chenzt

Netty-物联网设备Channel管理

凸出

Java Netty ConcurrentHashMap 物联网 channel

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

原生Ingress灰度发布能力不够?我们是这么干的

BoCloud博云

云计算 容器 云原生 PaaS

为什么我们要自主开发一个稳定可靠的容器网络

BoCloud博云

云计算 PaaS fabric 容器云

技术​选型的艺术

YourBatman

技术选型 湖北

web压力性能测试

周冬辉

压力测试

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

Self-Compassion,对自己好一点

霍太稳@极客邦科技

创业 个人成长 自我管理 创业心态

超详细讲解网络中的数据链路层~

程序员的时光

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

API网关——Kong实践分享

BoCloud博云

云计算 容器 PaaS API

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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