大数据学习路线

一,题记

要说当下 IT 行业什么最火?ABC 无出其右。所谓 ABC 者,AI + Big Data + Cloud 也,即人工智能、大数据和云计算 (云平台)。每个领域目前都有行业领袖在引领前行,今天我们来讨论下大数据 Big Data 这个方向。

二,大数据里面的角色

角色一:大数据工程

大数据工程需要解决数据的定义、收集、计算与保存的工作,因此大数据工程师们在设计和部署这样的系统时首要考虑的是数据高可用的问题,即大数据工程系统需要实时地为下游业务系统或分析系统提供数据服务;

角色二:大数据分析

大数据分析角色定位于如何利用数据——即从大数据工程系统中接收到数据之后如何为企业或组织提供有产出的数据分析,并且确实能够帮助到公司进行业务改善或提升服务水平,所以对于大数据分析师来说,他们首要解决的问题是发现并利用数据的价值,具体可能包括:趋势分析、模型建立以及预测分析等。

大数据体系

这两类角色相互依存但又独立运作,何意?没有大数据工程,大数据分析便无从谈起;但倘若没有大数据分析,我也实在想不出大数据工程存在的理由。这就类似于结婚和谈恋爱——恋爱的目的是为了结婚,且不以结婚为目的的谈恋爱都是耍流氓。

简单总结一下,大数据工程角色需要考虑数据的收集、计算 (或是处理) 和保存;大数据分析角色则是执行数据的高级计算。

三,大数据工程师

针对角色一:大数据工程说,对应的工作岗位就叫大数据工程师,对于大数据工程师而言,您至少要掌握以下技能:

linux 基础

因为大数据体系,基本都是开源软件,这些开源软件都是在开源的 linux 系统上运行的,所以你必须会基本的 linux 操作,比如用户管理,权限,shell 编程之类的

一门 JVM 系语言

当前大数据生态 JVM 系语言类的比重极大,某种程度上说是垄断也不为过。这里我推荐大家学习 Java 或 Scala,至于 Clojure 这样的语言上手不易,其实并不推荐大家使用。另外,如今是“母以子贵”的年代,某个大数据框架会带火它的编程语言的流行,比如 Docker 之于 Go、Kafka 之于 Scala。

因此笔者这里建议您至少要精通一门 JVM 系的语言。值得一提的,一定要弄懂这门语言的多线程模型和内存模型,很多大数据框架的处理模式其实在语言层面和多线程处理模型是类似的,只是大数据框架把它们引申到了多机分布式这个层面。

笔者建议:学习 Java 或 Scala

计算处理框架:

严格来说,这分为离线批处理和流式处理。流式处理是未来的趋势,建议大家一定要去学习;而离线批处理其实已经快过时了,它的分批处理思想无法处理无穷数据集,因此其适用范围日益缩小。事实上,Google 已经在公司内部正式废弃了以 MapReduce 为代表的离线处理。

因此如果要学习大数据工程,掌握一门实时流式处理框架是必须的。当下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming 以及最近一年风头正劲的 Apache Flink。当然 Apache Kafka 也推出了它自己的流式处理框架:Kafka Streams

笔者建议:学习 Flink、Spark Streaming 或 Kafka Streams 中的一个

熟读 Google 大神的这篇文章:《The world beyond batch: Streaming 101》
分布式存储框架:

虽说 MapReduce 有些过时了,但 Hadoop 的另一个基石 HDFS 依然坚挺,并且是开源社区最受欢迎的分布式存储,绝对您花时间去学习。如果想深入研究的话,Google 的 GFS 论文也是一定要读的当然开源世界中还有很多的分布式存储,国内阿里巴巴的 OceanBase 也是很优秀的一个。

笔者建议:学习 HDFS

资源调度框架:

Docker 可是整整火了最近一两年。各个公司都在发力基于 Docker 的容器解决方案,最有名的开源容器调度框架就是 K8S 了,但同样著名的还有 Hadoop 的 YARN 和 Apache Mesos。后两者不仅可以调度容器集群,还可以调度非容器集群,非常值得我们学习。

笔者建议:学习 YARN

分布式协调框架:

有一些通用的功能在所有主流大数据分布式框架中都需要实现,比如服务发现、领导者选举、分布式锁、KV 存储等。这些功能也就催生了分布式协调框架的发展。最古老也是最有名的当属 Apache Zookeeper 了,新一些的包括 Consul,etcd 等。学习大数据工程,分布式协调框架是不能不了解的, 某种程度上还要深入了解。

