第一次学习大型的开源项目源码,特向各位大佬请教学习方法,感谢感谢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fbb707
V2EX    程序员

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

  fbb707 2019-04-29 11:35:54 +08:00 4755 次点击
这是一个创建于 2432 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

看代码一方面可以看各个部分之间是如何调用,他们之间是什么关系(参考着他的架构看)。你可以看到一些架构图上不会写的细节。了解个大概就好,没有必要一行行去读。

另一方面就是看某个部分是如何实现的,这个可以深入地研究源码的实现细节。
weifengzi2009
    22
weifengzi2009  
   2019-04-29 15:37:56 +08:00
@weifengzi2009 #21 补充一下,如果网上可以搜到对架构的讲解是最好的。如果没有的话可以借助 profiler 来看他的 call stack,帮助你了解代码的结构。。
BCy66drFCvk1Ou87
    23
BCy66drFCvk1Ou87  
   2019-04-29 16:17:53 +08:00
我以为是说 Linux 系统源码
zichen
    24
zichen  
   2019-04-29 16:56:18 +08:00
从 main 函数开始看。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1355 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 16:58 PVG 00:58 LAX 08:58 JFK 11:58
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86