大数据体系和SQL | 青训营笔记

171 阅读10分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天

大数据体系和SQL

第一次参加青训营,也是想多学一些东西,尝试着按照预习的学习框架来整理一些笔记,因为没有什么基础所以总结的可能不太到位会附上一些预习时参考的社区贴子链接来帮助大家理解。

生产系统中的大数据体系

  • 阿里云的相关产品

    • 对象存储OSS(Object Storage Service) image-20220723231950545.png
    1. 数据迁移

image-20220724113106513.png

 - 离线数据迁移

   > 闪电立方可将用户线下数据,安全、高效的迁移至对象存储OSS,提供端到端的加密机制,支持TB到PB级数据迁移上云

   这里介绍了三种Elasticsearch数据离线的迁移方式

   [大聪明教你学Java | Win10 环境下搭建 Elasticsearch - 掘金 (juejin.cn)](https://juejin.cn/post/7085154203584167944)

   

   | 迁移方式           | 适用场景                                                     |
   | ------------------ | ------------------------------------------------------------ |
   | COS 快照           | 数据量大的场景(GB、TB、PB 级别)对迁移速度要求较高的场景    |
   | logstash           | 迁移全量或增量数据,且对实时性要求不高的场景需要对迁移的数据通过 es query 进行简单的过滤的场景需要对迁移的数据进行复杂的过滤或处理的场景版本跨度较大的数据迁移场景,如 5.x 版本迁移到 6.x 版本或 7.x 版本 |
   | elasticsearch-dump | 数据量较小的场景                                             |

   

 - 在线数据迁移

   > 用户可使用阿里云OSS在线数据迁移服务、OSSImport工具,将第三方云存储、自建的线下存储等各类数据,在线迁移至对象存储OSS

 - HDFS数据迁移

   > 通过Hadoop对阿里云OSS的支持,用户便可以在自建的Hadoop集群或通过阿里云EMR,将HDFS中大规模的数据迁移至对象存储OSS

   这里由于是初次学习,于是又了解了一下Hadoop的相关概念。

   [兄弟,用大白话告诉你小白都能看懂的Hadoop架构原理 - 掘金 (juejin.cn)](https://juejin.cn/post/6844903713211940877)

   > Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

2. 数据处理

image-20220724113028553.png - 图片处理

 - 视频截帧

 - 人脸识别

3. 数据管理

image-20220724113047153.png

 - 生命周期

 - 镜像回源

   > 使用镜像方式配置回源规则,当请求在OSS没有找到文件,会自动到源站抓取对应文件保存到OSS,并将内容直接返回到用户。
   >
   > [OSS回源的几种方式和应用场景 - 掘金 (juejin.cn)](https://juejin.cn/post/6844903549403398158)

   模式一:**公网链路**

image-20220724110647267.png

   **解读:**CDN回源到OSS,OSS在Bucket没找到文件,OSS走Internet链路按照配置的源站地址直接到客户源站回源取文件。    

   **适合场景:**适合大部分源文件在OSS,少量文件在客户源站,比如平滑迁移源站场景(会有少量文件继续写到客户源站)。

   模式二:**专线链路**

image-20220724111234353.png

   **解读:**OSS直接透过客户VPC将回源请求通过高通专线透传到客户源站进行源文件抓取。    

   **注意:**云平台安全方不允许此种回源方案,因为相当于OSS可以访问云下地址,如果客户更改成恶意源站地址,会对云平台造成安全风险,此前有过案例,除非OSS回源时可以对客户做鉴权。

   模式三:**专线+Proxy**

image-20220724111833750.png

   **解读:**OSS回源请求通过Internet公网先回源到公网SLB,然后再在VPC ECS上部署Nginx将回源请求通过高通专线透传到源站。

   **适合场景:**希望OSS镜像回源功能能够走专线,以保证回源稳定性和效率。

 - 传输加速

   > 阿里云OSS原生加速产品,依托阿里云数据中心全球的接入点,结合智能探测与调度算法,提供最适合OSS用户的加速服务

   

4. 容灾备份

image-20220724113124193.png

 - 跨区域复制
 - 版本控制
 - 同城冗余

 > 冗余和备份是数据库管理工作的重中之重:一方面天有不测风云,从手抖删库到自然灾害,都可能导致数据库数据损失;另一方面数据是一家互联网公司最重要的资产,留得青山在,不怕没柴烧,但如果青山没了,恐怕就得散伙了。

 [小团队如何高效构建数据库冗余、备份及备份验证机制(来自下厨房技术团队的实践) - 掘金 (juejin.cn)](https://juejin.cn/post/6844903592537620493)

5. 安全

 - 防盗链
 - 数据加密
 - WORM

 > WORM 技术使文件只能写入一次数据,不能重复写入且不允许被修改、删除或重命名。WORM 特性是在普通文件系统的基础上增加了 WORM 属性,使 WORM 文件系统内的文件在保护期内只能被读取。

 [🎇WORM-HyperLock-多次读取数据拒绝非法修改🎇 - 掘金 (juejin.cn)](https://juejin.cn/post/6998724500900724772)

image-20220724113941495.png

  • 批式计算&流式计算

彻底”撕破“流式计算和批计算的“云里雾里面纱” - 掘金 (juejin.cn)

image-20220724150637647.png

批计算是指对静态数据的批量处理,即当开始计算之前数据已经准备到位,主要用于数据挖掘和验证业务模型;流式计算是指对具有时效性的数据进行的计算,流式计算需要依赖上游数据传输的正确性和实时性以及下游存储系统的高吞吐

在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中。当人们需要的时候通过数据库对数据做查询,得到答案或进行相关的处理。这样看起来虽然非常合理,但是结果却非常的紧凑,尤其是在一些实时搜索应用环境中的某些具体问题,类似于MapReduce方式的离线处理并不能很好地解决问题。这就引出了一种新的数据计算结构---流计算方式。它可以很好地对大规模流动数据在不断变化的运动过程中实时地进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点。

  • YARN

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

  • Kubernetes

最详细的 K8S 学习笔记总结(2021最新版) - 掘金 (juejin.cn)

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

SQL的基本用法

Mysql常用SQL语句集锦 | 掘金技术征文 - 掘金 (juejin.cn)

编译原理相关基础知识

  • 语法分析

语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。

  • 词法分析

词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。

词法分析是编译程序的第一个阶段且是必要阶段;词法分析的核心任务是扫描、识别单词且对识别出的单词给出定性、定长的处理;实现词法分析程序的常用途径:自动生成,手工生成.

  • 抽象语法树

之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。

和抽象语法树相对的是具体语法树(通常称作分析树)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。

SQL 里的执行计划

  • 逻辑计划

  • 物理计划

  • 分布式计划

  • Left-deep tree

SQL执行基本流程

SQL请求在MySQL的执行流程解析 - 掘金 (juejin.cn)

MySQL的执行流程:SQL语句 -> 查询缓存 -> SQL分析器 -> SQL优化器 -> SQL执行器

image-20220724165342773.png

分布式系统中 shuffle 的实现方式

Flink Sort-Shuffle 实现简介 - 掘金 (juejin.cn)

和其他分布式系统的批数据 sort-shuffle 实现类似,Flink 的整个 shuffle 过程分为几个重要的阶段,包括写数据到内存缓冲区、对内存缓冲区进行排序、将排好序的数据写出到文件以及从文件中读取 shuffle 数据并发送给下游。但是,与其他系统相比,Flink 的实现有一些根本性的不同,包括多段数据存储格式、省掉数据合并流程以及数据读取 IO 调度等。这些都使得 Flink 的实现有着更优秀的表现。

结语

由于没什么大数据基础所以概念性的东西也耗费了一些时间,而且只停留在表面的理解,希望在经过课程学习之后可以理解的更好一些。