经过这么多年的发展,大数据的技术正处于群雄逐鹿阶段 ,面对这么多技术框架,我们得学会做减法。
还记得我转行大数据时,只学了hadoop和hive,非常简单,差不多一周的时间,就可以出去面试了,边面试边改进,最后找到不错的工作。那个时候大部分企业用的还是1.X版本的hadoop,正逐渐的升级到hadoop2.X。
当时可以很容易的转型,一大部分原因是大数据的技术还没有普及,需要学的框架也不多。
现在再看网友给提供的一些大数据学习路线,很全很棒,但同时也被吓尿了有木有
(图片来自网络-图片太大,传上来有点糊了)
各种组件五花八门,需要学的东西太多了,而我们的精力又不足够把这么多组件学好,再加上大数据方向经过这些年的发展,各家企业在生产上踩过很多坑,面试的深度也更深了,这就加大了转型的难度。
那有没有一种轻量级入门大数据的方案呢?——答案是肯定的!
先来分析一下大数据开发的工种,大体有三种:
基础组件的优化和开发
这一块偏底层,职位名称可能是【大数据开发】、【大数据开发-XX方向(比如:数据湖、流式计算等)】或者其他的什么命名,具体要看职位描述和技能要求。
主要做的事情:
Olap引擎优化——比如sparksql新feature开发,源码bug修复、clickhouse二次开发优化等;
存储系统研发——分布式块存储 、文件存储、冷存储等方向,对硬件IO等技术深度有一定的要求;
流式计算——Flink等实时框架的二次开发及优化;
下面这个是内推职位【大数据开发-流式计算方向】的技能要求,感受一下:
1、对流式计算系统有深入的了解,在生产环境有TB级别Flink实时计算系统开发经验,深入掌握Flink DataStream、FlinkSQL、Flink Checkpoint、Flink State等模块,有Flink源码阅读经验优先,有二次开发经验请在简历显著位置标注; 2、熟悉常见消息队列原理和应用调优,有Kafka、Plusar、RocketMQ等项目源码阅读经验优先; 3、熟悉Java、C++、Scala、Python等编程语言,有强悍的编码和 trouble-shooting 能力; 4、乐于挑战没有明显答案的问题,对新技术有强烈的学习热情,有PB级别数据处理经验加分; 5、有数据湖开发经验,熟悉Hudi、Iceberg、DeltaLake等至少一项数据湖技术,有源码阅读经验优先; 6、熟悉其他大数据系统经验者优先,YARN、K8S、Spark、SparkSQL、Kudu等; 7、有存储系统经验加分,HBase、Casscandra、RocksDB等。 |
不同的方向会有不同的侧重,总体上对源码阅读且二次开发的经验和能力有要求。
面向用户的数据产品套件开发
这一块偏系统开发,比如现在比较火的数据治理N件套:数据地图、数据质量管理、指标体系管理、调度系统、埋点管理等一系列web产品的后端研发。
职位名称可能是【大数据开发工程师】、【大数据开发套件服务端工程师】等,主要还是看职位描述和技能要求。
因为这个方向都是大数据类的产品,所以要求比一般的web类开发高一些,要懂数仓建模、大数据的框架原理等,但不会像【基础组件开发】那样有必须读过源码、二次开发这些硬核要求。
下面这个是内推职位【大数据开发套件工程师】的技能要求,感受一下:
1、精通java/scala语言,包括JVM、类装载、线程、并发、IO资源管理、网络 ; 2、精通SOA架构和微服务架构 ,对可扩展性、稳定性、性能、质量有特别的执着,若有高可用、高性能 Web 实践经验更佳; 3、掌握 Web 后端开发技术: 协议、架构、存储、缓存、搜索、安全、消息队列等; 4、熟悉数据仓库实施方法论,深入了解数据仓库体系,并支撑过实际业务场景优先; 5、有 IDE 开发经验者优先考虑; 6、熟悉前端技术的全栈开发工程师优先; 7、熟悉hadoop ecosystem常用开源框架者优先,例如hadoop/flink/spark等。 |
这个就要求要有三方面的能力:
数仓开发
数仓开发常被人称为sql boy/sql girl,和业务关系比较密切了,主要的工作是ETL,做报表、看板等支持业务看数的需求,对数仓建模理论和实践要求较高,技术上的要求是懂原理,重要是使用的熟练程度和sql的调优技能。
职位名称可能是【大数据开发工程师】、【数据开发工程师】、【数仓开发工程师】】等,主要也还是看职位描述和技能要求。
下面这个是内推职位【数仓开发工程师】的技能要求,感受一下:
1、精通数据仓库实施方法论、深入了解数据仓库体系,并支撑过实际业务场景; 2、熟悉Hadoop架构和工作原理,精通MapReduce编程;精通Hive,有HQL优化经验;精通spark、flink开发; 3、熟练使用JAVA,python等编程语言一种或多种多种编程技术,编程能力强; 4、具备海量复杂数据处理及优化的能力,能对遇到的技术挑战进行解决; 5、善于沟通,对业务敏感,能快速理解业务背景,具备优秀的技术与业务结合能力。 |
可以看到数仓这块,偏向对业务敏感,对数据敏感,这是为了能更好的和业务结合。
经过上面的分析,结论是:
技术深度要求:【数仓开发】<【面向用户的数据产品套件开发】<【基础组件的优化和开发】
业务能力要求:【数仓开发】>【面向用户的数据产品套件开发】>【基础组件的优化和开发】
而在面试时,业务能力是很难考察的,所以如果想转入大数据开发领域,选择【数仓开发】是个捷径。如果特别想做更底层的开发,也可以选择从【数仓开发】切入,先接触,再曲线救国。
那么【数仓开发】需要学啥?
1、会一门基础语言:java/python/scala 【非必须】
Java or python or scala 这三个是or的关系,只用会一种就行;
如果是java相关开发转大数据,那实在是太容易了,这一项就可以略过了;
如果实在是没有语言基础,也实在是不想学,其实也没关系,我周边就有好多同事没有程序开发语言的基础,照样也能把数仓做好
2、分布式存储及调度理论【必须】
hdfs、yarn的理论要理解且熟记,这些对于学习spark 或者hive 以及sql的优化是最最基础的知识。
3、sql 框架要会一个:spark sql/hive sql 【必须】
如果对hive和spark都不懂的话,那就选择学spark,现在离线数仓越来越多的公司切spark了。
Spark 相关主要学习spark core 和spark sql;
要求sql要写的熟练,调优参数及原理,能懂一些源码就更好了。
4、数仓建模、分层理论【必须】
这个是数仓的方法论,是一定要掌握的,理论都在《维度建模权威指南-kimball》这本书里,好书是好书,看起来比较枯燥,在看的时候多思考,结合自己正在做的业务,想象一下如果要为现在的业务划分主题该怎么划、业务矩阵该怎么设计等等,大胆想象就ok。
5、其它需要了解【非必须】
大数据相关的架构理论、olap、数据湖等等,知道越多越好,不需要太深入,主要作用是帮助理解大数据的那一套东西;网上的其它公司数仓的架构是啥样子,要知道架构里每个组件的作用是啥。
还有一些其它的框架组件:kafka、presto、druid、flink 等了解,写个demo跑跑,知道流程就可。
数仓开发日常用到的核心技能就是上面【2】、【3】、【4】,如果搞的扎实,其它的软技能是加分项。我们在准备时,可以把精力集中在这几项上,要学就学个透,不要懂一大堆框架,但哪个都经不起问,这样是最头疼的。
好啦,这一篇主要是提供了一个轻量级的方案,下一篇从面试的角度讨论一下针对这个方案我们该怎么学、学什么、学到什么程度。
谢谢大家的喜欢和鼓励,我们会越来越好