现阶段大数据如火如荼,很多人想要学习大数据,但是却不了解大数据,也不知道该从哪开始学起的同学,希望这篇文章能够帮到你们。
1. Linux基础和JavaSE基础【包含mysql】
这些是基本功,刚开始也不可能学的很精通,最起码要对linux中的一些基本的命令混个脸熟,后面学习各种框架的时候都会用到,用多了就熟悉了。javase的话建议主要看面向对象,集合,io,多线程,以及jdbc操作即可。mysql的话要熟悉最基础的增删改查。
2. Zookeeper
zookeeper是一个分布式应用程序协服务,一般为分布式应用提供一致性服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。中文名称是动物园的意思,因为目前的大数据框架的图标很多都是动物的形状,所以zookeeper其实就是可以管理很多大数据框架的。针对这个框架,主要掌握如何搭建单节点和集群,以及掌握如何在zkcli客户端下对zookeeper的节点进行增删改查操作即可。想要深入的话可以研究一下zookeeper的Paxos算法。
3. Hadoop
目前企业中一般都是用hadoop2.x的版本了,所以就没有必要再去学hadoop1.x版本了,hadoop2.x主要包含三大块:
- hdfs 先学hdfs的架构,如何实现高可用等,接着主要学习hdfs的一些命令即可,上传,下载,删除,移动,查看等命令…
- mapreduce 这个需要重点学习下,要理解mr的原理以及代码实现,虽然现在工作中真正写mr的代码次数很少了(大部分用hive),但是原理还是要理解的。
- yarn 前期了解即可,只需要知道yarn是一个资源调度平台,主要负责给任务分配资源即可,yarn不仅可以给mapreduce任务调度资源,还可以为spark任务调度资源…yarn是一个公共的资源调度平台,所有满足条件的框架都可以使用yarn来进行资源调度。
4. Hive
hive是一个数据仓库,所有的数据都是存储在hdfs上的,具体【数据仓库和数据库】的区别大家可以去网上搜索一下,有很多介绍。其实如果对mysql的使用比较熟悉的话,使用hive也就简单很多了,使用hive主要是写hql,hql是hive的sql语言,非常类似于mysql数据库的sql,后续学习hive的时候主要理解一些hive的语法特性即可。其实hive在执行hql,底层在执行的时候还是执行的mapredce程序。
注意:其实hive本身是很强大的,数据仓库的设计在工作中也是很重要的,但是前期学习的时候,主要先学会如何使用就好了。后期可以好好研究一下hive。
5. Hbase
hbase是一个在国内很火的nosql 数据库,是一个key-value类型的数据库,底层的数据存储在hdfs上。在学习hbase的时候主要掌握 row-key的设计,以及列簇的设计。要注意一个特点就是,hbase基于rowkey查询效率很快,可以达到秒级查询,但是基于列簇中的列进行查询,特别是组合查询的时候,如果数据量很大的话,查询性能会很差。
离线项目练手
通常学到这里就可以找一两个离线项目练练手了,把上面学习的知识都串一下,加深理解,让自己对于各个组件之间的配合使用有一个总体的了解(这点非常重要)。关于这种项目网上、淘宝上有很多资源。
6. Redis
redis也是一个nosql 数据库和key-value类型的数据库,但是这个数据库是纯基于内存的,也就是redis数据库中的数据都是存储在内存中的,所以它的一个特点就是适用于快速读写的应用场景,读写可以达到10W次/秒,但是不适合存储海量数据,毕竟机器的内存是有限的,当然,redis也支持集群,也可以存储大量数据。在学习redis的时候主要掌握string,list,set,sortedset,hashmap这几种数据类型的区别以及使用,还有pipeline管道,这个在批量入库数据的时候是非常有用的,以及transaction事务功能。
7. Flume
flume是一个日志采集工具,这个还是比较常用的,最常见的就是采集应用产生的日志文件中的数据。一般有两个流程,一个是flume采集数据存储到kafka中,为了后面使用storm或者sparkstreaming进行实时处理。另一个流程是flume采集的数据落盘到hdfs上,为了后期使用hadoop或者spark进行离线处理。在学习flume的时候其实主要就是学会看flume官网的文档,学习各种组建的配置参数,因为使用flume就是写各种的配置。
8. Kafka
kafka 是一个非常优秀的消息队列,几乎所有做大数据的公司都会使用到Kafka,在工作中常用于作为一个中间缓冲层,例如,flume->kafka->storm/sparkstreaming。学习kafka主要掌握topic,partition,replicate等的概念和原理。如果有时间的话可以好好研究Kafka的源码,相当重要!
9. Scala
Scala是一门基于JVM的编程语言,不仅支持面向对象编程,而且还支持面向过程,具备了Java的所有特性,同时自己还支持强大的函数式编程,Spark和Kafka都是使用Scala编写,这也是我们需要学习它的一大原因,因为想要深入理解Spark和Kafka,必须要剖析其源码。可以预见未来Scala语言将在大数据领域大放光彩。
10. Spark
Spark 经过前几年的迅速发展,如今已经成了很多企业的首选大数据计算框架,也发展成了一个生态圈,spark里面包含很多技术,spark core,spark steaming,spark mlib,spark graphx。
spark生态圈里面包含的有离线处理spark core,和实时处理spark streaming,在这里需要注意一下,storm和spark streaming ,两个都是实时处理框架,但是主要区别是:storm是真正的一条一条的处理,而spark streaming 是一批一批的处理。
spark中包含很多框架,在刚开始学习的时候主要学习spark core和spark streaming即可。这个一般搞大数据的都会用到。有时间的话可以好好读读Spark的源码,提升自己的理解深度。spark mlib和spark graphx 可以等后期工作需要或者有时间了在研究即可。
Spark项目练手
Spark学习完后一定要找几个项目练手,最好是一个离线项目一个实时项目,好让你对于整个开发流程有了一定的认识。
至此你应该具备了作为初级大数据开发工程师的水平,开始找工作去吧!
注意:对于上面的各项技术而言,要挑一到两个深入剖析其核心原理,研读其源码,这样在面试中会更有竞争力。
其他技能推荐
Git & GitHub
Git对于程序员来说绝对是一门利器,不仅可以方便管理自己的代码,而且还可以进行多人协助开发,早学早受用!
GitHub也是个好东西啊,这上面有很多很多优秀的开源项目,还有很多你意想不到的实用软件和资料,是程序员的大宝藏啊,你可以为上面的开源项目贡献自己的代码,也可以创建上传自己的项目代码,这都是以后面试中的加分项。把刷朋友圈的时间用来刷GitHub吧,相信你会发现另一个世界。
Markdown
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。使用了Markdown后你再不需要为文章的样式而耗费时间了,专注于内容的创作,不得不说Markdown让我爱上了写作!
手机免打扰
咋一看你估计有点蒙,但确实这是一项非常有用的技能,在学习的时候把手机开启免打扰,什么微信、短信、电话(列个白名单)统统屏蔽,再找个不容易受打扰的环境,瞬间学习效率提升了好几倍,你最宝贵的东西就是你的注意力,不要让他轻易的被他人收割!
付费就是捡便宜
这项技能的前提就是你得认同你的时间比金钱更重要,我一直觉得买书是一件性价比高到离谱的事情,因为别人几个月甚至几年的时间被你花几十块钱就买过来了,而对于作者而言也不亏,因为他的时间可以被出售N多次,所以这是一个双赢的好事情。对于付费课程来说也是一样的道理,好的课程可以让你节省大量的时间,而这节省出来的时间在你心目中值多少钱呢?