当前位置: 首页 > article >正文

大数据HCIA笔记1

概述

当下主流的流计算使用Flink

Hadoop

Hadoop的核心组件:HDFS(分布式文件系统)、Yarn(资源调度)、MapReduce(批量计算引擎)

HDFS

HDFS -- Hadoop Distributed File System

HDFS核心进程(组件):NameNode,DataNode

NameNode:名称节点 主要存放元数据 eg文件的名称 路径 大小 副本数量 权限 所属用户等

DataNode:数据节点 存放数据本身 打开文件看到的内容

随着操作次数的增加,Editlog占用的存储空间会越来越大,为了保证元数据不丢失,Editlog和FsImage会定期合并

元数据既保存在内存中也在磁盘中 HDFS服务启动后会把磁盘中的元数据加载到内存中

200MB的文件,在HDFS中通过两个block块[抽象的块]保存。每个block都是128MB

第一个块:128MB

第二个块:也是128MB 虽然block显示128MB,其实只会占用真实大小,也就是72MB

硬盘容量1T,但是实际能用的没有这么多,block id、datanode都会占用存储空间

单节点容易出现单点故障,企业一般用HA(会用到zookeeper)

元数据持久化:为了保证内存的元数据不丢失,会定时将内存的元数据保存到磁盘对应路径

HDFS联邦(Federation):为了解决nn横向扩展能力 因为nn保存了很多元数据,但是nn的内存是有限的,为了能够存放更多的元数据,因此使用联邦机制

服务器数量更多,应用于超大规模的数据场景 各nn负责自己所属目录(与Linux挂载磁盘到目录类似),各nn间元数据不共享,每个nn都有对应的standby

对客户端来说无感知

HA和联邦的关系

数据副本机制:为了保证数据不丢失

数据很重要就多备份,但都备份到一个地方和没做一样(上图3个机架15台服务器)

上图反映的HDFS副本基本策略是:

第一个副本存放在与客户端最近的节点(服务器)

第二个副本存放在与客户端相邻机架的任意一个节点

第三个副本存放在与客户端相同机架的任意一个节点

其他的副本根据节点的容量任意存放

数据存储分为:集中式存储,分布式存储

集中式存储主要通过raid技术,保证数据安全性

分布式存储主要通过block块存储的方式保证数据安全性

一个文件200MB,由两个块组成,一个block128MB,另一个72MB(逻辑大小128),那么每一个块都会有4个副本

当设定文件的副本数量是4个时,假如有一个或多个副本出现损坏,HDFS能够定时监控到,并将缺失的副本数根据副本存放策略进行补充

HDFS通过distance来判断副本距离客户端的远近,为了能更快的访问到需要的数据,所以会判断距离,优先将距离近的数据提供给客户端

安全模式:两种情况会出现安全模式

第一种在HDFS启动时,元数据还没有加载到内存中,直到元数据大约有99.98%都成功加载到内存时,才会退出安全模式

第二种当datanode节点损坏数量变多

在linux操作系统上对HDFS的操作

HDFS dfs ..

Zookeeper

分布式协调服务

HA中组件多了两个进程:

JN:实时同步两个namenode元数据信息,保证元数据的一致性

ZKFC:实时监控active namenode状态,当发现active nn出现异常情况,就会将standby nn马上切换为active状态,对外提供服务

启动时选举出leader

容灾哪里:不挂一半就没什么问题(建议奇数台 奇偶数容灾能力一样)

HBase

列式数据库 实时响应速度毫秒级

HBase的元数据存储在HBase表中的元数据表(metadata meta表)

实时检索项目一般使用hbase 通过hbase和elasticsearch结合起来实现

行列 列族 行键

key是字典序 查找看key 可以存稀疏数据

插入的数据需要指定rowkey info(列族) name(列限定符)

HReginServer中的核心组件: HLog:预写日志WAL,所有写入hbase的数据都会写入hlog中

memStore:写入内存,hbase在写入数据时,会直接写入到内存,当数据写入到内存成功就会给客户端返回写入成功的信息

HRegin:用来保存hbase的数据

store:和列族有对应关系

storeFile(HFile):写入磁盘,将hbase数据写入磁盘,是为了数据持久化,当内存数据占比80%时,会自动启动flush操作,将内存的数据刷入磁盘,刷入成功后,会将hlog这部分的数据删除

zookeeper帮助选举出一个hmaster(管理用户对表的操作、实现不同hregionserver间的负载均衡、在region分裂或合并后负责重新调整region分布、对发生故障失效的hrs上的r进行迁移)作为集群的总管,并保证在任何时刻总有唯一一个hmaster在运行,这就避免了hmaster的‘单点失效’问题

hregionserver是hbase最核心的模块,负责存储、维护hregion,处理来自client的读写请求

按行键索引,搜索很快

拆分策略默认c.. 单region上限10G

热点region(行键的设置策略):

Hive

数据分析(数仓)

HDFS分布式文件系统 用于海量数据的存放

HBase列式数据库(no sql)解决了HDFS读写数据较慢的缺点,支持毫秒级别的读写

而Hive作为数据仓库,仍然依赖于Hadoop组件,主要作用是数据分析

HDFS中的数据,程序员通过Java编程,编写MapReduce程序进行数据分析,但会编程的工程师占比不高,会sql的相对较高

hive与hadoop之间的关系

hive的元数据与数据是解耦合的,元数据和数据不在一个地方存放

