现如今,IT互联网行业热度最高的技术领域要数大数据、云计算和人工智能了,我从13年毕业时就进入了大数据技术领域工作,在此简要谈谈自己的学习历程,希望对后来者有所启发。

其实在我大学刚毕业时(2013年),最火的技术领域是移动互联网,加上自己在校期间学过Android项目的开发,因此最开始找工作时也只是奔着做Android开发的岗位去的,只不过阴差阳错的进了一个做大数据的团队,不过现在看来,弃Android转BigData并没有选错。在刚接触大数据的时候,我并没有着急的去玩各种大数据开源项目,而是先去把理论搞清楚。为了搞清楚大数据相关的理论基础,我首先学习了Google发表的三篇论文:GFS、MapReduce、BigTable(号称是开启大数据时代的"三驾马车”), 从宏观层面了解了大数据技术产生的原因以及在尝试解决什么样的问题。在对大数据有了宏观层面的了解后,自然要动手实践了,当时我们公司有两个30多台服务器的生产集群和一个较小规模的测试集群,虽然测试环境配置不高,但对于验证集群功能还是足够的,所以这时候我就参考着官方文档所提到的各种功能特性在测试集群上一一实践。记得当时Hadoop还是1.x的版本,和现在的版本在功能以及性能上差异还是挺大的,个人觉得最大的差异就是Hadoop在2.x以后引入了Yarn这个资源管理框架以及高可用的实现。在了解了宏观层面的理论知识以及会玩一些大数据开源项目后,我觉得自己还应该再深入一点,怎么深入呢?那就去看源码吧,看看这些优秀的开源项目到底是怎样实现的。看源码也是有技巧的,首先我们不能一开始就细读,最开始我们只需要大概了解代码架构就行了,其次在接下来细读的时候,我们需要有明确的目的性。以我当初读HDFS源代码为例,我首先会去找程序的入口,因为这时候我已经从宏观层面了解到了HDFS由NameNode(NN)、JournalNode(JN)、DataNode(DN)组成,所以我首先会去看NN、JN、DN的启动过程,从项目的启动脚本里可以找到它们各自的启动类,找到启动类就好办了,直接在IDE里调试就可以了,不仅仅调试HDFS的各个进程,最后我还在IDE里将HDFS集群的所有进程都启动了起来,相当于是在IDE里模拟了一个分布式的HDFS集群。通过调试NN的启动过程,我知道了NN是怎样维护文件系统的结构以及它底层的RPC框架是怎样实现的,而且也知道了NN和JN、DN以及客户端的交互代码在什么地方。通过调试NN启动过程的代码,我对HDFS的代码架构有了一定的了解,之后再看代码时就会比较有目的性了,比如这次看客户端的写流程、下次看客户端的读流程、再下次看RPC框架的实现等等。
简单谈谈看源码的好处:

  1. 加深对开源项目了解程度,使得自己在使用时更加自信
  2. 一般大型的开源项目会用到许多优秀的其他开源项目,比如Hadoop里用到了Jetty、Guava、Protobuf, Spark里用到了Netty等,当在源代码里看到这些项目的使用时,也会促使你掌握这些项目的使用方式,进而促使你去研究这些项目的源码,也会促使你在自己的项目中自如地使用这些优秀的项目
  3. 看全世界的优秀的程序员写出的代码,也会潜移默化的影响你写出高质量的代码,提升自己的技术能力

以上就是我学习Hadoop生态系统相关技术的历程,HDFS、Yarn、MapReduce以及HBase算是深入到了源码层面,其他的如Hive、Zookeeper等还只是停留在使用层面而已,不过对于日常工作而言已经足够了。

离开第一家公司后,我选择了一家做大数据基础平台的公司。当时那家公司主要专注在实现大数据集群的可管理性、可运维性以及提供对用户友好的访问接口上。虽然我们是一家做基础软件平台的公司,但我们做出来的产品终究是要给客户使用的,因此需要有对接客户业务和技术平台的人,我当时就是在做类似的工作,具体一点的话就是前期的需求沟通、和友商PK、解决方案设计以及后期的实施维护之类等。虽然在这家公司里我并不是纯做技术,但我有机会接触客户,了解客户的应用场景,并且帮助客户设计合理的大数据解决方案,使得自己对于大数据技术的应用侧有了一定的了解。我一直觉得做技术的人还是应该多关心我们的技术到底解决了什么样的业务问题,因为毕竟技术是为解决具体问题而存在的。在这家公司里,我主要接触到了Spark生态系统里的东西,比如Spark sql、Spark streaming等,学习的过程和学习Hadoop相关技术差不多,只不过这次没有细读代码了,对于Spark的代码只是大概看了下,了解了大概的技术架构而已,主要是因为自己本身对scala不熟,但是对于日常使用来说已经足够了。

接下来谈谈关于深度学习的学习过程。其实对于深度学习技术我也只是在来到我们公司后利用业余时间学的,并没有具体的项目来推动我学习,主要是觉得自己在掌握了解决大数据的存储以及计算相关的技术后,再掌握一门强大的数据分析技术的话能使自己对于数据领域的技术掌握得更加系统,大概的数据领域的技术可以分为数据采集、数据存储、计算框架、数据分析、数据展现等,其中每一项也可以再细分,比如数据存储可以分为HDFS之类的分布式文件存储系统以及HBase之类支持随机读写的表格存储系统等,计算框架包括Yarn、Mesos等,数据分析领域包括各种提供Sql执行引擎的系统如Hive、Spark sql以及机器学习、深度学习技术等。在学习深度学习时,我先是了解了神经网络发展的一个大概历程,然后学习一些比较常用的网络架构,比如CNN、LSTM等,最后是研究一些开源深度学习框架的代码实现,总体上和学习Hadoop、Spark等技术的过程差不多,只不过深度学习等技术是强算法相关的,需要有比较深厚的统计学、概率论、微积分的知识储备,因此在学习过程中需要时不时的去学习这些知识,如果大学时这些学科学得好的话,一定是大有裨益的。在看网上的一些介绍神经网络、CNN、LSTM的介绍资料时,有些细节我始终想不明白,但只要去深入研究一下开源框架的实现代码,就会有豁然开朗的感觉,总之一句话,看开源项目代码是掌握相应技术的绝佳方式。
希望对您有所启发。

大数据深度学习学习路线相关推荐

  1. 进阶大数据架构师学习路线

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/25b820fe1d054f53bab70310694faffe.jpeg#pic_center 文末有惊喜 大数据架 ...

  2. 大数据开发初学者学习路线_初学者的Web开发路线图

    大数据开发初学者学习路线 This beginner's roadmap lays out all the basics for web development. We're going to go ...

  3. 选择java大数据开发方向学习,应该怎么规划学习路线

    Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言.Java语言功能强大和简单易用,不仅吸收了C++语言的各种优点还摒弃了C++里难以理解的多继承.指针等概念. J ...

  4. 大数据开发工程师学习路线

    自己大数据开发的学习路线,先后顺序大概是:Linux常用命令.Shell语言.Java基础.MySQL.Hadoop.YARN.MapReduce.Flume.Kafka.HBase.Hive.Spa ...

  5. 大数据深度学习下车辆厂牌型号识别

    2015年3月,北京文安公司发布了基于大数据下深度学习的机动车厂牌型号识别技术. 车辆身份识别系统是智能交通的重要分支,它需要人工智能.图像处理.计算机视觉.模式识别等相关技术的综合应用.目前国内的车 ...

  6. 大数据深度学习下的车辆结构化——明景车辆结构化分析

    大数据深度学习下的车辆结构化--明景车辆结构化分析 车辆全特征结构化识别技术是计算机人工智能.图像处理.计算机视觉.模式识别等相关技术的综合应用.目前涉车涉驾案件的快速增长,以及车辆结构化.智慧城市应 ...

  7. 大数据工程师需要学习哪些内容

    大数据开发对于Java语言的依赖程度比较高,如果想尝试大数据开发,学习过Java语言就很容易上手 Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言. 目前很多大数 ...

  8. 大数据之Hadoop学习——动手实战学习MapReduce编程实例

    文章目录 一.MapReduce理论基础 二.Hadoop.Spark学习路线及资源收纳 三.MapReduce编程实例 1.自定义对象序列化 需求分析 报错:Exception in thread ...

  9. 大数据时代需要学习些什么?

    我们现在正处于"互联网+"的时代,将互联网和传统行业融合,往往可以创造出1+1>2的效果.这种1+1的模式,在编程语言的使用上也通用,比如Python+大数据开发,就可以在数 ...

  10. 大数据与人工智能:学习资源收藏

    大数据与人工智能学习资源收藏 Hadoop应用架构.pdf: https://itdocs.pipipan.com/fs/3843664-360663708 Hadoop数据分析.pdf: https ...

最新文章

  1. mysql之 CentOS系统针对mysql参数优化
  2. 那时刚毕业的我,曾参与惊心动魄 3Q 大战
  3. 轮询 长轮询 websocket
  4. Python字典推导式将cookie字符串转化为字典
  5. Android Annotation-让你的代码更加优雅(二)做一个Java诗人(JavaPoet)
  6. [OS复习]进程管理2
  7. python求列表最大值下标_切片,丝滑的字符串 | Python基础连载(三)
  8. LRU算法四种实现方式介绍
  9. 三个帮助你整理信息的桌面 WiKi
  10. 288. Unique Word Abbreviation
  11. python中pickle模块_python标准库学习之pickle模块
  12. hadoop集群常见问题解决
  13. python+selenium 使用for循环,遍历 定位 获取 单个元素中想要的值
  14. Android中需要了解的数据结构(一)
  15. IDEA创建JSP项目
  16. tomcat8修改session的JSESSIONID名称
  17. 一个月可以学会单片机嘛?单片机编程学多久?
  18. Git报错解决:fatal: unable to access ‘https://github.com/.......‘: OpenSSL SSL_read: Connection was reset
  19. 资金账户、证券账户及银行账户
  20. python导包问题解决方案(一字千金)

热门文章

  1. jsp中c标签的详细使用
  2. 通讯录查询系统的设计与实现
  3. WORDS WORTH光与影的传说简明攻略
  4. 聚焦低代码SaaS云服务,让企业轻松办公!
  5. C. Product of Three Numbers
  6. 高中计算机省赛试题,全国青少年信息学奥林匹克竞赛(高中组)初赛试题及答案...
  7. HTML期末大作业: 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做...
  8. 武汉疫情 - 新型冠状病毒信息整理
  9. javascript复习资料第一部分
  10. 转】用Mahout构建职位推荐引擎