第一次学习大型的开源项目源码,特向各位大佬请教学习方法,感谢感谢

2019-04-29 11:35:54 +08:00
 fbb707

rt,想要学习的是 hadoop 源码( java ),刚毕业工作的小菜鸡,望各位大佬不吝赐教啊,先感谢了!

4255 次点击
所在节点    程序员
24 条回复
ipwx
2019-04-29 11:42:54 +08:00
你是做啥工作的。。。我觉得,系统地学习某一个成熟项目的所有源码,大概投入产出不太高。。。如果有比 hadoop 更小一点的,微型的教学型的相似系统,通过那个东西学习原理,大概更高效。

作为在读博士,天天和 TensorFlow 打交道。我用 TensorFlow 的经验是,公式(原理)理顺了,用多了,很多时候 TensorFlow 某个函数到底怎么实现的,我心里也有谱。有过几次我给其他实验室成员 debug 模型奇怪的错误,说到“这里 TensorFlow 应该是怎么实现这个操作”的时候(虽然我没看过),去翻它 C++ 的代码,基本八九不离十。
bravoer
2019-04-29 11:50:12 +08:00
hadoop 很宽泛,基本的包含三个部分,HDFS MR YARN。最有意思的是 YRAN,和 Hadoop 自己的 RPC 框架(使用了部分 GRPC 的东西)。

第一步,学会用。
第二步,了解框架包含哪些模块,每个模块干什么用的即可。
第三步,了解框架用到的基础知识。
第四步,从一个简单的应用开始 debug,大概了解整个流程。不需要深入,否则你会迷失的。

切记!!上来就钻进源码去看!
PerFectTime
2019-04-29 11:55:30 +08:00
为什么看到标题我第一时间想到的就是 bilibili??
loryyang
2019-04-29 11:57:47 +08:00
你首先得熟悉 hadoop 吧,否则一段代码干嘛用的你也无法理解。其次市面上有 hadoop 源码的书,可以参考书看看
最后,一般没必要深挖源码,因为代码量太大了,许多代码对你来说也没有价值。你可以大概知道代码结构,然后实际运用 hadoop 遇到某些觉得有意思的东西,可以再进去看看怎么实现的
我之前看过 zookeeper 代码,感觉还是比较有价值的,代码量也小很多,hadoop 的代码就大概看了一下。
总体说来,看源码价值不大
orzorzorzorz
2019-04-29 12:02:30 +08:00
反正别从代码开始,比如你提的 hadoop,网上肯定有很多 hadoop 源码解析,多看几篇,至少了解
有哪些方法
方法干了什么
方法的关键语句是啥
然后回过头定一个你想知道的点
回忆关键语句,到源码里去找,找到以后看看它的实现细节就完了
代码没啥意思,关键还是思想
YiferHuang
2019-04-29 12:05:22 +08:00
@PerFectTime 全民 Go 语言学习吗
fngtz
2019-04-29 12:40:15 +08:00
目的
1. 借鉴别人的某些实现方式,来设计自己的系统
2. 更好地运用别人的系统,来实现自己(现在和未来)需要的功能

对于目的 1,你会知道,你想复制的实现方式是什么样子的。
对于目的 2,你会知道,你需要实现的功能是什么样子的。

如果单纯想提高业务水平,那么,你究竟想提高哪方面的业务水平?
murmur
2019-04-29 12:53:46 +08:00
@YiferHuang 主要是给自己很大信新,新人一提大公司就以为别人代码多么优美高大上,现在完整的业务代码摆在你面前,真的是你上你也星
binux
2019-04-29 13:37:17 +08:00
Hadoop 这种超大型的源码,真的没什么学习的价值。
你想弄懂原理,看看 Google 原来的那篇论文,读读代码解析就够了。
你想学习 Java 编码,这种由非常多人参与的项目,代码质量参差不齐,只能说合格,但不一定都优秀。不如一些由少数 hero contributor 维护的热门项目代码质量稳定。
fbb707
2019-04-29 13:49:10 +08:00
@ipwx 我现在基本就是对 hadoop 一些组件的基本应用,之前做的主要是数据库方向( hbase、hive ),现在想学习的是 hdfs 底层的实现,嘿嘿,感谢大佬指导,我只是科班本科毕业的,还想考研呢
fbb707
2019-04-29 13:53:23 +08:00
@bravoer 好的好的,我再梳理一下, 我现在主要想研究的是 hdfs 读写文件的底层实现,之前一直都是做数据相关( hbase、hive ),现在在看一本书《 hdfs 2.x 源码剖析》已经把 rpc 和 Namenode 的理论和接口、方法简单过了一遍,就在计划着看源码,但是扫了一下,觉得无从下手,就想来请教大家了,毕竟第一次想着学习开源项目,感谢感谢
fbb707
2019-04-29 13:55:15 +08:00
@loryyang 嗦嘎,好的好的,我现在就想往 hdfs 里深钻一下,看的是《 2.x hdfs 源码剖析》的书,就计划着看源码了,大佬对这方面有研究吗?
fbb707
2019-04-29 13:57:31 +08:00
@orzorzorzorz 好嘞好嘞,我按着这个思路试试,谢谢大佬
fbb707
2019-04-29 14:03:38 +08:00
@fngtz 我觉得我想的应该是目的 2,在现在的基础上以后想做二次开发,哈哈,感觉自己有点膨胀
fbb707
2019-04-29 14:18:32 +08:00
@binux 我想的就是学 hdfs,想着学明白以后能不能二次开发,或者为开源社区做一点微小的贡献什么的
vmskipper
2019-04-29 14:34:23 +08:00
还不如研究 k8s
no1xsyzy
2019-04-29 14:52:34 +08:00
我觉得其实很多项目大量代码都是框架性工作
也就是适应不同输入,应需求进行不同输出
Python 项目一个 argparse 就能把一大片代码给混乱了,一屏显示不全的肯定是一塌糊涂的
loryyang
2019-04-29 15:15:34 +08:00
@fbb707 #12 没看过 HDFS 的源码,一般来说,熟悉里面的设计理念和细节就差不多了
labnotok
2019-04-29 15:17:15 +08:00
吓死了,还以为 Bilibili
snappyone
2019-04-29 15:29:07 +08:00
学习架构思想,自己实现一套简化版

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559696

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX