大数据技术与实践学习

大数据技术与实践期末复习

生态系统

每一张图片都值得思考,理清楚到底是什么!

image-20240617195730069

1.结构化数据(数据库里面的):Sqoop(效率比较慢/隔一段时间抽取一次)

2.半结构化或者非结构化数据:Flume/Logstach(实时/消息队列(Kafaka))

3.Hbase(解决了小文件问题)基于HDFS

4.存储之后进行计算,使用mapReduce(慢一些)/Spark

5.Yarn相当于管理HDFS中节点的资源(CPU等等)

6.Hive/Pig将SQL转换成底层的mapReduce(通用计算)

7.Zookeeper(分布式的协调服务),可以来协调HDFS中的节点

8.Oozie和Azkaban是任务调度组件,调度计算任务(优先级)

大数据技术概述

大数据与其他新技术之间的关系

HDFS

分布式文件系统

分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。

image-20240617203933131

HDFS简介

image-20240617203950858

HDFS采用抽象的块概念带来的好处:

1.支持大规模文件存储(文件块存储)

2.简化系统设计

3.适合数据备份

NameNode和DataNode

image-20240617204303590

HDFS相关概念

image-20240617204601708

EditLog里面存储的相当于内存中的元数据存储到磁盘中,修改的日志

image-20240617204826232

◼ 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。

◼ 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。

HDFS体系结构

image-20240617201455592

通信协议

◼ HDFS是一个部署在集群上的分布式文件系统,因此,很多数据需要通过网络进行传输。

◼ 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的。

◼ 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互。

◼ 名称节点和数据节点之间则使用数据节点协议进行交互。

◼ 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的。在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求。

只设置一个NameNode节点的局限性:
1.命名空间的限制

2.性能的瓶颈

3.隔离问题

4.集群的可用性

HDFS存储原理

冗余数据保存

(1)加快数据传输速度

(2)容易检查数据错误

(3)保证数据可靠性

数据存取策略

调度管理

数据错误与恢复

1.namenode出错(secondaryNameNode备份最重要的两个数据结构–>FsImage和EditLog)

2.datanode出错 – dataNode每隔一个时间段(3s)向nameNode上报信息(存储的内容,健康状态(负载状态))

3.数据出错:md5和sha1校验,客户端进行判断,定期检查和复制

文件上传之前要先切块(128M),然后存到dataNode(还要备份),保持每个3份

image-20240617202008952

dataNode每隔一个时间段(3s)向nameNode上报信息(存储的内容,健康状态(负载状态))

HDFS数据读写过程

HDFS写操作:

image-20240617202349446

`import java.io.BufferedReader;

import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.FSDataInputStream;

public class Chapter3 {

public static void main(String[] args) {

try {

Configuration conf = new Configuration();

conf.set(“fs.defaultFS”,“hdfs://localhost:9000”);

conf.set(“fs.hdfs.impl”,“org.apache.hadoop.hdfs.DistributedFileSystem”);

FileSystem fs = FileSystem.get(conf);

Path file = new Path(“test”);

FSDataInputStream getIt = fs.open(file);

BufferedReader d = new BufferedReader(new

InputStreamReader(getIt));

String content = d.readLine(); //读取文件一行

System.out.println(content);

d.close(); //关闭文件

fs.close(); //关闭hdfs

} catch (Exception e) {

e.printStackTrace();

}

}`

读操作:

image-20240617203339604

`import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.FSDataOutputStream;

import org.apache.hadoop.fs.Path;

public class Chapter3 {

public static void main(String[] args) {

try {

Configuration conf = new Configuration();

conf.set(“fs.defaultFS”,“hdfs://localhost:9000”);

conf.set(“fs.hdfs.impl”,“org.apache.hadoop.hdfs.DistributedFileSystem”);

FileSystem fs = FileSystem.get(conf);

byte[] buff = “Hello world”.getBytes(); // 要写入的内容

String filename = “test”; //要写入的文件名

FSDataOutputStream os = fs.create(new Path(filename));

os.write(buff,0,buff.length);

System.out.println(“Create:”+ filename);

os.close();

fs.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}`

进入到安全模式,就只能读取了

HBase

概述

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库。

HBase和传统的关系数据库的区别:
1.数据类型:将数据存储为未经解释的字符串。

2.数据操作:避免了复杂的表和表之间的关系。

3.存储模式:关系数据库是基于行模式存储的。HBase是基于列存

储的,每个列族都由几个文件保存,不同列族的文件是分离的。

4.数据索引(只有行键索引)

5.数据维护(保留旧版本)

6.可伸缩性(减少硬件数量来实现性能的伸缩)

HBase访问接口

image-20240617210554622

HBase数据模型

image-20240617210647790

image-20240617210715726

HBase的实现原理

HBase的实现包括三个主要的功能组件:

– (1)库函数:链接到每个客户端

– (2)一个Master主服务器

– (3)许多个Region服务器

▪ 主服务器Master负责管理和维护HBase表的分区信息,维护Region服 务器列表,分配Region,负载均衡

▪ Region服务器负责存储和维护分配给自己的Region,处理来自客户端 的读写请求

▪ 客户端并不是直接从Master主服务器上读取数据,而是在获得Region 的存储位置信息后,直接从Region服务器上读取数据

▪ 客户端并不依赖Master,而是通过Zookeeper来获得Region位置信息 ,大多数客户端甚至从来不和Master通信,这种设计方式使得Master 负载很小

HBase运行机制

image-20240617210926382

