• Hadoop_02


    hadoop相比于传统文件系统的优点
    1.无限扩展
    2.传统文件元数据分布在不同的机器上难以寻找,通过将元数据统一存放在一个服务器上解决
    3.传统文件太大导致上传下载慢,通过分块并行上传到服务器解决
    4.副本机制数据不容易丢失,解决数据安全问题

    在这里插入图片描述
    rack代表机架
    namenode里面记录元数据
    namenode是主结点
    datanode是从结点
    hdfs中的文件是分块存储的
    namenode管理的元数据有两种类型
    1.文件自身属性信息
    2.文件块位置映射信息(文件位置)

    namespace命名空间
    由namenode来维护
    文件具体的各个block由datanode来管理

    namenode管理的内容
    1.文件系统元数据
    2.namespace树结构
    3.文件和块的位置信息
    4.访问权限
    所以namenode是唯一入口

    secondrynode 是namenode的辅助结点,帮助主角色进行元数据文件的合并
    datanode负责最终block块的创建
    datanode所在机器挂掉,namenode会安排其他的datanode进行副本复制

    pipeline管道的存在,充分利用了每一个机器的带宽,避免了网络瓶颈和高延时的连接
    管道传输后还会进行ack反向验证,是两两之间的验证,验证不成功上一台机器重新发送就可,全部验证成功则整体无问题

    默认副本存储策略
    1.第一个副本存在本地
    2.第二个存在不同机架
    3.第三个相同机架不同位置

    hdfs写数据流程
    1.客户端发送create命令给namenode
    2.namenode检查是否符合格式,检查通过返回输出流
    3.客户端写入输出流,并通过管道进行备份,并进行ack校验
    4.在写入时会将数据分为数据包,由namenode挑选出时候存储副本的datanode地址,默认3份,包括原数据
    5.客户端告知namenode写入完成,等该namenode确认(因为namenode已经知道将上传的文件放到哪3个datanode,所以只需要等最小复制块返回成功就是成功,在上传文件中,只要上传副本成功1个,那么就算成功)

    MapReduce思想
    map:拆分
    reduce:合并
    不可拆分或者相互间有依赖的数据无法完成计算
    核心:将数据分给多个服务器并行处理,最后将结果合并,这样可以充分利用服务器

    一个完整的MapReduce程序在运行时有三类:
    1.MrAppmaster:负责整个MR程序的过程调度和协调
    2.MapTask:负责map阶段的整个数据处理流程
    3.ReduceTask:负责reduce阶段的数据处理流程

    一个模型中只能有一个map阶段和一个reduce阶段
    整个MapReduce程序中,都是以键值对的形式存在的

    Map阶段执行过程
    1.逻辑切片,一个切片由一个maptask处理,默认128m一个切片,默认等于物理块的大小
    2.按行读取,key是行数偏移值,value是每一行的内容
    3.读取一个解析一个
    4.分区,默认不分区,分区数量等于reducetask数量
    5.map输出数据到内存缓冲区,满后spill溢出到磁盘,并根据key进行排序
    6.merge合并所有的溢出文件为一个文件
    Reduce阶段执行过程
    1.主动拉取自己要处理的数据
    2.将分散的数据合并再排序
    3.对键相对的键值对调用reduce方法进行合并,将最终结果输出到hdfs文件中

    Shuffle机制的原理
    从Map产生输出到reduce取得数据之前的过程称为shuffle机制
    Map端Shuffle

    1. Collect阶段
    2. Spill阶段
    3. Merge阶段

    Reduce端Shuffle

    1. Copy阶段
    2. Merge阶段
    3. Sort阶段

    机制弊端
    频繁涉及数据在内存和磁盘的多次往复

    Yarn
    一个通用的资源管理调度平台
    资源管理:集群的硬件资源,和程序运行相关,比如内存,cpu
    调度平台:多个程序同时申请计算资源如何分配,调度的规则,算法
    通用:不仅支持MapReduce,支持各种计算程序

    Yarn三大组件

    • ResourseManager(物理)最终仲裁者
    • NodeManager(物理)管理本机器的资源
    • ApplicationMaster(App层面)应用程序的老大,负责程序资源申请,监督程序运行
    • Client
    • Container

    Yarn总体分为两个阶段

    1. 客户端启动ApplicationMaster
    2. ApplicationMaster为他申请资源

    MapReduce提交到Yarn交互流程

    1. 用户通过客户端向Yarn中ResourseManager提交应用程序
    2. ResourseMaznager为这个应用程序分配container,并与NodeManager通信,在container内启动ApplicationMaster
    3. ApplicationMaster启动后,向ResourseMaznager注册
    4. ApplicationMaster开始申请资源
    5. ApplicationMaster申请到资源,向NodeManager通信,让他开启任务
    6. NodeManager配置环境并开启任务
    7. 向ApplicationMaster汇报任务
    8. ApplicationMaster向ResourseMaznager注销关闭自己

    调度器策略

    • 先进先出调度器(不适合共享)
    • 容量调度器(多个组织共享)
    • 公平调度器

    数据仓库
    用来存储,分析,报告的系统

    为什么不用普通数据库进行存储分析呢?

    1. 在正常运行的数据库上面进行分析会导致正常的业务处理缓慢
    2. 数据存储量不大,一般只存放几个月的数据
    3. 数据分散在不同系统不同的表中,字段类型属性不统一

    数据仓库主题

    • 面向主题
    • 集成
    • 时变
    • 非易失

    Hive
    hive是建立在hadoop之上的数据仓库系统,可以将hadoop文件中的结构化,半结构化程序映射为一张数据库表,提供了一种sql的查询语言
    hive核心是将HQL转化为MapReduce程序,然后提交到hadoop集群运行

    Hive组件

    • 客户端通过网络进行交互
    • 元数据存储,存储表的名字,列,分区,属性,表数据所在目录
    • 驱动程序,包括语法解析器,编译器,优化器,执行器
    • 执行引擎

    Hive安装部署

    • 元数据存储在关系型数据表中,如hive内置的Derby,或第三方的Mysql
    • 元数据服务用来管理元数据,对外暴露服务地址,由客户端连接元数据服务,再由元数据服务去连接mysql存取元数据

    元数据配置方式

    • 内嵌模式
    • 本地模式
    • 远程模式

    在这里插入图片描述

    新老客户端

    • Hive Cli (Hive第一代客户端,通过metastore来执行)
    • Beeline (Hive第二代客户端,通过hiveserver2来执行)
      hiveserver2需要依赖metastore来运行

    Hive sql

    • create database 命令,创建的数据库在hadoop中/user/hive/warehouse路径下在这里插入图片描述
    • use 命令可以切换数据库
    • drop database 命令可以删除数据库(默认数据库为空才能删除)
    • create table 命令可以创建表
      数据类型原生数据类型复杂数据类型
      分隔符指定语法只要是字段之间的分隔
    create table t_archer(
        id int comment 'ID编号',
        name string comment '英雄名称',
        hp_max int comment '最大生命',
        mp_max int comment '最大法力',
        attack_max int comment '最高物攻',
        defense_max int comment '最大物防',
        attack_range string comment '攻击范围',
        role_main string comment '主要定位',
        role_assist string comment '次要定位'
    )
    row format delimited
    fields terminated by '\t'; --字段之间的分隔符 制表符
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果不写fields terminated,默认的分隔符是\001

    • show databases 命令可以展示所有数据库
    • show tables [in database]命令可以展示当前数据库下所有表
    • desc formatted 命令用来显示表的元数据信息

    注释中文乱码解决
    在mysql修改元数据信息

    alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
    alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
    alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
    alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
    alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • load 命令
      本地指的是hive2所在服务器的本地,而不是客户端的本地
      从本地加载文件,本质是hdfs的put操作
    LOAD DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE student_local;
    
    • 1

    从hdfs加载文件,本质是hdfs的mv操作

    LOAD DATA INPATH '/students.txt' INTO TABLE student_HDFS;
    
    • 1
    • insert + select命令通常组合使用,insert命令要走mr,时间长,建议使用load命令
    • 内置函数和用户定义函数
      用户定义函数有:UDF,UDAF,UDTF
    • UDF 普通函数 一进一出
    • UDAF 聚合函数 多进一出
    • UDTF 表生成函数 一进多出

    Hive数据仓库开发

    1. 建库建表
    2. etl数据清洗
      在数据库中也可以进行格式转换,但是效率不高,不如直接将需要的值读入,所以需要数据清洗

    通常用create table as select来进行数据清洗

    FineBi是自助大数据分析的工具

  • 相关阅读:
    Vue3, setup语法糖、Composition API全方位解读
    【网络奇缘】- 计算机网络|网络类型|性能指标
    Redis 中的原子操作(1)-Redis 中命令的原子性
    PHP基础学习
    openGauss学习笔记-77 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT特性及价值
    Android 多线程并发详解
    2022 年安徽省职业院校技能大赛高职组“软件测试”赛项竞赛任务书
    Java多线程(6):锁与AQS(中)
    Dockerfile的常用指令和构建案例
    Gorm之gorm.io/gorm源码
  • 原文地址:https://blog.csdn.net/qq_26240741/article/details/132281849