2021,要这样学大数据开发
序
数据是一个企业的核心资产,这是大家公认的观点。现在是数据为王的时代,谁掌握了数据,谁就掌握了未来。
人人都听过大数据,人人都知道大数据的价值,但对于非从业者来说,如何从事大数据工作,或者怎样才能从事大数据工作,都不是很清楚。大数据从业,这个不是学校教育出来的,不是培训机构吹捧出来的,是企业(由于是大企业),拿上亿资金投入生产后,总结出来的方法论和实践论。
大数据的就业前景广阔,薪资待遇优厚,很多小伙伴都有从事大数据相关工作的强烈愿望,但是 jacky(朱元禄)想跟大家说的是:人人都想学大数据,但不是谁想学想学就能学,如果真的下定决心想去学,我这篇文章一定会给小伙伴们以价值,以帮助。
大数据对基础设施的要求比较高,所以大学或者是培训机构提供学习的机会会比较少,最近几年部分大学提供了这样的理论课程,可理论跟实践永远它就不是一回事。我们的大学理论教育,单以大数据教育为论,无论是多牛的学校,往往理论都落后于企业最少5年以上(当然你要是奔着科学家,奔着院士使劲,这个另当别论)。我们也可以看到通过大学或者商业性培训机构很少有大数据的实践机会,并且大学也好,培训机构也好,大规模的分布式实战环境还是比较匮乏。
综上,作为普通的学习者,我们应该如何学习大数据来逆袭人生,我的这篇文章或许能给小伙伴们一些启发。
大数据的人才基本上是靠企业实践培养的,没有读书读出来的,这也是我(@数据分析-jacky 朱元禄) 分享这篇文章的目的,我想以实战的角度告诉伙伴们,应该如何的学习大数据相关领域的知识。
01 大数据从业的两条“不归路”
学习大数据,从事大数据,我们首先要明确,大数据领域职业规划的两条路:
- 大数据开发工程师
- 大数据分析师(含算法)
关于第二点,什么是大数据分析师,请网络搜索并参见我写的两篇文章:《2017,要这样学数据分析》和《2017,要这样学数据挖掘》。
本次分享的内容,仅是面向大数据开发的学习路线而言的。本文成文后,我的 “数据三部曲” 跨越5年时间,终于完成。这3篇文章,是不是中国互联网上至今最全的数据学习路线总结,这个我不知道。但对于我来说,完成了我近10年数据知识的梳理,不求留名于世,但求能为有缘人提供价值。
02 大数据不是编程语言,不是框架,更不是技术
(1)大数据到底是什么
非学术来说,顾名思义大数据,就是强调的数据本身,以及针对数据所作的采集、存储、分析、赋能所运用到的技术。所以大数据,它不是一门语言,它不是一个框架,它也不是一项技术。那大数据到底是什么?大数据是一个生态。 是一个行业和技术的生态系统。 它是一系列编程语言,一系列框架和一系列技术的组合和运用。
(2)我们需要怎样的大数据
大数据要落地,就要结合企业的需求来说。大数据在企业中分为三层落地:
-
底层:大数据基础平台
- 底层从业者的工作内容包括:
- 开源框架的优化升级、本地化部署
- 有实力的公司会根据自己实际业务的特点,大改(甚至是重构)开源框架,这就要求从业者对常见的分布式开源框架原理非常精通,需要精通源代码
- 底层从业者的工作内容包括:
-
中层:大数据应用平台
- 解决如何使用底层提供的技术,帮助业务解决痛点问题
- 中层从业者的工作内容是降低底层技术的使用门槛,它要帮助业务部门能够简单高效的去使用这些大数据的技术去解决业务问题,从业者不需要精通源代码,但必须要熟练的使用相关的框架,精通大数据组件的编程开发,因为面向业务,并且跟数据打交道,所以需要对业务敏感,并且了解数据开发流程,比如ETL、数据建模等等。
-
上层:面对不同场景的数据应用
- 主要关注如何利用数据驱动业务,常用的业务包括 BI 、用户画像、智能推荐等等。
(3)企业中的大数据“形态”
要能看得懂,下面 jacky 分享得大数据开发学习路线,有必要先分享一下我自己总结得大数据系统设计和数据流程设计,以便帮助伙伴们更好得理解下面得内容;
03 大数据学习路线
大数据学习路线分为大数据编程基础、数据采集、数据处理三部分
001 编程基础
(1)编程语言
-
大数据的很多框架都是基于Java语言开发的,而且各种框架也都提供了Java API 的操作接口
-
Java 的学习,主要分3个方面:
- (1)语言基础:
- 基础语法
- 面向对象
- 接口
- 容器
- 异常
- 泛型
- 反射
- 注解
- I/O
- (2)JVM 虚拟机
- 类加载机制
- 字节码执行机制
- JVM 内存模型
- GC 垃圾回收
- JVM 性能监控与故障定位
- JVM 调优
- (3)并发/多线程编程
- 并发编程基础
- 线程池
- 原子类
- 并发容器
- JUC 并发工具类
- (1)语言基础:
(2)数据结构和算法
- 数据结构:字符串、数组、链表、堆、栈、队列、树、哈希、图
- 算法
- 基本算法:查找、排序
- 算法思想:枚举、递归、贪心、分治、动态规划、回溯
(3)计算机网络
- 体系结构和分层模型
- ARP/RARP协议
- IP/ICMP协议
- TCP/UDP协议
- DNS/HTTP/HTTPS协议
- Session/Cookie/Token等概念
(4)操作系统
- 进程与线程
- 内存管理和调度
- I/O 原理
- 文件管理
(5)数据库基础
- SQL语句书写
- SQL语句优化
- 数据库规范与设计
- 事务/隔离级别/并发/索引等重要机制
(6)设计模式
(7)Linux系统
002 数据采集
(1) 数据类型
- 结构化数据:关系型数据库形式所管理的数据
- 半结构化数据:非关系模型,但是有基本的固定结构模式,如 XML、JSON 等
- 非结构化数据:没有固定模式、如文档、图片、音视频等
(2)数据来源
- 已有数据来源
- 关系型数据库
- 非关系型数据库
- 日志数据
- 接口请求数据
- 埋点访问数据
- 搜索类数据
- 第三方服务数据
- 第三方平台的请求数据
- 第三方平台的运营数据
- 第三方埋点数据
- 爬取的网络数据
003 数据采集两大框架
(1) Flume
Flume 是一个常用的分布式数据采集和聚合框架,它典型的应用就是日志数据的采集,因为它可以定制各类的数据发送方并且能聚合数据,同时提供对数据的一个简单的处理,然后写到数据的接收方,完成数据的传输。
(2)Flume 的学习路线
- 掌握 Flume 的基本概念
- 掌握基本组件和架构(这也是数据处理的流程),包括架构的运行模式
- 安装部署
- 数据采集流程实战
(3)Logstash
Logstash 也是一个开源数据收集引擎,就是ELK系统里的L,它的数据处理流程跟Flume 相似,并且它的插件功能非常强大。
004 数据迁移(同步/传输)
在不同的存储系统或者在数据库之间进行数据的迁移,比如导入/导出这些,例如我们经常在传统的关系型数据库(比如MySQL)和大数据存储系统(比如HDFS)之间进行数据迁移交换,这时就要用到数据迁移工作,常用的数据迁移工具有两个:Sqoop 和 DataX
005 数据存储
(1)数据库
- 关系型数据库:MySQL、SQL Server、Oracle …
- 非关系型数据库:Redis(k/v型)、MongoDB(文档型)、HBase(列族)、Neo4J(图形数据库)、InfluxDB(时序数据库) … …
(2)搜索引擎
Elasticsearch 虽然也可以视为数据库,但是它更主要的身份还是一个优秀的全文搜索引擎,它的出现解决了一部分传统关系型数据库和NoSQL非关系型数据库所没有办法完成的一些高效的工作,比如高效的全文检索,结构化检索,甚至是数据分析
- Elasticsearch
(3) 分布式文件系统
除了传统的数据库,在大数据领域应用非常广泛的存储技术还包括分布式文件系统和分布式数据库,说到分布式文件系统,大名鼎鼎的HDFS就是使用非常广泛的一个大数据分布式文件系统,它既是基本的数据存储平台,也是一个大数据系统的基础设施。
(a)基本概念和架构
- 概念:Hadoop 分布式文件系统
- 基本架构:Blocks、NameNode、DataNode
- 平台主要特点:高容错、高吞吐量、大数据量支持
(b)基本使用
-
命令行接口
- 创建目录 /文件
- 删除文件/目录
- 查看文件内容
- 导入/导出文件
- 拷贝/移动文件
-
对应的API编程接口
(c)核心机制理解
- 数据读/写原理、数据复制和原理、副本策略、路由策略、心跳机制、快照机制、缓存机制、认证机制
(4)分布式数据库
代码性技术就是 HBase ,HBase 是一个构建在HDFS之上的分布式数据库,适合海里数据的存储。
( a)基本概念和架构
- 概念:面向列(簇)的分布式数据库
- 基本数据模型:NameSpace、Table、Row、Column、TimeStamp、Cell
- 基本架构:Client、Zookeeper、Master、Region Server
(b)安装部署和环境搭建
- Standalone/伪集群模式
- 集群模式
(c)常用的操作
-
基本 Shell 命令
- 状态/版本/Help命令
- 表操作
- 增删改查
-
对应的API编程接口
(d)重要的机制和原理
- 存储原理、读/写流程、复制原理、负载均衡原理、容灾与备份机制、宕机恢复和故障处理
006 数据仓库
我们经常听到以 Hive 为代表的数据仓库的概念,数据仓库可以理解为一个逻辑上的概念,它底层往往是基于文件系统或者数据库打造的,数据仓库领域现在比较火热的框架也很多,比如经典的像 Hive,现在比较流行的有 ClickHouse、Pig、Kylin、Presto 这些用的都非常广泛,我们以Hive为例,它的出现,可以让开发人员能够通过SQL的方式来方便的操作处理HDFS上的数据,所以它适合于批量的数据处理,上手非常友好,使用门槛会降低,这是Hive这种数据仓库或者说这种数据分析工具出现的一个意义。
(1)概念
- 一款构建在Hadoop之上的数据仓库
(2)Hive 架构
- 用户接口
- CLI
- Web GUI
- JDBC/ODBC
- MetaStore:元数据服务
- Driver:SQL的解析器、编译器、执行器、优化器
- HiveServer2
- beeline
(3) 安装部署
- 内嵌模式、Local 模式、远程模式
(4)数据类型
- 基本数据类型:整型、浮点型、字符串、日期、布尔
- 复杂数据类型: array、map、struct
(5) 常用操作
- 太多了,略
007 数据处理之通用计算两大框架
前面我们看到数据经过了数据存储这个步骤,数据现在是有着落了,那接下来当然就是充分的挖掘数据所蕴含的价值了,更直白一点说,就是对存储下来的这些数据进行各种各样的查询、分析、计算,这样的话才能为数据赋能产生价值,所以接下来绝对的大头就是数据处理(或者说数据分析和计算)。数据处理的两大方向:通用计算和流式计算。通用计算可以理解为离线的数据计算,流式计算可以理解为在线的数据计算。
(1)MapReduce
早期的MapReduce 就是Hadoop 提供的分布式计算框架,可以用来统计和分析HDFS上的海量数据,适用于速度不敏感的离线批处理,所以针对 MR这个东西,虽然说它是很老,但是它确实是经典,然后,后来出现的内存计算框架Spark更加适合这种迭代计算,
(a)基本概念
- 分布式计算编程框架、用于编写针对大数据的批处理程序
(b)主要工作流理解
- 输入、拆分、映射、Shuffle、Reducing、输出
(c)编程实践
- 作业配置
- 作业提交/监督
- 作业输入/输出
- 任务运行
- Mapper/Reducer/Driver编写实现
- Combiner/Partitioner编程实现
(d)重要机制理解掌握
- 内部通信协议
- 作业提交与初始化
- 任务分配和执行
- JobTracker内部实现
- TaskTracker内部实现
- Task 运行过程
(2)Spark
(a)概念
- 分布式内存计算框架
(b)Spark部署模式
- Local模式
- Standalone模式/HA
- Spark on Yarn 模式
(c)核心组件
首先 RDD 是弹性分布式数据集,这是 Spark 最基本的数据抽象,核心就是围绕它的相关概念、操作、转化、原理进行的展开,所以非常重要。第二个模块就是Spark-SQL,这个是Spark 的子模块,主要用于操作结构化数据,有点像前面Hive数据仓库,接下来就是Spark的扩展,Spark-Streaming,这个是Spark中负责流式计算的子模块,和下面将要介绍的流式计算,其实应该归为一类,但是我们把组件还是放到Spark这个通用计算里。Spark-MLlib 是Spark机器学习子模块,包含各种高级分析工具包和算法程序。
- Spark-Core
- RDD 核心:RDD 概念、RDD创建、操作RDD、RDD缓存、宽窄依赖、DAG、常用转换/行动算子、键值对操作、连接/聚合操作、数据分区、函数传递
- 分布式共享变量:广播变量、累加器
- Spark-SQL
- Spark-Streaming
- Spark-MLlib
008 数据处理之流式计算两大框架
在一些不需要实时计算的场合,MR,Spark这些框架应用的十分广泛,但是在一些离线数据分析没有办法满足需求的场景下,比如金融风控,实时推荐这种等等,这个时候在线计算,或者说流式计算就变得十分必要了。这也是现如今Storm 、Flink这些一大批优秀的实时计算框架的主阵地,尤其是现在的 Flink 非常的火,基于它构建的处理引擎是非常的常见,
(1) Storm
(a)基本概念和架构
-
简介:分布式实时计算框架
-
核心概念
- Topologies 拓扑
- Spouts 数据源
- Bolts 数据流处理组件
- Streams 数据流
- Tuple 元组
- Stream groupings
- Reliability
- Tasks
- Workers
-
核心架构
- Nimbus 进程
- Supervison 进程
- Worker 进程
- Executor 线程
- ZooKeeper
(b)开发环境搭建
- 单机环境
- 集群环境
(c)重要机制掌握
(d)Storm 编程模型
(e)Storm 其他编程实战
(2) Flink
(a)基本概念和框架
(b)开发环境安装和部署
(c)数据处理(流操作)
(d)窗口机制
(e)其他重要机制
009 集群高可用框架
Zookeeper
- 分布式管理框架
010 其他中间件技术
Kafka
- 它不仅仅是一个高吞吐量得消息系统,有了它之后,像系统得解耦、峰值压力的缓冲,高效的流处理等等,都使得它成为了大数据开发的必备工具。
End
转载请注明出处和作者,欢迎转载!