相信近几年大家也都感受到了计算机行业的火爆,越来越多的同学选择报考计算机专业,甚至很多非计算机专业的同学也一直想要转行当程序员。
在这样的环境下,公司对程序员的要求也是水涨船高,几年前校招的同学,想找一份JAVA开发的工作,可能只需要会一些Java Web基础,再加spring框架,写几个毕设水平的小项目就行了。而现在,算法、微服务、分布式、高并发,很多工作中可能都遇不上的场景,也都要考察。
现在JAVA开发程序员已经卷成这样,不如来看看另一条路:大数据开发。
首先介绍一下我的情况,我大学专业是信息安全,毕业后第一份工作是JAVA开发,工作中接触到了大数据领域,随后转型大数据开发,跳槽到大厂。
可以说我经历了两次转型,之前的文章里我讲述了在学校期间自学Java Web的经历,感兴趣的朋友也可以去看看。这篇文章我会讲述我是如何从JAVA开发工程师转型成为大数据开发工程师,以及总结一下我个人认为合适的大数据学习路线。
首先大数据开发也有分不同的工作方向,大方向上分为离线和实时,再具体可以到数据的采集、存储、计算、应用,最后再到具体各个大数据组件。在小公司可能人手不够,一个人要负责多个方向,而大厂一般是一个人负责一个方向,甚至是一个组件,就比如我目前主要就是负责离线的HDFS部分。
对于想入门大数据开发的人,一般是离线和实时选一个方向,不过两者有很多知识都是相通的,到最后肯定是都要了解,这里我推荐初学者先走离线方向,所以我会重点讲离线方面的组件学习。
语言肯定是作为程序员的重中之重,大数据开发主要使用的语言是Java,很多组件底层都是用Java写的,比如Hadoop,在阅读组件源码和二次开发过程中,熟练使用Java都是至关重要的;
第二个要掌握的语言是scala,目前火热的计算引擎spark就是用scala写的;
第三个是python,python在数据处理方面很有优势,很多公司的主用语言也是python;
当然初学者时间不够的话只需要会Java就好了,其他的可以之后再学。
Hadoop是大数据领域的地基,大数据开发避不过的组件,需要最优先学习。Hadoop其实是三个组件的集合,分别是hdfs(存储),mapreduce(计算),yarn(调度),每个都很重要。
但对于mapreduce,现在不需要去学怎么写mapreduce作业,直接用hive就行了,主要是了解mr作业的执行过程,map、shuffle、reduce各阶段的优化方式。
Hive是离线数仓的基础,本质算是Hadoop的一个插件,数据存储用的是hdfs,计算引擎用的是mapreduce,元数据存储在mysql,作业使用yarn进行调度。hive主要需要学的是hive sql的语法和一些作业调优手段。
我之前刚入门的时候看到有人说spark已经淘汰了hive,实际上这两者根本不是一个类型的东西,无法拿来比较,应该比较的是mapreduce和spark。而虽然spark比mapreduce快很多,但现在用的最多的计算引擎还是mapreduce,所以无论是mapreduce还是hive,都没有被淘汰,还是需要重点学习的组件。
Spark是近些年很火的计算引擎,按官方的说法,比mapreduce快10~100倍,所以也需要重点学习,跟hive一样,主要学的也是spark sql和作业调优方法。
这里还值得一提的是spark streaming,作为流计算框架,现在基本风头都被Flink抢了,所以也不用深入学习,了解即可。
Kafka对于Java工程师来说肯定不陌生,在大数据领域主要是作为数据传输中转,由Flume等数据采集工具将数据采集到kafka,再由下游各消费端进行消费。
kafka的数据可以被消费到hdfs作为离线数仓,也可以消费到Flink,ELK作为实时数仓,所以无论是离线还是实时,Kafka都是要深入学习的。
Zookeeper是Kafka依赖的组件,在大数据领域也是Namenode,Resourcemanager等组件实现高可用的关键,所以也是必须学习的。
Flink应该是目前最火的流计算引擎,走实时方向的话是必须要学的,不过离线方向可以不学,我也没学过,只是了解了一下。
Flume是目前比较主流的数据采集组件,本身不算复杂,也有不少替代品,在大厂里一般也会结合自身业务开发自己的数据采集工具,所以这个组件会用就行,不用太深入。
这两个属于目前用的比较多的批量作业流调度器,大厂一般会开发自己的这类型工具,所以会用就行,不用深入。
这个是一个hive和mysql之间传输数据的小工具,会用就行。
BI是数据可视化工具,有开源的也有付费的,开源的BI工具我写过一篇文章详细介绍过,感兴趣的朋友也可以看看。
现在好像有专门的BI数据分析师岗位,这个严格来说不属于数据开发工作的范畴,但小公司可能需要你从数据采集到展示全部都要负责,所以也可以了解一下。
如果你要从头搭建一个规模比较大的大数据处理集群,可以使用CDH,能减轻很多运维工作。现在很多小公司可能也在使用CDH,所以可以学习一下如何使用,不用深入。
ELK是一套比较独立的数据处理平台,由ElasticSearch、Logstash和Kiabana三个开源工具组成,内容比较多,也比较复杂,没时间的话可以先不学,了解一下就好。
OLAP组件有很多,像presto、impala、kylin、druid等等,各有优劣,不同公司用的也大概率不一样,所以了解一下,会用即可。
在学习完了上面一些重要组件后,就可以尝试自己搭建一套大数据集群了,完成一个离线数仓项目。如果公司有条件可以用公司的测试服务器,或者租云服务器,甚至自己电脑上开虚拟机也可以,只要有三台服务器就行了。
离线数仓的搭建我推荐大家去B站找尚硅谷的教学视频,包括以上的大部分组件都可以看他们的视频学习。我本身不推荐去培训机构培训,除非真的是0基础的外行,现在网上有很多免费的教学视频可以观看,没必要花多余的钱去培训。
有些人说看视频效果不行,根本学不好,但我自己从学校开始的两次转型,都是找网上的视频自学的,现在也成功进入了大厂,说明这条路是完全可行的,只要你足够自律,足够努力。
希望这篇文章能帮助到想入门大数据开发的朋友,之后我计划再写一篇文章讲一下大数据开发面试相关的重点事项,感兴趣的朋友可以持续关注。