V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fbb707
V2EX  ›  程序员

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

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

    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   ·   实用小工具   ·   1374 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:36 · PVG 01:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.