hive的元数据默认保存在derby数据库,derby是一个轻量型的数据库,小到同时只允许一个客服端登录,不适合生产环境,所以使用其他关系型数据库代替derby保存元数据

通常使用MySQL作为hive存放元数据的数据库,hive的元数据有表名,表中数据存放的路径等

Hive内部表与外部表的区别:

内部表:在创建时 是create table

在删除表时,表结构和表中数据都会被清除

外部表:在创建时 时create external table

在删除表时,只会删除表结构,表中数据仍然存在

在加载原始数据时,都会使用外部表 在加载原始数据时使用外部表可以保护数据的完整性和安全性,并提高数据处理的效率

在进行数据分析时,一般使用内部表 在进行数据分析时使用内部表则可以提供更便捷的数据操作、更强的事务支持和更高的数据完整性保障

数仓分层:ODS(original)原始数据层(读取ODS层数据用的都是外部表),DWD(wish)数据清洗层,DWS(server)轻度汇总层,ADS(analysis server)高度汇总层(需求分析 年度 季度汇总 用内部表)

SQL语句分类:

DDL语句 对表,数据库本身的CRUD

DML语句 数据导入导出,将数据导入表中,或将表中的数据导出到HDFS或local

DQL语句 数据查询,select、where、join、group by having、order by、row number()、union等

DCL语句 与授权、安全相关语句,grant、revoke等

Spark

(在华为上只支持spark on Yarn)

现在的项目比较少用MapReduce了,多用Spark处理离线,用Flink处理实时(Flink流批一体)

spark(原生语言scale 执行效率最快)是一种基于内存的快速、通用、可扩展的大数据计算引擎(MapReduce基于磁盘)

目前用的比较多的是批处理(RDD弹性分布式数据集 并行只读),交互式查询(SQL、DataFrames、Datasets)

spark打造了一站式解决平台,包含了 批处理、实时处理、图处理、机器学习

批处理 spark core,它的核心概念就是RDD,RDD是不可变的,能够平行计算,因此比常量的效率高。要进行数据分析时,都需要先将数据转换成RDD,spark实现了一些方式 将数据转换为rdd,eg通过txtfile可以将hadoop读取的数据转换为rdd,可以将数组array、列表list、元组tuple、集合collection转换为rdd进行计算

实时处理,以前是spark streaming,现在是被structured streaming替代,因为spark streaming的实时设计理念是批处理,效率不高,已经停止运维

图计算,spark用于图和图并行计算的一个新组件 在高层次上,GraphX通过引入一个新的图抽象扩展spark rdd(一个有向多图 有向多图是指一个图中可以包含多个方向相同的边,即从同一个起点到同一个终点可以有多条边。这种图在描述某些复杂关系时非常有用,比如社交网络中的朋友关系、交通网络中的路线等),其属性附加到每个顶点和边上

交互式查询spark sql,通过sql形式进行计算和分析,类似于Hive;能够连接Hive或者HBase,直接读取它们的数据,进行计算 核心是DataFrames

MLlib是spark的机器学习库,目标是使机器学习具有可扩展性和简单性,在高层次上提供了算法库、特征化、pipeline、持久性和实用程序等工具

daytona gray 软件排序基准规则

spark比mr快的原因:

spark基于内存存放数据,比磁盘快

spark的数据都在rdd,rdd是只读、并行的 数据不可变 效率会提升

血统机制 rdd之间有依赖机制 当某个rd出现故障,并不需要从头对这个rdd进行计算,只需要从上一个rdd开始计算即可

spark任务在执行前,会划分stage,相当于提前做规划,知道哪些部分可以同时执行,哪些部分需要串行执行 并行的部分会提高效率(涉及宽窄依赖)

stage的划分:

窄依赖:一对一

宽依赖:一对多

ClickHouse


http://www.kler.cn/a/417976.html

相关文章:

  • MySQL 核心基础 | Pandaer杂货铺
  • Java有关数组的相关问题
  • JVM 性能调优 -- JVM常用调优工具【jps、jstack、jmap、jstats 命令】
  • 基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)
  • Observability:如何在 Kubernetes pod 中轻松添加应用程序监控
  • yolo辅助我们健身锻炼
  • Android11修改摄像头前后置方法,触觉智能RK3568开发板演示
  • redis 底层数据结构
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第12篇:YOLOv9——可编程梯度信息(PGI)+广义高效层聚合网络(GELAN)】
  • Rust学习笔记_02——数组
  • 可视化大屏系统如何实现3D数据导入与Web交互?
  • SpringAi整合大模型(进阶版)
  • MyBatis-Plus - 查询解析数据异常处理
  • Linux内核机制自学笔记
  • spring-boot自定义ApplicationListener及源码分析
  • SVN迁移至Git,保留commit提交记录
  • 使用Spring Data MongoDB中的MongoTemplate实现分组查询最新的数据
  • 设计模式---建造者模式
  • 迅为RK3588开发板Android12源码定制开发-安装adb驱动
  • 飙升Vue.js组件开发
  • Flutter 1.1:下载Flutter环境
  • 一个鸿蒙开发者的探索:实现相册访问功能
  • Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)
  • 前端css实例
  • 【04】Selenium+Python 手动添加Cookie免登录(实例)
  • 何时在 SQL 中使用 CHAR、VARCHAR 和 VARCHAR(MAX)