笔者建议:学习 Zookeeper——太多大数据框架都需要它了,比如 Kafka, Storm, HBase 等

KV 数据库:

典型的就是 memcache 和 Redis 了,特别是 Redis 简直是发展神速。其简洁的 API 设计和高性能的 TPS 日益得到广大用户的青睐。即使是不学习大数据,学学 Redis 都是大有裨益的。

笔者建议:学习 Redis,如果 C 语言功底好的,最好熟读源码,反正源码也不多

列式存储数据库

笔者曾经花了很长的时间学习 Oracle,但不得不承认当下关系型数据库已经慢慢地淡出了人们的视野,有太多的方案可以替代 rdbms 了。人们针对行式存储不适用于大数据 ad-hoc 查询这种弊端开发出了列式存储,典型的列式存储数据库就是开源社区的 HBASE。实际上列式存储的概念也是出自 Google 的一篇论文:Google BigTable,有兴趣的话大家最好读一下

笔者建议:学习 HBASE,这是目前应用最广泛的开源列式存储

消息队列:

大数据工程处理中消息队列作为“削峰填谷”的主力系统是必不可少的,当前该领域内的解决方案有很多,包括 ActiveMQ,Kafka 等。国内阿里也开源了 RocketMQ。这其中的翘楚当属 Apache Kafka 了。Kafka 的很多设计思想都特别契合分布流式数据处理的设计理念。这也难怪,Kafka 的原作者 Jay Kreps 可是当今实时流式处理方面的顶级大神。

笔者建议:学习 Kafka,不仅仅好找工作 (几乎所有大数据招聘简历都要求会 Kafka:-)),还能触类旁通进一步理解基于备份日志方式的数据处理范型

大数据平台架构

四,大数据分析师 Or 数据科学家

针对角色二:大数据分析,对应的工作岗位就叫大数据分析师或者数据科学家,作为数据科学家的我们必须要掌握以下技能:

数学功底:

微积分是严格要掌握的。不一定要掌握多元微积分,但一元微积分是必须要熟练掌握并使用的。另外线性代数一定要精通,特别是矩阵的运算、向量空间、秩等概念。当前机器学习框架中很多计算都需要用到矩阵的乘法、转置或是求逆。虽然很多框架都直接提供了这样的工具,但我们至少要了解内部的原型原理,比如如何高效判断一个矩阵是否存在逆矩阵并如何计算等。

重温同济版《高等数学》,有条件可以去 Coursea 学习宾夕法尼亚大学的微积分课程

推荐学习 Strang 的线性代数:《Introduction to Linear Algebra》——这是最经典的教材,没有之一!

数理统计:

概率论和各种统计学方法要做到基本掌握,比如贝叶斯概率如何计算?概率分布是怎么回事?虽不要求精通,但对相关背景和术语一定要了解

找一本《概率论》重新学习下

交互式数据分析框架:

这里并不是指 SQL 或数据库查询,而是像 Apache Hive 或 Apache Kylin 这样的分析交互框架。开源社区中有很多这样类似的框架,可以使用传统的数据分析方式对大数据进行数据分析或数据挖掘。

笔者有过使用经验的是 Hive 和 Kylin。不过 Hive 特别是 Hive1 是基于 MapReduce 的,性能并非特别出色,而 Kylin 采用数据立方体的概念结合星型模型,可以做到很低延时的分析速度,况且 Kylin 是第一个研发团队主力是中国人的 Apache 孵化项目,因此日益受到广泛的关注。

首先学习 Hive,有时间的话了解一下 Kylin 以及背后的数据挖掘思想。

机器学习框架:

机器学习当前真是火爆宇宙了,人人都提机器学习和 AI,但笔者一直认为机器学习恰似几年前的云计算一样,目前虽然火爆,但没有实际的落地项目,可能还需要几年的时间才能逐渐成熟。

不过在现在就开始储备机器学习的知识总是没有坏处的。说到机器学习的框架,大家耳熟能详的有很多种, 信手拈来的就包括 TensorFlow、Caffe8、Keras9、CNTK10、Torch711 等,其中又以 TensorFlow 领衔。

笔者当前建议大家选取其中的一个框架进行学习,但以我对这些框架的了解,这些框架大多很方便地封装了各种机器学习算法提供给用户使用,但对于底层算法的了解其实并没有太多可学习之处。因此笔者还是建议可以从机器学习算法的原理来进行学习,比如:

目前机器学习领域最 NB 的入门课程:吴恩达博士的 Machine Learning

大数据分析

五,大数据必备技能详细

