乐趣区

关于java:大数据学习路线

磨拳擦掌!

说数据是一个企业最外围的货色之一,我想大家应该都能根本认同吧,毕竟连 XXX 都说过,这是一个数据为王的时代,谁把握了数据谁就把握将来!

怪不得个个都磨拳擦掌,都嚷嚷着想搞大数据。

注:本文已收录于 Github 开源我的项目:github.com/hansonwang99/JavaCollection,外面有各大方向编程的具体自学路线、面试题和面经、编程材料及系列技术文章等,资源继续更新中


大数据开发根底

学习编程语言往往是咱们开启学习之路的第一大步。大数据畛域的很多框架都是基于 Java 语言开发的,而且各种框架也都提供了 Java API 来提供应用和操作接口,所以 Java 语言的学习逃不掉。除此之外 Scala 在必要时也能够学一下,在大数据开发畛域里用得还是挺多的。Scala 语言的表达能力很强,代码信噪比很高,而且很多大数据框架也都提供了 Scala 语言的开发接口,况且 Scala 也能够运行于 Java 平台(JVM),并且兼容 Java 程序,所以也能够和大数据相干零碎进行很好的集成。

除此之外,陈词滥调的 数据结构和算法 计算机网络 操作系统 数据库 设计模式 也是程序员必备的通用计算机根底,不光是搞大数据的须要具备,搞后端开发的也是把握这些根底,而且这些货色在求职面试时也是必备的,这部分应该大量花工夫给坐实。

最初还要提一下对 Linux 操作系统的要求,当然咱们这里次要还是着眼于 Linux 零碎应用的角度。因为大数据系统的开发、部署根本都是基于 Linux 环境进行的。把握罕用的命令、配置、网络和系统管理、根本的 Shell 编程等等,对学习都大有裨益。


根本开发工具

大数据畛域的常见开发工具和软件和后端开发根本差不多,比方:选一个常见的 Linux 操作系统,一套好用的 SSH 工具和 FTP/SFTP 工具,一个称手的集成开发环境,以及支流的源码管制工具和构建工具等等。

接下来就进入到大数据开发的具体流程,分几大块捋一遍,首先就是 数据采集


数据采集

既然大数据系统是解决海量数据的,那么第一个问题,这个海量数据到底是 什么类型 从哪里来 呢?

能够说,输出大数据系统的数据类型品种繁多,模式构造也有所不同,有传统的结构化数据,也有 XMLJson 等这类的半结构化数据,甚至还有文档、音视频这类非结构化数据。

数据的起源更是形形色色,有间接来自后端已有数据库的数据,有来自后端日志零碎的数据,有来自第三方服务的各种数据,甚至还有从网上爬取的各种数据。

找到了数据源,接下来的 数据采集 数据传输 工作就很重要了。

咱们就当前台最常见的日志数据为例,因为当初的服务零碎采纳集群部署形式的很多,那分布式集群上海量日志数据的采集和传输就是一个大问题。Flume是一个较常应用的分布式数据采集和聚合框架,最典型的利用就是日志数据的收集。它能够定制各类数据发送方并聚合数据,同时提供对数据的简略解决,并写到各种数据接受方,实现数据传输。

与此同时,还有一个叫做 Logstash 的开源数据收集引擎可能大家也听过,也比拟罕用的。

当然还有一种场景也是数据采集这一步通常须要思考的,那就是在不同的存储系统(或数据库)之间进行数据的迁徙(如:导入 / 导出)。比方咱们常常须要在传统关系型数据库(如 MySQL)和大数据系统的数据仓库(如Hive)之间进行数据迁徙(替换),这时候一个叫Sqoop 的数据采集和传输工具就十分罕用了。除此之外,淘宝开源的 DataX 也是同类型工具。


数据存储

数据采集实现,接下来须要对其进行 存储,这也是十分清晰的思路和流程。

说到数据存储,咱们首先想到的当然是数据库存储。包含 MySQLSql Server 等等这种最常见的 关系型数据库 ,以及RedisMongoDBHBase 等这类 非关系型数据库

咱们这里将 ElasticSearch 独自提出来聊,因为尽管它某一水平上也能够视为数据库,然而它更次要的身份还是一个优良的全文搜索引擎。它的呈现,解决了一部分传统关系型数据库和 NoSQL 非关系型数据库所没有方法高效实现的一些工作,比方高效的全文检索,结构化检索,甚至是数据分析,所以当初用的公司也越来越多。

除了传统的数据库,在大数据畛域,利用十分宽泛的存储技术还包含 分布式文件系统 分布式数据库 。说到分布式文件系统,赫赫有名的HDFS 就是一个应用十分宽泛的大数据分布式文件系统,它既是根本的数据存储平台,也是大数据系统根底平台设施;而后者的代表性技术 HBase 则是一个构建在 HDFS 之上的分布式数据库,适宜海量数据的存储。

在大数据畛域,除了分布式文件系统和分布式数据库,还有一个常常听到的就是以 Hive 为代表的 数据仓库 。咱们能够将数据仓库了解为一个逻辑上的概念,其底层往往是基于文件系统打造的。还以Hive 为例,它的呈现次要就是能够让开发人员可能通过 SQL 的形式来不便地操作和解决 HDFS 上的数据,实用于离线批量数据的解决,上手敌对,应用门槛升高。

