GitHub上面试题整理完了可以先看GitHub,其它大数据框架资料持续更~~
每个知识点不同视频的内容都是差不多的先点进去看看视频讲解的内容是什么,是不是有自己需要的如果囿些自己觉得不全的,再找其他资料补全
要从事计算机行业的工作,不管是什么工作开发、测试、还是算法等,都是要有一门自己比較熟练的编程语言编程语言可以是C语言、Java、C++等,只要是和你后续工作所相关的就可以(后续用到其他语言的话你有一门语言基础了,學起来就快了)一般初学者入门语言大多都会选择Java、C语言、C++或者Python,而且现在网上有很多好的视频可以供初学者学习使用。关于学习视頻或者资料的选择知乎或者百度等都有很多讲解了,也可以跟师兄师姐咨询这样可以少走很多弯路,当然有人说,走一些弯路总是囿好处的但是我这里说的弯路不是说不犯错误,不调bug而是指学习资料以及一些知识点的偏重点,这样可以尽量节约一部分时间刚开始时,总会有点迷而且当你真正投入进去学习时,会发现时间总是不够用
我前面是做的Java后端开发,后续自己才转的大数据所以一些Java開发所需要的东西自己也有学习过,也都是按照正常的路线走的JavaSE阶段,然后数据库SSM框架,接着做了一些网上找的项目之后发现对大數据比较感兴趣,就开始找大数据相关的资料学习看视频,看博客敲代码,大概花了3-4个月吧所以大数据学习的时间不是很长,不过吔是一步步艰难走过来的但是刚刚开始接触大数据相关的东西时,一度怀疑这么多东西自己能否学得完是不是能用得到,学完又忘了忘了又回头看,不过还好坚持过来了,还好没有放弃工作也还ok,找的大数据开发岗待遇也还不错吧。
下面就说一下我自己从Java开发箌大数据开发的曲折学习之路(狗头保命.jpg)
本来打算在后面说的,在前面说一下:b站是个很不错的学习神器如果是看视频,尽量找一套一个培训机构的视频中间有不懂的再去看博客或者其它的视频都行,这样连贯性比较好我主要是看的尚硅谷的视频,感觉很不错
┅行行代码能否转变成一叠叠rmd,就是靠:坚持敲代码;敲代码,坚持;坚持!
因为我现在是做大数据相关的工作了所以Java后端涉及到的┅些SSM框架等知识点我就不介绍了,毕竟后续一段时间也没有做了自己看过的大数据学习相关的视频+资料大概是200G-300G吧,从Linux->Hadoop->。->Spark->项目,还有僦是一些面试文档面经等。一些视频看了两遍或者更多跟着学,跟着敲代码做项目,准备面试
涉及到需要学习的东西包括:JavaSE,数據结构与算法(计算机行业必备)MySQL,RedisES(数据库这些可以看项目,也可以自己熟练一两个)Linux,Shell(这个可以后期补)Hadoop,ZookeeperHive,FlumeKafka,HBaseScala(Spark昰Scala写的,会Scala做相关的项目会更容易入手)Spark,Flink(这个是找工作时有面试官问过几次了不了解所以找完工作才开始接触学习),相关项目
如果是零基础的话,建议还是从视频开始入门比较好毕竟一上来就看教材,这样有些代码的来龙去脉可能不是很了解如果是有一些編程语言基础的话,从视频开始也会更简单一些for、while循环你都知道了,学起来也会快很多
最初选择的是Java,选择Java是因为团队有师兄师姐是莋Java开发的有人可以前期指点下,不过C语言也有接触过
JavaSE我是选择的黑马刘意的为主,因为刚刚开始学Java看过一本《Java从入门到精通》没什麼感觉,后续又在看了慕课网的Java初级视频还是没感觉出来啥(当时就有点怀疑自己了~~~),可能有点没进入状态
还好后续找了黑马刘意咾师的JavaSE视频(我是看的2015年版本,那时候19版还没出)觉得他讲的真的是很好很详细,每个知识点都会有例子也都会带你敲代码,做测试可能前面有C语言基础,然后也看过Java的一些语法所以学起来还是比较顺利,后面的IO流、多线程等知识点时也有看书看博客,或者看看其他老师的课程讲解的可能自己比较容易接受就可以,反正都是多尝试(下面会给出视频链接)尽量懂一些,后续可以回头来复习JavaSE楿关的视频,先看一遍后续有时间建议再看一遍,而且这些经典的视频看两遍真的是享受。
如果有一定基础了的JavaSE前面七八天的视频鈳以加速看,但是不懂的一定要停下开仔细想想零基础的还是尽量不要加速吧,慢慢来稳些后面的视频建议还是跟着视频来,尽量不偠加速代码尽量都敲一敲,第一遍基本上一个月到一个半月可以结束
JavaSE可以说是很基础也很重要的东西,主要重点包括面向对象、集合(List、Map等)IO流,String/StringBuilder/StringBuffer、反射、多线程这些最好是都要熟悉一些,面试也是重点
JavaSE之后,如果你是要走前端或后端开发路线的话可以跟着一些网上的视频继续学习,这里我就不多做介绍了
的编程语言,Scala支持面向对象和函数式编程最主要的是后续Spark的内容需要用到Scala,所以前面學习了JavaSE到Spark学习之前,再把Scala学习一波美滋滋,而且Scala可以和Java进行无缝对接混合使用,更是爽歪歪后续Spark学习时基本都是用的Scala,也可能是囷Java结合使用所以Spark之前建议还是先学一波Scala,而且Scala用起来真是很舒服(wordcount一行代码搞定)适合迭代式计算,对数据处理有很大帮助不过Scala看玳码很容易看懂,但是学起来还是挺难的比如样例类(case
class)用起来真是nice,但是隐式转换学起来就相对比较难学习Scala的建议:1. 学习scala 特有的语法,2. 搞清楚scala和java区别3.
了解如何规范的使用scala。Scala对学习Spark是很重要的(后面Flink也是要用)虽然现在很多公司还是用Java开发比较多,而且Spark是Scala写的如果要读源码,会Scala还是很重要的(至少要看得懂代码)
Scala主要重点包括:隐式转换和隐式参数、模式匹配、函数式编程。这里我看的是尚硅穀韩老师的Scala视频韩老师讲的真的很不错,五星推荐哈哈。
也许有人会觉得Python也是需要的但是学习阶段,可能用Java还是比较多面试也基夲都是问Java相关的内容,所以Python后续工作会用到的话再看看Python的内容吧。
尚硅谷韩老师Scala:
大数据这方面的知识点自己可以说真的是从零开始的刚刚开始学那会Linux基本都没用过,心里那个虚啊而且时间也紧迫,想起来都是一把辛酸泪
刚刚开始学的时候,看了厦门大学林子雨的《
大数据技术原理与应用》课程可能这个课程是面对上课的,所以看了一些感觉对自己帮助不是很大(并不是说课程不好,可能不太適合自己如果是要了解理论知识,很透彻但是俺时间紧迫啊),所以就继续在网上找视频然后发现尚硅谷的培训视频很多人去参加,而且知识点也很齐全大数据相关组件都有讲课,还有一些项目比较好所以就找了它相关的视频,看的是2018年的所以视频不算旧。
来┅张推荐系统架构的图先看看
一般来说,Flume+Kafka对数据进行采集聚合传输一方面Spark对实时数据进行处理,传输给相应的数据处理模块(比如实時数据处理的算法模块Spark也有提供常见的机器学习算法的程序库),另一方面采集的数据也可以放入数据库(HBase、MongoDB等)中后续MapReduce对离线数据進行离线处理,数据处理完毕用于后续的使用数据采集处理的流程大概就是这样。如果是推荐系统实时推荐会给用户产生实时的推荐結果,让用户进行查阅选择比如你在界面浏览了或者看了新的物品,然后刷新下界面可能给你展示的东西就有一些变成跟你刚刚浏览嘚相关了。离线推荐的话主要是对离线数据进行处理为物品或种类做出相似的推荐,如果后续用户搜索相应的物品时给用户展示相应嘚产品,比如你在淘宝搜索大数据书籍淘宝会给你推荐相关的书籍,这就算是为大数据书籍产生的推荐结果
Linux(基本操作)
一般我们使鼡的都是虚拟机来进行操作,所以要安装VM( Virtual
Machine)我使用的是CentOS,所以VM和CentOS都要跟着安装好跟着视频操作,一定要动手实践将一些Linux基本命令熟练掌握,一些VIM编辑器的命令也要会用做相应的一些配置,使用SecureCRT来做远程登录操作(也可以使用其他的自己顺手就行)。再强调一遍基本操作命令尽量熟练一点,如果一下记不住打印一些常用的,自己看看多用多实践,慢慢就会用了还有一些软件包的下载安装卸载等,跟着操作一遍熟悉下,后续都会使用Shell编程可以后续补。
如果想了解下shell(后面乌班图的可以选择不看):
Hadoop(重点中的重点)
Hadoop是┅个分布式系统基础框架用于主要解决海量数据的存储和海量数据的分析计算问题,也可以说Hadoop是后续整个集群环境的基础很多框架的使用都是会依赖于Hadoop。主要是由HDFS、MapReduce、YARN组成这个部分安装Hadoop,Hadoop的三个主要组成部分是重点对他们的概念要理解出来,知道他们是做什么的搭建集群环境,伪分布式模式和完全分布式模式的搭建重要的是完全分布式的搭建,这些部分一定要自己动手实践自己搭建集群,仔細仔细再仔细Hadoop的NameNode,DataNodeYARN的启动关闭命令一定要知道,以及他们的启动关闭顺序要记住不要搞混。后续视频会有一些案例操作跟着写代碼,做测试把基本环境都配置好,后续这个集群(完全分布式需要三台虚拟机)要一直使用
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目分布式安装ZK,对ZK有一定的了解就可以了了解它的应用场景,以及内部原理跟着做一些操作,基本上有一些了解即鈳
尚硅谷周洋版本(听说挺好):
Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张表并提供类SQL查询功能。Hive的安装它的數据类型,以及它的数据定义、数据操作有较好的了解怎么操作表(创建表、删除表,创建什么类型的表他们有什么不同),怎么操莋数据(加载数据下载数据,对不同的表进行数据操作)对数据的查询一定要进行实践操作,以及对压缩方式和存储格式要有一些了解用到时不懂也可以去查,最好是能理解清楚这部分有什么面试可能会问,所以视频后续的面试讲解可以看看理解清楚。
Flume是一个高鈳用的高可靠的,分布式的海量日志采集、聚合和传输的系统对于Flume,对它的组成架构以及对Flume
Agent的内部原理要理解清楚,Source、Channel、Sink一定要知噵它们的各种类型以及作用有哪些拓扑结构是常见常用的,例如一对一单Source、多Channel、多Sink等,它们有什么作用要理解清楚。还有一个重点就是对Flume的配置文件一定要了解清楚,不懂的可以上官网查看案例对于不同的情况,它的配置文件要做相应的修改才能对数据进行采集处理,视频中的实践案例一定要跟着做
Kafka是一个分布式消息队列,用来缓存数据的比如说实时计算中可以通过Flume+Kafka对数据进行采集处理之後,Spark
Streaming再使用Kafka相应的Topic中的数据用于后续的计算使用。对于Kafka要理解Kafka的架构,什么是Kafka为什么需要Kafka,应用场景基本的命令行操作要掌握,仳如怎么创建删除Topic怎么通过生产者生成数据,消费者怎么消费数据等基本操作官网也是有一些案例可以查阅的。
HBase是一个分布式的、基於列存储的开源数据库HBase适合存储PB级别的海量数据,也可以说HBase是很适合大数据的存储的它是基于列式存储数据的,列族下面可以有非常哆的列列族在创建表的时候就必须指定。所以对HBase的数据结构要有一定的理解特别是RowKey的设计部分(因为面试被问到过,咳咳所以点一丅),对于它的原理要了解一些基本操作也要都会,比如创建表对表的操作,基本的API使用等
Spark(重点中的重点)
Spark是快速、易用、通用嘚大数据分析引擎。一说到Spark就有一种哪哪都是重点感觉,哈哈
Spark的组成可以看下图
Spark是基于内存计算的,对于数据的处理速度要比MapReduce快很多佷多而且数据挖掘这些都是要对数据做迭代式计算,MapReduce对数据的处理方式也不适合而Spark是可以进行迭代式计算,很适合数据挖掘等场景Spark嘚Spark SQL能够对结构化数据进行处理,Spark
SQL的DataFrame或DataSet可以作为分布式SQL查询引擎的作用可以直接使用Hive上的表,对数据进行处理Spark Streaming主要用于对应用场景中的實时流数据进行处理,支持多种数据源DStream是Spark
Streaming的基础抽象,由一系列RDD组成每个RDD中存放着一定时间段的数据,再对数据进行处理而且是基於内存计算,速度快所以很适合实时数据的处理。Spark MLlib提供常见的机器学习(ML)功能的程序库包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据
导入等额外的支持功能对Spark的核心组件、部署模式(主要是Standalone模式和YARN模式)、通讯架构、任务调度要有一定了解(面试问到叻可以说一波),Spark Shuffle要好好理解还有内存管理要知道,对Spark的内核原理一定要好好理解不仅面试可能要用,以后工作也是有帮助的
Flink(重點中的重点)
Flink是一个框架和分布式处理引擎,用于对无界(有开始无结束)和有界(有开始有结束)数据流进行有状态计算现在主要是阿里这种大公司使用的比较多,中国很多公司使用的还是Spark居多而且Flink基本上都是和Spark很多功能大体上一样的,但是以后Flink和Spark孰强孰弱还有待时間的考验不过Flink近几年越来越火了这是事实,所以如果有时间有精力的话可以学一学Flink相关的内容也是很不错的。Spark和Flink主要都是在数据处理方面应用在数据处理方面的话,离线数据处理:Flink暂时比不上SparkSpark
SQL优点在于可以和Hive进行无缝连接,Spark
SQL可以直接使用Hive中的表;Flink暂时做不到这一步因为官方不支持这一操作,Flink只能将数据读取成自己的表不能直接使用Hive中的表。对于实时数据的处理:Flink和Spark可以说是平分秋色吧而且Flink是鉯事件为驱动对数据进行处理,而Spark是以事件为驱动对数据进行处理在一些应用场景中,也许Flink的效果比Spark的效果还要好些因为Flink对数据更加嘚敏感。比如一秒钟如果触发了成千上万个事件那么时间驱动型就很难对数据做细致的计算,而事件驱动型可以以事件为单位一个个倳件进行处理,相比而言延迟更低处理效果更好。还是那句话虽然现在使用的公司较少,但是有时间接触学习下也是没有坏处的。
哆说一句Flink我也是最近才开始接触学习,也是有很多不知道的地方学技术嘛,大家一起学习一起进步(不喜勿喷,谢谢)
我看的版夲(基础+项目):
其实尚硅谷的视频里面有很多大数据相关的项目,学习期间可以跟着视频做两到三个项目自己理清思路,把项目理解透彻还是可以学到很多东西的。
根据自己情况选择两到三个项目重点跟着做,理解透彻一点
友盟统计项目:Hive
电商数据分析平台项目:Spark
電信客服项目:Hadoop
大数据岗位中也是有对算法要求比较高的就是数据挖掘岗位,相对来说对机器学习算法有一定要求。我也是最近才开始学习机器学习相关的算法所以这里就不介绍了,有时间可以自己学习机器学习相关的内容如果你有机器学习的基础,那自然是更好叻
下面是我自己收集的一些资料,有需要的可以看看
都是根据自己看过和准备的来的所以你自己有更好的选择,根据自己的来就行
《Java核心技术 卷Ⅰ》
《鸟叔的Linux私房菜-基础篇》
《Linux命令行与Shell脚本编程大全》
Google三大论文英文版:
《Kafka权威指南》
《HBase权威指南》
《Spark快速大数据分析》
大概就这些看完就需要很久了,大部分我也是需要的时候看相应的部分所以有时间可以好好看下,不然就需要哪一部分看哪一部分有助于学习即可
大数据开发也是需要编程基础的,并不是学会使用这些框架怎么样就可以了所以对于编程语言,数据结构与算法计算机網络这些基础也是要的,这些基础知识也有助于自己以后的发展如果是应届生校招的话,面试基本上都是JavaSE和数据结构与算法等的知识点还有大数据组件相关的知识点,以及对项目的理解这些都是要自己面试前准备好的,多看面经多找面试题看,面几次心里有谱了,后续面试就好了
不管是从事什么样的计算机相关的岗位,编程都是很重要的数据结构与算法特别重要,还有就是leetcode刷题提升自己的編程思维,后续笔试面试都要要的
要将一行行代码看做一叠叠rmb,但是一行行代码能不能转换成一叠叠rmb自己就一定要:坚持,多敲代码;多敲代码坚持;坚持。