因为笔者本身是偏 Java 应用方向的,所以整理的大数据必备技能详细,也是偏向于大数据工程师方向。总共分为五大部分,分别是:

  • 大数据技术基础

  • 离线计算 Hadoop

  • 流式计算 Storm

  • 内存计算 Spark

  • 机器学习算法

大数据技术基础

linux 操作基础

  • linux 系统简介与安装

  • linux 常用命令–文件操作

  • linux 常用命令–用户管理与权限

  • linux 常用命令–系统管理

  • linux 常用命令–免密登陆配置与网络管理

  • linux 上常用软件安装

  • linux 本地 yum 源配置及 yum 软件安装

  • linux 防火墙配置

  • linux 高级文本处理命令 cut、sed、awk

  • linux 定时任务 crontab

shell 编程

  • shell 编程–基本语法

  • shell 编程–流程控制

  • shell 编程–函数

  • shell 编程–综合案例–自动化部署脚本

内存数据库 redis

  • redis 和 nosql 简介

  • redis 客户端连接

  • redis 的 string 类型数据结构操作及应用 - 对象缓存

  • redis 的 list 类型数据结构操作及应用案例 - 任务调度队列

  • redis 的 hash 及 set 数据结构操作及应用案例 - 购物车

  • redis 的 sortedset 数据结构操作及应用案例 - 排行榜

布式协调服务 zookeeper

  • zookeeper 简介及应用场景

  • zookeeper 集群安装部署

  • zookeeper 的数据节点与命令行操作

  • zookeeper 的 java 客户端基本操作及事件监听

  • zookeeper 核心机制及数据节点

  • zookeeper 应用案例–分布式共享资源锁

  • zookeeper 应用案例–服务器上下线动态感知

  • zookeeper 的数据一致性原理及 leader 选举机制

java 高级特性增强

  • Java 多线程基本知识

  • Java 同步关键词详解

  • java 并发包线程池及在开源软件中的应用

  • Java 并发包消息队里及在开源软件中的应用

  • Java JMS 技术

  • Java 动态代理反射

轻量级 RPC 框架开发

  • RPC 原理学习

  • Nio 原理学习

  • Netty 常用 API 学习

  • 轻量级 RPC 框架需求分析及原理分析

  • 轻量级 RPC 框架开发

离线计算 Hadoop

hadoop 快速入门

  • hadoop 背景介绍

  • 分布式系统概述

  • 离线数据分析流程介绍

  • 集群搭建

  • 集群使用初步

HDFS 增强

  • HDFS 的概念和特性

  • HDFS 的 shell(命令行客户端) 操作

  • HDFS 的工作机制

  • NAMENODE 的工作机制

  • java 的 api 操作

  • 案例 1:开发 shell 采集脚本

MAPREDUCE 详解

  • 自定义 hadoop 的 RPC 框架

  • Mapreduce 编程规范及示例编写

  • Mapreduce 程序运行模式及 debug 方法

  • mapreduce 程序运行模式的内在机理

  • mapreduce 运算框架的主体工作流程

  • 自定义对象的序列化方法

  • MapReduce 编程案例

MAPREDUCE 增强

  • Mapreduce 排序

  • 自定义 partitioner

  • Mapreduce 的 combiner

  • mapreduce 工作机制详解

MAPREDUCE 实战

  • maptask 并行度机制 - 文件切片

  • maptask 并行度设置

  • 倒排索引

  • 共同好友

federation 介绍和 hive 使用

  • Hadoop 的 HA 机制

  • HA 集群的安装部署

  • 集群运维测试之 Datanode 动态上下线

  • 集群运维测试之 Namenode 状态切换管理

  • 集群运维测试之数据块的 balance

  • HA 下 HDFS-API 变化

  • hive 简介

  • hive 架构

  • hive 安装部署

  • hvie 初使用

hive 增强和 flume 介绍

  • HQL-DDL 基本语法

  • HQL-DML 基本语法

  • HIVE 的 join

  • HIVE 参数配置

  • HIVE 自定义函数和 Transform

  • HIVE 执行 HQL 的实例分析

  • HIVE 最佳实践注意点

  • HIVE 优化策略

  • HIVE 实战案例

  • Flume 介绍

  • Flume 的安装部署

  • 案例:采集目录到 HDFS

  • 案例:采集文件到 HDFS

流式计算 Storm

