0基础大数据学习路径

最近有很多人问科多老师如何学习大数据?我也是思考了很多时日才动笔写下此文。

本文的目的是希望给所有大数据初学者规划一条比较清晰的学习路线,帮助它们开启大数据学习之旅。鉴于大数据领域内的技术绚丽繁复,每位大数据初学者都应该根据自己的实际情况制定专属的学习路径。

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

大数据概念

角色

以我的愚见,当下大数据行业有两类角色:

大数据工程

大数据分析

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

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

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

我们属于哪种角色?

大数据工程师定位

既然我们了解了大数据领域内的角色分类,下面自然就需要“对号入座”确定自己的定位,这样才能有的放矢地开始大数据学习。在考虑这个问题时,我们需要参考两方面的因素:

专业知识背景

行业经验

计算机专业知识,比如操作系统,编程语言,计算机运行原理等

数学知识,这里指代的是高等数学,比如微积分、概率统计、线性代数和离散数学等, 不是x * x + y * y = 1画出来是什么图形这样的数学

而行业经验指的是你相关领域内的工作经验,具体可以分为三档:

菜鸟

有一定经验的工程师

资深专家——现在在大数据领域有个更cool的名字:数据科学家,比如前百度首席数据科学家:吴恩达博士

确定自己的定位后,我们需要对应到特定的大数据角色,以下是一些基本法则:

如果您具有良好的编程基础且深入了解计算机的交互方式以及互联网底层技术原理,但数学和统计学掌握不深,那么大数据工程可能是您今后学习的方向

如果你有一定的编程基础(掌握一些高级语言,如Python等)同时又很强的数学功底,那么大数据分析是您今天努力的方向。

大数据学习路线

不管您属于以上哪种角色,有一些大数据理论知识是您必须要掌握的,他们包括但不限于:

• 数据分片与路由:挑一个典型的分区算法去学习,比如一致性哈希算法([url=]https://en.wikipedia.org/wiki/Consistent_hashing[/url])

• 备份机制与一致性:

学习国内被奉为“圣经”但在国外也就一般的CAP理论([url=]https://en.wikipedia.org/wiki/CAP_theorem[/url])

幂等性(Idempotent):很多分布式系统状态管理的基石[url=]https://mortoray.com/2014/09/05/what-is-an-idempotent-function/[/url]

各种一致性模型:强一致性、弱一致性、最终一致性

备份机制:主从的叫法已经不怎么流行了,当前更cool的叫法是Leader-Follower模式

共识协议:国内通常翻译成一致性协议(consensusprotocol)。学习常见的几种:Paxos和Raft

•算法和数据结构

LSM:学习和B+树的区别以及优势是什么

压缩算法:找一个主流的压缩算法进行了解,比如Snappy, LZ4。另外Facebook最近开源了新一代的压缩算法:ZStandard,据说完爆一切主流压缩算法

Filter过滤器:大数据下O(1)的过滤器

     无论是学习大数据工程还是大数据分析,这些理论知识都是必要的,因为它们是设计很多分布式系统必备的技能。下面我们就针对不同的角色设计不同的学习路线。

大数据工程师技能

对于大数据工程师而言,您至少要掌握以下技能:

一门JVM系语言:

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

科多建议:学习Java或Scala

计算处理框架:

事实上,Google已经在公司内部正式废弃了以MapReduce为代表的离线处理。因此如果要学习大数据工程,掌握一门实时流式处理框架是必须的。当下主流的框架包括:Apache Samza, Apache Storm, Apache Spark Streaming以及最近一年风头正劲的Apache Flink。当然Apache Kafka也推出了它自己的流式处理框架:Kafka Streams

科多建议:

学习Flink、Spark Streaming或Kafka Streams中的一个

o熟读Google大神的这篇文章:《The world beyond batch: Streaming 101》,地址是https://www.oreilly.com/ideas/th ... batch-streaming-101

分布式存储框架:

虽说MapReduce有些过时了,但Hadoop的另一个基石HDFS依然坚挺,并且是开源社区最受欢迎的分布式存储,绝对您花时间去学习。如果想深入研究的话,Google的GFS论文也是一定要读的([url=]https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf[/url])。当然开源世界中还有很多的分布式存储,国内阿里巴巴的OceanBase也是很优秀的一个。

o 科多建议:学习HDFS

资源调度框架:

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

o科多

建议:学习YARN

分布式协调框架

有一些通用的功能在所有主流大数据分布式框架中都需要实现,比如服务发现、领导者选举、分布式锁、KV存储等。这些功能也就催生了分布式协调框架的发展。最古老也是最有名的当属Apache

Zookeeper了,新一些的包括Consul,etcd等。学习大数据工程,分布式协调框架是不能不了解的,某种程度上还要深入了解。

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

KV数据库:

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

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

列式存储数据库:

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

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

消息队列:

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

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

你可能感兴趣的:(0基础大数据学习路径)