首页 > 数据库 > 数据库开发技术 > 这样学习大数据,可还行?
前天刚发出过一篇对当下咱们技术圈一些乱象的吐槽后不久,就看到群里展开了对大数据技术学习相关的讨论,程度还挺激烈。
其实我知道,写那篇文章,并不能改变什么,当下的行业现状早就属于是「冰冻三尺,非一日之寒」,只图诸君一乐,解解闷罢了。
但如果能唤起某些个体对「技术学习」这个命题的一些思考,也能算是功德一件。
上文说过,当下的网络环境里,充斥了海量的技术资料,各种新鲜的技术、新潮的框架唾手可得,表面上看是件好事,但如果你没有一定的分辨、思考能力的话,很有可能对你的学习是灾难性的,尤其对于那些「新手村」的同学来说,情况尤甚。
各种培训班对你散播焦虑,说,不参加培训,就甭想找到工作。
一些刚「怀上不久」,还没出娘胎的技术,在宣传的时候会含沙射影地告诉你,不掌握这个,你可就 out 了。
再或者,那些别有用心,夹带私货的一帮人,给你造出各种故弄玄虚的概念,吊足你的胃口,然后卖他的产品、解决方案。
没有一点思想定力,外加扎实的专业涵养,你还真保不齐什么时候就被带偏了。
我是一个对新技术、潮概念颇具「钝感力」的人,毕竟在几年前,作为某国际知名大数据厂商的技术顾问,见识和测评了太多「开始牛逼吹的有多凶,后来打脸就有多响」的技术产品。
一些公司为了搏出位,卖产品,吃相那叫一个难看,当年我一个行业萌新看了都觉得,真TM恶心。
好吧,不骂了,今天这篇文章,想根据这些年来,我在大数据圈混迹的经验,粗浅地聊一聊我对「大数据学习」的一些个人偏见,供你参考。
基础语言部分
1. Java 基础:这个非常重要,很多同学都喜欢问,做大数据开发要不要学 Java,在我看来是必须的,因为它是你面对稍微复杂一点问题时,敢于面对时的底气。
当下绝大部分的大数据组件,都是基于 Java 开发的,熟悉了它,你的大数据学习才有可能「深入进去」。
学习哪些地方?
1,常用容器的原理跟用法:Set、Array、Map、Iterator,它们之间的区别,使用场景;
2,JVM 原理,有利于你遇到复杂的大数据问题时,对内存模型进行分析优化;
3,多线程编程,这个是 Java 的核心难点,理解它有利于你理解大数据技术的多线程原理;
4,锁原理,可能直接用的不多,但是面试时候考察你基础时,大概率会被问到。
2. SQL 基础:现在大部分成熟的大数据平台,都基本上统一用 SQL 来进行业务开发,有些工作内容甚至就只需要你写 SQL,所以,扎实的 SQL 基础,非常有必要。
怎么学:一方面可以刷题;另一方面,找一些有具体业务场景的数据来实践。
3. Shell 基础:很多同学可能会忽略这部分的能力,但以我的经验来看,它虽然不起眼,但其实非常重要,属于一个程序员的「隐形能力」。
怎么学?
熟悉一些常用命令,比如查看文件大小、修改文件权限、查看系统负载等;
2. 对文件内容进行编辑、修改、替换等;
3. 会编写脚本做一些自动化的工作,比如判断进程有没有挂掉,挂掉后自动拉起等等。
4. 其他语言:比如Scala,如果你 Java 写的比较溜了,再用 Scala 就基本不会有难度,在大数据编程上,它不是必须,但是如果你有兴趣,学一下,能减少你的代码量,以及提高你的编程效率。
还有比如 Python,个人认为也不是必须,一般如果是专门玩数据分析,机器学习的同学,会用的比较多,纯粹的大数据开发,可以完全不用,比如我就不怎么用。
大数据组件部分
1. Hadoop核心生态:对于入行的新人来说,如果没有明确的目标导向(比如需要哪个技术开展工作),优先把 hadoop 这套核心生态熟悉起来。
虽然说 hadoop 现在说出去,早就不「高大上」了,但你要知道,它可是开源大数据技术的「祖师爷」,而且它的 YARN 跟 HDFS 的江湖地位,至今依然不可撼动。
想学好某个方向的技术,一定要思想先行,学习 hadoop,就是学习大数据的核心思想,后面再进阶学习其他的,就要容易很多。
2. 数据传输工具: 在一个大数据项目中,几乎少不了这个东西,它存在的目的,就是从数据源端,把数据给接到你的大数据平台,当下比较常用、好用的数据传输工具有:Sqqop、DataX、Flume、logstash、Filebeat、Flink CDC、Maxwell等。
会使用其中的1到2个,然后知道他们的运行原理,技术生态,应用场景就可以了。
3. 计算引擎工具:从当下无论是热度还是话题度来看,Spark 跟 Flink 当之无愧是这个类目的宠儿,学哪个?
如果只是中小项目,就算你的业务涉及到实时计算,只要计算逻辑不太「花里胡哨」(比如多流 join,多流 sink),选 Spark 就够了。
核心原因在于,它足够成熟稳定,几乎没有什么脑残设计,bug少,对应生态也很健全,而且还有很重要的第一点,高低版本之间的 API 变化不大,升级后,新老版本的代码变化非常少,不像 Flink 那么「人格分裂」。
你可能会问,那我项目要做流式计算可咋整,Spark 不是只能做批处理嘛? 谁告诉你的,我一巴掌呼他脸上。
不要轻易被一些别有用心的营销文、或没脑子的人给忽悠瘸了,自己动手试一下好不好呢。
再来说 Flink,这个是当下,在国内广告打得震天响的计算引擎产品,想不知道它都难。
相比 Spark,它在流式计算中能够支持的功能确实要多一些,尤其是它的 Flink CDC,填补了当下大数据技术里,在对数据库数据进行统一的「动态变化捕获」功能的缺失。
但是功能强大,往往跟好用、人性化、bug少,并不总是穿同一条裤子,如果你有兴趣,可以去看我往期测评 Flink 功能的文章,就知道我在说什么了。
要不要选,你看着办。
4. 数据库:说它是一个大数据项目中,最重要的组件应该都不为过。
因为对于一些中小项目来说,可能就一个好用的数据库,就足以撑住所有业务数据的存储跟计算,其他的组件只需要做一些辅助就够了。
那需要学哪些呢?
MySQL,就算你的项目可能不用,但你高低要懂一些它的原理,它的一些八股文,也是经常你在面试的时候会被问到的。
其他的,当下我认为比较热门或者好用的,比如有:Elasticsearch、Clickhouse、Doris、StartRocks等,用好其中一个,这里的用好,一定不只是看个视频资料,背个相关原理那么粗浅,而是需要你「正儿八经」运行在项目上,解决一些真正的业务问题。
只有这样,对于这个数据库在使用过程中会踩哪些坑,它有哪些出彩的地方,以及有哪些待完善的不足,你才能了然于胸,跟人谈起来有话说,而不是一句「我艹,很强」,概括一切。
5. 其他:比如一些消息中间件,最有名就属 Kafka 了,理解基本原理(旧文写过一篇关于它数据结构的剖析,有兴趣可以看看),面试官最喜欢问你「精确一次性消费」、「至少一次性消费」这样的问题,多准备准备(我视频里多次有讲)。
最后
以上这些,你应该可以看出来,全都是开源的组件,而且我只是列出了一部分,但对于一个想通过自学跨入这个方向的人来说,已经够够的了。
关键在于,以上列出的每一项技术,你要能够沉下心去学,不能跟猴子掰玉米一样,看到新的就把原来的给扔了,那不行。
学技术,讲究一个融汇贯通,一些看似老旧的技术,核心思想却一直在被沿用,当你把一些经典的、基础的东西都学扎实了,你就不可能被那些时不时冒出来的「潮流词汇」蛊惑。
因为你知道,甭管它包装多么华丽,被人为强行赋予了多少意义,撕开那块遮羞布,大家其实没什么不一样,说不定还有可能是「金玉其表、败絮其中」。
等你步子迈稳了,再去学那些新潮的、高逼格的技术,不跟玩似的。
从现在开始,争取做一个「技术人格」稳定的人,多好。

原文作者:安瑞哥是码农;如有侵权,请联系管理员删除。