大数据原理与实践

12为了能够管理多台分布式系统,出现了HDFS

Hadoop是一个分布式系统架构

程序员如何编写程序管理,出现了MapReduce,提供了并行框架,map切分,Reduce就是汇总阶段

如何在Hadoop上写SQL,于是出现了Hive,它是一个进行结构化数据处理的解决方案,为了能让用户使用SQL处理数据,S就是结构化。Hive将SQL翻译成MapReduce。

Spark被用来和Hadoop的MapReduce对比。MapReduce是基于磁盘的计算框架,而Spark是基于内存,主打的快。同理也有Spark on SQL

Hadoop基础

MapReduce并行计算架构

YARN

HDFS分布式文件系统

HDFS

计算机集群

  • 将文件分布存储到多个计算机节点,节点构成计算机集群
  • 计算机集群都是由普通硬件构成,大大降低硬件开销
  • 通过“心跳”判断是否节点损坏,有多个副本,不怕损坏

结构

  • 采用主从结构,有主节点和从节点
  • 一个主节点关联多个从节点,一个从节点关联多个主节点,因此数据在不同从节点中有多个副本

Block-块

  • windows块大小是4k,而HDFS默认默认一个块128MB,一个文件被分成多个快,以块为存储单位
  • 块大也可以最小化寻址开销
  • 抽象块概念好处
    • 支持大规模数据存储
    • 简化系统设计
    • 适合数据备份

HBase

和传统关系数据库的对比

HBase行操作,处理大型数据会方便

(1)数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式;HBase采用简单的数据模型,把数据存储为未经解释的字符串

(2)数据操作:关系数据库包含丰富的操作,涉及复杂的多表连接。HBase不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空;HBase在设计上避免复杂的表和表之间的关系

(3)存储模式:关系数据库:基于行模式存储。

(4)数据索引:关系数据库:可以针对不同列构建复杂的多个索引,以提高数据访问性能;

HBase只有一个行键索引,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来

(5)数据维护:关系数据库:更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后不会存在。

HBase中执行更新操作时,不会删除旧版本,而是生成一个新的版本

(6)可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。

HBase能轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

数据模型

行:每个HBase表都由若干个行组成,每个行由行键标识

列族:列族数据通过列限定符来定位

单元格:行和列确定的

image-20240411142446840

功能组件

两个组件

  • 一个Master主服务器,负责管理
  • 多个Region服务器,负责维护和分配给自己的Region

一个HBase表被划分成多个Region,一个Region会分类为多个新的Region

image-20240411142504300

image-20240411142509594

Region 的定位

元数据表META表,存储REgion和Region服务器映射关系

当HBase表很大,META表会分裂多个Region

根数据表,又名-ROOT-表,记录所有元数据的具体位置

-ROOT-表只有唯一一个Region

Zookeeper文件记录了-ROOT-表的位置

image-20240411142519563

内存大数据计算架构Spark

  • 快速、通用的开源大数据处理引擎
  • 与Hadoop平台类似,兼容

Spark RDD

特性:

  • 数据集合
  • 弹性分布
  • 可持久化
  • 分布式存储
  • 只读
  • 可重新计算

RDD转换操作

RDD****转换 含义
map(func) 通过函数func对数据集中的每个成员进行转换
filter(func) 通过函数func选择过滤数据集中的成员
flatMap(func) 和map转换类似,但函数func可以把单个成员转换为多个成员。
union(other) 返回当前集合与otherDataset集合的union操作
distinct 去掉集合中重复成员,使新的集合中成员各不相同
groupByKey 对键-值(key-value)对集合按照键(key)进行groupBy操作
sortByKey 对键-值(key-value)对集合进行排序
join(other) 对两个键-值(key-value)对集合:(K,V),(K,W)进行连接操作,形成新的键-值对集合:(K,(V,W))

RDD依赖关系:RDD转换生成新的RDD, 新的RDD依赖于旧的形成依赖关系

窄依赖:map rdd1一个只对一个rdd2

宽依赖:一个对多个