image-20240617210955129

image-20240617211002047

HBase应用方案

HBase实际应用中的性能优化方法

行键 InMemory Max Version Time To Live

HBase性能监视

•Master-status(自带)

•Ganglia

•OpenTSDB

•Ambar

在HBase之上构建SQL引擎

NoSQL区别于关系型数据库的一点就是NoSQL不使用SQL作为查询语言,

至于为何在NoSQL数据存储HBase上提供SQL接口,有如下原因:

1.易使用。使用诸如SQL这样易于理解的语言,使人们能够更加轻

松地使用HBase。

2.减少编码。使用诸如SQL这样更高层次的语言来编写,减少了编

写的代码量。

方案:

1.Hive整合HBase

2.Phoenix

构建HBase二级索引

HBase只有一个针对行健的索引

访问HBase表中的行,只有三种方式:

•通过单个行健访问

•通过一个行健的区间来访问

•全表扫描

使用其他产品为HBase行健提供索引功能:

•Hindex二级索引

•HBase+Redis

•HBase+solr

MapReduce

概述

image-20240617211823894

MapReduce体系结构

MapReduce体系结构主要由四个部分组成,分别是:Client、JobTracker、TaskTracker以及Task。

image-20240617211909877

MapReduce工作流程

shuffle过程对hash取模

image-20240617212014903

image-20240617212051812

image-20240617212115708

image-20240617212122852

image-20240617212158867

image-20240617222322998

四个阶段:split,map,shuffle,reduce

shuffle阶段会在内存与磁盘之间多次读取数据

实例分析:WordCount ⭐⭐

image-20240617221804134

image-20240617212304667

image-20240617212314190

image-20240617212320033

image-20240617212327488

image-20240617212334680

MapReduce的具体应用

MapReduce可以很好地应用于各种计算问题

关系代数运算(选择、投影、并、交、差、连接)

分组与聚合运算

矩阵向量乘法

矩阵乘法

image-20240617212457240

Hive

Hive是一个构建于Hadoop顶层的数据仓库工具。

概述

image-20240617212723680

image-20240617212709374

image-20240617212816228

Hive系统架构

image-20240617220955131

image-20240617221010813

Hive的应用
Impala

image-20240617233316100

批处理层和实时处理层

image-20240617220810483

image-20240617220821132

Hive编程实践

Hive有三种运行模式,单机模式、伪分布式模式、分布式模式。

image-20240617220908057

image-20240617220917079

Spark

Spark概述

Spark具有如下几个主要特点:
•运行速度快:使用DAG执行引擎以支持循环数据流与内存计算
•容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell进行交互式编程
•通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件
•运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源

image-20240617221158024

image-20240617221203266

Spark生态系统

image-20240617221302908

Spark运行架构

RDD是只读的

RDD操作 Transformation和Action

RDD之间的依赖关系 宽依赖(走shuffle)窄依赖(一对一)

在yarn ,作业管理节点叫做application master

申请的资源叫做container

在spark,作业管理节点叫做Driver

申请的资源叫做executor(可以运行多个task)

image-20240617225250885

image-20240617225657705

Spark SQL
Spark的部署和应用方式
Spark编程实践

Flink

Flink简介

主要特性:批流一体化、精密的状态管理、事件时间支持、精确一次的状态一致性保障

为什么选择Flink

流处理架构

Flink具有以下优势:

(1)同时支持高吞吐、低延迟、高性能

(2)同时支持流处理和批处理

(3)高度灵活的流式窗口

(4)支持有状态计算

(5)具有良好的容错性

(6)具有独立的内存管理

(7)支持迭代和增量迭代

Flink应用场景

事件驱动型应用

数据分析应用

数据流水线应用

Flink技术栈

image-20240617233455581

Flink体系架构

image-20240617233510244

Flink编程模型

image-20240617233519158

Flink编程实践

理解数据

大数据技术综合应用

数据量大

数据类型多

处理速度快

价值密度低

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 09:12:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 09:12:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 09:12:03       87 阅读
  4. Python语言-面向对象

    2024-06-18 09:12:03       96 阅读

热门阅读

  1. 实例成员和静态成员

    2024-06-18 09:12:03       26 阅读
  2. 如何在windows中创建linux的sh文件

    2024-06-18 09:12:03       30 阅读
  3. CSS3 对齐方式

    2024-06-18 09:12:03       27 阅读
  4. el-table

    2024-06-18 09:12:03       35 阅读
  5. 速盾:海外网站cdn加速免费

    2024-06-18 09:12:03       38 阅读
  6. KCP协议介绍

    2024-06-18 09:12:03       37 阅读
  7. 详解 HBase 的常用 API

    2024-06-18 09:12:03       23 阅读
  8. 大数据开发语言Scala(一)--scala入门

    2024-06-18 09:12:03       42 阅读
  9. 深入浅出23种设计模式

    2024-06-18 09:12:03       32 阅读
  10. 图像识别技术在虚拟现实与增强现实中的应用

    2024-06-18 09:12:03       32 阅读
  11. MySQL怎么为表添加描述

    2024-06-18 09:12:03       35 阅读
  12. 第 10 章 监控系统 | 实战案例 - Nginx 监控

    2024-06-18 09:12:03       32 阅读
  13. Qt 事件

    Qt 事件

    2024-06-18 09:12:03      30 阅读
  14. 【Qt6.3 基础教程 04】探索Qt项目结构和配置文件

    2024-06-18 09:12:03       25 阅读