数仓项目-概念及架构
一:采集项目&数据仓库项目的区别
从功能角度:
采集:以数据为主,传输为主;
数仓:以数据的计算为主,同时也能存储数据;
从技术角度:
采集:flume、kafka、datax、maxwell
数仓:mysql、hdfs、spark、flink、mr、hive
二:数据库和数据仓库的区别
从名称上区分:
数据库:database(基础、核心的数据)
数据仓库:data warehouse(货栈、大商店、小卖店),注重于对外提供服务
从数据的来源区分:
数据库:企业中基础核心的业务数据
数据仓库:数据库中的数据
从数据存储的角度区分:
数据库:核心作用是查找业务数据
如何存储有利于查询:行式存储(底层使用索引),不能存储海量数据;
数据仓库:统计分析数据
如何存储有利于统计、分析:列式存储,可以存储海量数据;
从数据的价值区分:
数据库:保障全企业、全业务的正常运行;
数据仓库:将数据的统计的结果为企业的经营决策提供数据支撑;
数据仓库不是数据流转的终点,需要将统计的结果通过可视化呈现;
...
OpenTSDB原理、存储及查询
一、简介OpenTSDB(Open Time Series Database)是一个用于存储和检索时间序列数据的分布式、可扩展的开源数据库系统。它特别适用于大规模、高性能的监控和分析应用程序,如网络监控、服务器性能监控、传感器数据存储等。
二:特点
时间序列数据存储: OpenTSDB 主要用于存储时间序列数据,这是一种按时间顺序存储的数据,通常表示随时间变化的测量数据,如服务器负载、传感器读数、网络流量等。
分布式架构: OpenTSDB 采用分布式架构,可以在多台服务器上存储和查询大量时间序列数据。这使得它适用于大规模的数据集和高负载应用。
快速插入和查询: OpenTSDB 针对高性能而设计,可以快速插入和查询时间序列数据。它使用 HBase 作为后端存储引擎,具有高度优化的数据检索机制。
多维数据模型: OpenTSDB 具有多维数据模型,允许您为不同的时间序列数据添加标签和标识。这可以帮助您组织和查询数据,以满足各种需求。
开源: OpenTSDB 是开源项目,基于 Apache 2.0 许可证,可以免费使用和定制。
社区支持: OpenTSDB 拥有活跃的社区支持,这意味着 ...
SpringBoot 快速上手
SpringBoot入门程序开发Springboot 初衷SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
SpringBoot程序优点
起步依赖(简化依赖配置)
自动配置(简化常用工程相关配置)
辅助功能(内置服务器,……)
创建 SpringBoot 工程的四种方式
基于Idea创建SpringBoot工程
基于官网创建SpringBoot工程
基于阿里云创建SpringBoot工程
手工创建Maven工程修改为SpringBoot工程
基于Idea创建SpringBoot工程①:创建新模块,选择Spring Initializr,并配置模块相关基础信息
②:选择当前模块需要使用的技术集
③:开发控制器类1234567891011121314151617181920package cn.aiyingke.demo.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework. ...
Kafka 概述
一:定义Kafka 传统定义:Kafka 是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据的实时处理场景。发布/订阅:消息的发布者不会将消息直接发送给消息的订阅者,而是将发送的消息分为不同的类别,订阅者只接受感兴趣的消息。Kafka 愿景定义:Kafka 是一个开源的分布式事件流平台,被多数公司用于高性能数据管道、流分析、数据集成和关键任务应用。
二:消息队列在大数据领域通常采用 Kafka 作为消息队列。
2.1 传统消息队列的应用场景传统的消息队列主要应用于:缓存/消峰、解耦和异步通信。
缓存/消峰:有助于控制和优化数据流系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
解耦:允许独立的扩展或者修改两边的处理过程,只要确保他们遵循同样的数据接口约束。
异步通信:允许用户把消息放入队列中,但不立即处理它,然后在需要的时候再处理它们。
2.2 消息队列的两种模式点对点模式:消费者主动拉去消息,收到消息后清除消息。
发布/订阅模式:
可以有多个topic主题;
消费者消费数据后,不删除数据;
每个消费者相互独 ...
Spark 性能调优——Shuffle调优
一:ShuffleManager发展概述在Spark的源码中,负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。而随着Spark的版本的发展,ShuffleManager也在不断迭代,变得越来越先进。
在Spark 1.2以前,默认的shuffle计算引擎是HashShuffleManager。该ShuffleManager而HashShuffleManager有着一个非常严重的弊端,就是会产生大量的中间磁盘文件,进而由大量的磁盘IO操作影响了性能。
因此在Spark 1.2以后的版本中,默认的ShuffleManager改成了SortShuffleManager。SortShuffleManager相较于HashShuffleManager来说,有了一定的改进。主要就在于,每个Task在进行shuffle操作时,虽然也会产生较多的临时磁盘文件,但是最后会将所有的临时文件合并(merge)成一个磁盘文件,因此每个Task就只有一个磁盘文件。在下一个stage的shuffle read task拉取自己的数据时,只要根据索引读取 ...
Spark 性能调优——数据倾斜调优
数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。
一:数据倾斜发生时的现象
绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见。
原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,是我们写的业务代码造成的。这种情况比较少见。
二:数据倾斜发生的原理数据倾斜的原理很简单:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。比如大部分key对应10条数据,但是个别key却对应了100万条数据,那么大部分task可能就只会分配到10条数据,然后1秒钟就运行完了;但是个别task可能分配到了100万数据(巨量数据),要运行一两个小时。因此,整个Spark作业的运行进度是由运行时间最长的那个task决定的。
因此出现数据倾斜的时候,Spark作业看 ...
Spark 性能调优——资源调优
调优概述在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。
Spark作业基本运行原理
详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事 ...
Spark 性能调优——开发调优
大多数spark作业的性能主要就是消耗了shuffle过程,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。
影响一个Spark作业性能的因素,主要还是代码开发、资源参数以及数据倾斜,shuffle调优只能在整个Spark的性能调优中占到一小部分而已。
开发调优、资源调优、数据倾斜调优、shuffle调优;
Spark基本开发原则,包括:RDD lineage设计、算子的合理使用、特殊操作的优化
原则一:避免创建重复的RDD对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。****对多次使用的RDD进行持久化
一些Spark初学者在刚开始开发Spark作业时,或者是有经验的工程师在开发RDD lineage极其冗长的Spark作业时,可能会忘了自己之前对于某一份数据已经创建过一个RDD了,从而导致对于同一份数据,创建了多个RDD。这就意味着,我们的Spark作业会进行多次重复计算来创建多个代表相同数据的RDD,进而增加了作业的性能开销。
1234567891011121314151617// 需要对名为“hello.txt”的HDFS文件进行一次ma ...
Spark 常用算子
一:算子概述1.1 什么是算子?
英文:Operator
狭义:一个函数空间到另一个函数空间的映射
广义:一个空间到另个一个空间的映射
白话:一个事物从一个状态到另一个状态的过程
实质:映射,即关系
1.2 算子的重要作用
算子越多,灵活性越高,编程的可选方式就越多
算子越多,表现能力强,可以灵活应对各种复杂场景
1.3 MapReduce 和 Spark 算子比较
MapReduce 只有2个算子,map和reduce,绝大多数场景下,需要复杂的编程来完成业务需求
Spark 有80多个算子,可以灵活组合应对不同的业务场景
二:Spark算子2.1 转换算子(transformation)此种算子不会真正的触发提交作业,只有作业被提交后才会触发转换计算
value型转换算子(处理的数据项是value型)
输入分区:输出分区 = 1 : 1
map算子
flatMap算子
mapPartitions算子
输入分区:输出分区 = n : 1
union算子
cartesian算子
输入分区 :输出分区 = n : n
groupBy ...
Flink 架构设计
一:Flink 架构设计图
1.1 分层设计说明
物理部署层 -deploy层
负责解决Flink的部署模式问题
支持多种部署模式:本地部署、集群部署(standalone/yarn/mesos)、云(GCE/EC2)以及 kubernetes 。
通过该层支持不同平台的部署,用户可以根据自身场景和需求使用对应的部署模式;
Runtime核心层
是Flink分布式计算框架的核心实现层,负责对上层不同接口提供基础服务。
支持分布式steam作业的执行、jobGraph到ExecutionGraph的映射转换以及任务调度等。
将DataStream和DataSet转成统一的可执行的Task Operator,达到在流式计算引擎下同时处理批量计算和流式计算的目的。
API & Libraries 层
负责更好的开发用户体验,包括易用性、开发效率、执行效率、状态管理等方面。
Flink同时提供了支撑流计算和批处理的接口,同时在这基础上抽象出不同的应用类型的组件库,如:
基于流处理的CEP(复杂事件处理库)
Table & Sql库
基于批处 ...







