# aggregate_notes **Repository Path**: orderinchaos/aggregate_notes ## Basic Information - **Project Name**: aggregate_notes - **Description**: They are my notes including some most frequently used frames in field of big data. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-05-07 - **Last Updated**: 2021-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] # Read me 这是一份有关于大数据生态圈学习过程中各类知识点整理的思维导图集。 在 **2021年5月4日** 该库进行了第一次大更新,主要是根据自己的技术栈对该库进行了剪枝和添加。 整个库分为 **7** 大主要模块: 1. `00_装配文件`:在此模块中,我对大数据相关软件在 `Linux` 和 `Mac` 环境下的安装进行了详细的说明,以确保大数据软件能够尽可能成功的运行在你的电脑上。 2. `0.5_Shell`:学习大数据究竟需不需要 `Shell` 脚本基础,这取决于你自身,若没有 `Shell` 脚本基础,也不妨碍你进行大数据的学习,若是拥有 `Shell` 脚本基础,那么你在处理一些进程的时候,将会事半功倍。 3. `01_数据源`: `Database` 部分目前(2021年5月4日)拥有`MySQL`、`HBase`、`Redis`三个部分。 4. `02_接入层`:主要是`Flume, Sqoop, Kafka 和 Canal`。 5. `03_数据处理层`:这一层面的内容十分丰富,因而我又做了一次划分,主要分为五个部分:`数据存储:如HDFS`,`数据计算:MapReduce, Spark, flink`,`数据查询:Hive, Presto, Kylin, ElasticSearch`,`任务调度:Azkaban,`监控报警:`Zookeeper, Zabbix`。 6. `04_项目实战`: 这一层面, 包括`离线数仓和实时项目`。 7. `05_面试`:包括`mysql, jvm 和 juc`等面试常考。 8. `06_开发常用`: 这一部分对工作中常用的包括类和方法等做了简单的总结主要是为了提高自己的项目开发速度和熟悉度。 针对每一个框架,思维导图的思路如下: 1.每一个框架我都会整理两个文件:理论文件和代码文件。(如无代码文件需要我会专门说明) 2.在理论文件中,我会解释清楚每个框架运作的原理,相应需要注意的细节点。在此部分中将不会或很少会出现代码。 3.在代码文件中,基于理论文件的理解,我会实现该框架的基础功能,以便于在工作中可以直接查询或使用。 4.实际项目中所使用的代码较基础代码要更为复杂, 这一部分我将按照自己的习惯, 单独写md文件或者在idea工程中汇总, 将放入该库中作为补充内容。 说明:红色标记的是重要点 最后说一句我想说的话: > 理解原理是重要的一步, 其次大数据的工作, 还是熟练度的问题, 在理解原理的基础上, 去提高熟练度, 是我后续要去做的。 # 大数据软件装配 > 工欲善其事,必先利其器。 我的配置环境是: `CentOs 7.0` `MySQL 5.7.29` `JDK 1.8.0_212` `Scala 2.12.10` `Hadoop Apache 3.1.3` `Spark 3.0.0` `Zookeeper 3.5.7` `Hive 3.1.2` `Flume 1.9.0` `Kafka 2.11-2.4.1` `Sqoop 1.4.6` `HBase 2.0.5` `SuperSet` `Kylin 3.0.2` `Presto 0.196` `Azkaban 3.84.4` `Redis 3.2.5` `ES 6.6.0` # Shell 本框架内部所做的`Shell`思维导图仅仅是一个简单的入门,学习结束以后可以看懂基本的脚本流程,和撰写一些简单的脚本,更深入的推荐去看`Linux命令行与shell脚本编程大全`。 ![Shell](README.assets/02_Shell.png) # 数据源 ## Database ### MySQL `MySQL`目前需要更新的地方仍然很多,目前有一份依照`DDL、DML及DCL`思路进行制作的说明文档。 ### Redis `Redis`是一个开源的`key-value`式存储系统,配合关系型数据库做高速缓存,由于其拥有持久化能力,利用其多样的数据结构存储特定的数据是它的两个主要用途。 ![Redis](README.assets/04_redis.png) ### HBase #### 理论文件 `HBase` 作为基于 `hadoop` 的 `NoSQL` 数据库,其原理性和操作性的要求都比较强,在原理阶段讲解了 `HBase` 的逻辑结构和物理存储结构,以及针对于其结构进行优化的的操作手段。 ![HBase](README.assets/05_HBase.png) # 接入层 ## Flume `Flume`是一个基于流式架构数据采集、聚合和传输系统,因而它实用性较强,通过`Source` ,`Channel`,`Sink` 进行控制。所以我把它理论和代码文件归并。 ![Flume](README.assets/08_Flume.png) ## Sqoop `Sqoop` 是一个用于 `Hadoop` 和关系型数据库数据互导的小框架,其原理就是讲导入导出操作译作 `MapReduce` 语言,最关键的操作就是根据其语法进行脚本写作,因而理论与代码文件合并,同时整理出了 `Sqoop` 的常用命令。 ![image-20190628211439618](README.assets/09_Sqoop.png) ## Kafka `Kafka`的用途多种多样,并不只局限于数据接入一种,它可以进行日志收集,消息系统,用户活动跟踪,流式处理等,要理解`Kafka`,首先要了解它的架构运行,其次了解它的文件存储机制。 ![Kafka](README.assets/23_Kafka.png) ## Canal # 数据处理层 ## 数据存储 ### HDFS #### 理论文件 `HDFS` 是 `Hadoop` 的基石,因此我把 `Hadoop` 的概述与它进行了合并,作为一个小简介,从而引出 `HDFS` ,`HDFS`的主要部分在于理解`NN`、`DN`、`Client`和`2NN`的运行机制。 在2019年7月13日`HDFS理论文件`进行了一次更新,将`HDFS`架构,读写流程,以及`NN与2NN`的关系纳入了`HDFS运作原理`模块中,同时新增了`Hadoop压缩格式`,及`Hadoop优化`两个模块,完善了`HDFS`的内容。 ![HDFS](README.assets/10_HDFS.png) #### 代码文件 已更新,主要是`Hadoop`在`shell`命令行中的一些常用命令整理归纳 ### Yarn `Yarn`是`Hadoop`中的资源调度平台,在这一内容中的重点主要有`Yarn工作机制`(以`MapReduce`程序为例,详细的介绍了`Yarn`的资源调度流程),`Yarn资源调度器`(介绍了`Yarn`的三种资源调度器),以及`Yarn的资源推测执行机制`。 ![Yarn](README.assets/11_Yarn.png) ## 数据计算 ### MapReduce #### 理论文件 `MapReduce` 是 `Hadoop` 中的分布式计算系统,在之后的内容中,有许多框架都是基于 `MapReduce` 所进行的,比如 `Oozie` ,比如 `Hive` ,因而理解 `MapReduce` 的原理是非常必要的。 ![MR](README.assets/12_MapReduce.png) #### 代码文件 暂无 #### 备注 `MapReduce` 的知识框架整理方面,还是存在一些代码混杂于理论文件之中的情况,在接下来的版本中应该会对这一点进行更新。 ### Spark 暂未更新 ## 数据查询 ### Hive `Hive` 的情况恰恰与 `Zookeeper` 相反,`Hive` 作为一个基于 `Hadoop` 的数仓工具,其原理运作并不难,即底层基于 `MapRuduce` 的类 `SQL` 查询工具,因此 `Hive` 更注重的是代码文件,其中 `4 ~ 9` 章我以 `sql` 整理出来。 `Hive理论文档`在2019年7月14日又进行了一次更新,这次更新主要是增加了其与数据库的关系、保存元数据的方式,以及针对压缩和调优,进行了一次总结。 ![Hive](README.assets/17_Hive.png) ### Presto ### Kylin ### ElasticSearch 暂未更新 ## 任务调度 ### Azkaban `Azkaban`作为任务调度框架,其易用性无论从环境配置上来讲,以及配置文件的撰写上来讲,都要比`Oozie`更好。 ![Azkaban](README.assets/20_Azkaban.png) ## 监控报警 ### Zookeeper `Zookeeper` 的主要目的是为了监控集群中的修改操作,它的架设与操作都非常简单,因此 `Zookeeper` 只有理论文件,在理论中,尤其要注意理解的是它的监听器原理和选举机制(类 `Paxos` 算法),此外,`Zookeeper`的写数据流程也值得注意。 ![Zookeeper](README.assets/22_Zookeeper.png) ### Zabbix