Storm 从入门到精通

  • Storm 是什么

  • Storm 架构分析

  • Storm 架构分析

  • Storm 编程模型、Tuple 源码、并发度分析

  • Storm WordCount 案例及常用 Api 分析

  • Storm 集群部署实战

  • Storm+Kafka+Redis 业务指标计算

  • Storm 源码下载编译

  • Strom 集群启动及源码分析

  • Storm 任务提交及源码分析

  • Storm 数据发送流程分析

  • Storm 通信机制分析

  • Storm 消息容错机制及源码分析

  • Storm 多 stream 项目分析

  • 编写自己的流式任务执行框架

Storm 上下游及架构集成

  • 消息队列是什么

  • Kakfa 核心组件

  • Kafka 集群部署实战及常用命令

  • Kafka 配置文件梳理

  • Kakfa JavaApi 学习

  • Kafka 文件存储机制分析

  • Redis 基础及单机环境部署

  • Redis 数据结构及典型案例

  • Flume 快速入门

  • Flume+Kafka+Storm+Redis 整合

内存计算 Spark

scala 编程

  • scala 编程介绍

  • scala 相关软件安装

  • scala 基础语法

  • scala 方法和函数

  • scala 函数式编程特点

  • scala 数组和集合

  • scala 编程练习(单机版 WordCount)

  • scala 面向对象

  • scala 模式匹配

  • actor 编程介绍

  • option 和偏函数

  • 实战:actor 的并发 WordCount

  • 柯里化

  • 隐式转换

AKKA 与 RPC

  • Akka 并发编程框架

  • 实战:RPC 编程实战

Spark 快速入门

  • spark 介绍

  • spark 环境搭建

  • RDD 简介

  • RDD 的转换和动作

  • 实战:RDD 综合练习

  • RDD 高级算子

  • 自定义 Partitioner

  • 实战:网站访问次数

  • 广播变量

  • 实战:根据 IP 计算归属地

  • 自定义排序

  • 利用 JDBC RDD 实现数据导入导出

  • WorldCount 执行流程详解

RDD 详解

  • RDD 依赖关系

  • RDD 缓存机制

  • RDD 的 Checkpoint 检查点机制

  • Spark 任务执行过程分析

  • RDD 的 Stage 划分

Spark-Sql 应用

  • Spark-SQL

  • Spark 结合 Hive

  • DataFrame

  • 实战:Spark-SQL 和 DataFrame 案例

SparkStreaming 应用实战

  • Spark-Streaming 简介

  • Spark-Streaming 编程

  • 实战:StageFulWordCount

  • Flume 结合 Spark Streaming

  • Kafka 结合 Spark Streaming

  • 窗口函数

  • ELK 技术栈介绍

  • ElasticSearch 安装和使用

  • Storm 架构分析

  • Storm 编程模型、Tuple 源码、并发度分析

  • Storm WordCount 案例及常用 Api 分析

Spark 核心源码解析

  • Spark 源码编译

  • Spark 远程 debug

  • Spark 任务提交行流程源码分析

  • Spark 通信流程源码分析

  • SparkContext 创建过程源码分析

  • DriverActor 和 ClientActor 通信过程源码分析

  • Worker 启动 Executor 过程源码分析

  • Executor 向 DriverActor 注册过程源码分析

  • Executor 向 Driver 注册过程源码分析

  • DAGScheduler 和 TaskScheduler 源码分析

  • Shuffle 过程源码分析

  • Task 执行过程源码分析

机器学习算法

python 及 numpy 库

  • 机器学习简介

  • 机器学习与 python

  • python 语言–快速入门

  • python 语言–数据类型详解

  • python 语言–流程控制语句

  • python 语言–函数使用

  • python 语言–模块和包

  • phthon 语言–面向对象

  • python 机器学习算法库–numpy

  • 机器学习必备数学知识–概率论

常用算法实现

  • knn 分类算法–算法原理

  • knn 分类算法–代码实现

  • knn 分类算法–手写字识别案例

  • lineage 回归分类算法–算法原理

  • lineage 回归分类算法–算法实现及 demo

  • 朴素贝叶斯分类算法–算法原理

  • 朴素贝叶斯分类算法–算法实现

  • 朴素贝叶斯分类算法–垃圾邮件识别应用案例

  • kmeans 聚类算法–算法原理

  • kmeans 聚类算法–算法实现

  • kmeans 聚类算法–地理位置聚类应用

  • 决策树分类算法–算法原理

  • 决策树分类算法–算法实现

参考出处:

https://mp.weixin.qq.com/s/OG9RcApQoIyi1lu9oiFKMg

http://heminit.com/2017/06/23/my-post2/

作者:tom
原创链接: 大数据学习路线
来源:本文首发架构中国
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。