大数据需要学习什么?很多人问过我这个问题。
大数据是近五年兴起的行业,发展迅速,很多技术经过这些年的迭代也变得比较成熟了,同时新的东西也不断涌现,想要保持自己竞争力的唯一办法就是不断学习。
大数据需要的语言
Java
java可以说是大数据基础的编程语言,据我这些年的经验,我接触的很大一部分的大数据开发都是从Jave Web开发转岗过来的(当然也不是绝对我甚至见过产品转岗大数据开发的,逆了个天)。
一是因为大数据的本质无非就是海量数据的计算,查询与存储,后台开发很容易接触到大数据量存取的应用场景 二就是java语言本事了,天然的优势,因为大数据的组件很多都是用java开发的像HDFS,Yarn,Hbase,MR,Zookeeper等等,想要深入学习,填上生产环境中踩到的各种坑,必须得先学会java然后去啃源码。
说到啃源码顺便说一句,开始的时候肯定是会很难,需要对组件本身和开发语言都有比较深入的理解,熟能生巧慢慢来,等你过了这个阶段,习惯了看源码解决问题的时候你会发现源码真香。
Scala
scala和java很相似都是在jvm运行的语言,在开发过程中是可以无缝互相调用的。Scala在大数据领域的影响力大部分都是来自社区中的明星Spark和kafka,这两个东西大家应该都知道(后面我会有文章多维度介绍它们),它们的强势发展直接带动了Scala在这个领域的流行。
Python和Shell
shell应该不用过多的介绍非常的常用,属于程序猿必备的通用技能。python更多的是用在数据挖掘领域以及写一些复杂的且shell难以实现的日常脚本。
分布式计算
什么是分布式计算?分布式计算研究的是如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多服务器进行处理,后把这些计算结果综合起来得到终的结果。
举个栗子,就像是组长把一个大项目拆分,让组员每个人开发一部分,后将所有人代码merge,大项目完成。听起来好像很简单,但是真正参与过大项目开发的人一定知道中间涉及的内容可不少。
比如这个大项目如何拆分?任务如何分配?每个人手头已有工作怎么办?每个人能力不一样怎么办?每个人开发进度不一样怎么办?开发过程中组员生病要请长假他手头的工作怎么办?指挥督促大家干活的组长请假了怎么办?后代码合并过程出现问题怎么办?项目延期怎么办?项目后黄了怎么办?
仔细想想上面的夺命十连问,其实每一条都是对应了分布式计算可能会出现的问题,具体怎么对应大家思考吧我就不多说了,其实已经是非常明显了。也许有人觉得这些问题其实在多人开发的时候都不重要不需要特别去考虑怎么办,但是在分布式计算系统中不一样,每一个都是非常严重并且非常基础的问题,需要有很好的解决方案。
后提一下,分布式计算目前流行的工具有:
离线工具Spark,MapReduce等 实时工具Spark Streaming,Storm,Flink等
这几个东西的区别和各自的应用场景我们之后再聊。
分布式存储
传统的网络存储系统采用的是集中的存储服务器存放所有数据,单台存储服务器的io能力是有限的,这成为了系统性能的瓶颈,同时服务器的可靠性和安全性也不能满足需求,尤其是大规模的存储应用。
分布式存储系统,是将数据分散存储在多台独立的设备上。采用的是可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
主流的分布式数据库有很多hbase,mongoDB,GreenPlum,redis等等等等,没有孰好孰坏之分,只有合不合适,每个数据库的应用场景都不同,其实直接比较是没有意义的,后续我也会有文章一个个讲解它们的应用场景原理架构等。
分布式调度与管理
现在人们好像都很热衷于谈"去中心化",也许是区块链带起的这个潮流。但是"中心化"在大数据领域还是很重要的,至少目前来说是的。
分布式的集群管理需要有个组件去分配调度资源给各个节点,这个东西叫yarn; 需要有个组件来解决在分布式环境下"锁"的问题,这个东西叫zookeeper; 需要有个组件来记录任务的依赖关系并定时调度任务,这个东西叫azkaban。
当然这些“东西”并不是唯一的,其实都是有很多替代品的,我这里只举了几个比较常用的例子。
关于分组
上面的大数据组件分组其实是比较纠结的,特别是作为一个有强迫症的程序猿,有些组件好像放在其他组也可以,而且我又不想要分太多的组看起来会很乱,所以上面这张图的分组方式会稍主观一些。分组方式肯定不是绝对的。
举个例子,像kafka这种消息队列一般不会和其它的数据库或者像HDFS这种文件系统放在一起,但是它们同样都具备有分布式持久化存储的功能,所以就把它们放在一块儿了;还有openTsDB这种时序数据库,说是数据库实际上只是基于HBase上的一个应用,我觉得这个东西更侧重于查询和以及用何种方式存储,而不在于存储本身,所以就主观地放在了“分布式计算与查询”这一类,还有OLAP的工具也同样放在了这一组。
目的
大家都知道大数据的技术日新月异,作为一个程序猿想要保持竞争力就必须得不断地学习。写这些文章的目的比较简单, 一是可以当做一个笔记,梳理知识点;二是希望能帮到一些人了解学习大数据 。
南京北大青鸟大数据培训,大数据开发、数据分析与挖掘新课咨询报名中...