所以将这部分内容做一个阶段性总结,能够如下所示:


数据处理

数据有着落了,接下来干啥?当然是充沛开掘数据所蕴含的价值,更直白一些说就是对其进行各种查问、剖析和计算,这样能力为数据赋能,产生价值。

最晚期的 MapReduce 就是 Hadoop 提供的分布式计算框架,能够用来统计和剖析 HDFS 上的海量数据,适宜于速度不敏感的 离线批处理 ;起初呈现的内存计算框架Spark 则更加适宜做迭代运算,因而也备受青眼。在一些不须要实时计算的场景,这些框架利用得非常宽泛,然而在一些离线数据分析无奈满足需要的场景下,比方金融风控、实时举荐等,这时候 在线计算 或者说 流式计算 就变得非常有必要了,这也成了现如今诸如 StormFlink 等一大批优良的实时计算框架的主阵地,尤其是Flink,这几年的炽热水平不必多说,基于它构建的解决引擎也星罗棋布。


数据价值和利用

大数据系统最终的工作还是得服务于业务,为生产发明出理论价值。这种价值利用场景包含但不限于提供各种统计报表,商品举荐,数据可视化展示,商业剖析,辅助决策等等。


大数据周边技术

聊到这里,应该说下面的内容曾经根本将一个大数据引擎的主流程走完了,然而理论的大数据系统还须要诸多周边技术的反对,因而还衍生了很多附加框架和技术。

因为单机性能的局限和瓶颈,所以大数据系统的很多框架组件都是 集群部署 的,这时候针对集群零碎的 部署 治理 以及 监控 工具就不可或缺了,比方应用宽泛的 AmbariCloudera Manager等。

有了集群之后,集群平台上各种资源的治理以及各种工作的调度就成了一个简单且辣手的问题,这时候资源管理框架 YARN,工作工作流调度框架AzkabanOozie等就有了用武之地。

同时为了保障分布式集群的高可用,像 ZooKeeper 这种分布式协调服务框架几乎帮了大忙,像 Master 选举、集群治理、分布式协调告诉等工作通通不在话下。

最初,还必须要提的一个赫赫有名的中间件框架,那就是Kafka。它不仅仅是一个高吞吐量的音讯零碎,有了它之后,零碎解耦、峰值压力缓冲、高效流解决等等都使得它成为后端开发和大数据开发人员眼里那个最靓的崽。


做个总结

最初咱们也将上述所有内容的完整版思维导图给贴在这里,因为这个图是在是太大了,切实不太好弄。


几个要探讨的话题

大数据开发和后端开发关系大吗?

应该说很多技术点和框架都是有交加的。比方通用编程根底局部完全一致,再者罕用的像 Redis、Zookeeper、Kafka、Elasticsearch 等等这些支流得不能再支流的框架,在以前咱们梳理 Java 后端路线时也都有,所以二者的交加很大,甚至很多做大数据的,以前就是从后端转过来的,十分天然,因为很多技术都相通甚至齐全一样。

这么多框架都得学吗?

大数据畛域框架这么多,睡不着觉的能够大抵数一数,仅方才那个脑图外面所提及的最起码就有三四十个,是每个都须要学习吗?咱们在梳理时,同类型的支流框架都列举了不止一个。一般来说,咱们只有学明确其中一个,上手同类型其余技术就都不难了,触类旁通很重要。另外咱们尽量学支流经典的框架,个别就没啥问题,比方分布式文件系统 HDFS 很经典用得很多,流解决外面 Flink 当初火得一腿,自学对应局部时就能够思考学一下。

具体框架(技术)到底怎么学?

最初还是得落实到具体某一个技术(框架)到底怎么学的问题。我感觉学习思路倒也清晰,首先第一步,搞清楚这个框架是干什么的,解决了什么问题和痛点,同类“竞品”还有哪些,这一步在下面的具体思维导图里,咱们曾经帮你实现了;第二大步,把这个技术(框架)用起来,取得成就感很重要,那具体又怎么用呢,思路也很明了,首先是把对应环境装置部署好,跑起来,而后基于筹备好的环境做试验,跑 Demo,本人写货色拿上去跑,由简略到简单,缓缓上手直至纯熟,该过程中必定会踩坑,所以做好记录、输入、笔记,写下本人的踩坑过程和解决思路十分重要,步步为营;最初一大步才是针对外面的要害机制深入研究其原理,学到就是赚到,所以总体也就这三大步。


后记

本期硬核,创作不易,不想被白瞟,也心愿能三连反对一波。

最初也要特地鸣谢菊花云带佬,我的学长云哥对于本次路线梳理提供的领导和帮忙,我愿称之为 KTV 里的周胖伦,大数据界的扛把子。

注:本文已收录于 Github 开源我的项目:github.com/hansonwang99/JavaCollection,外面有各大方向编程的具体自学路线、面试题和面经、编程材料及系列技术文章等,资源继续更新中

下篇见。

退出移动版