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'; --字段之间的分隔符 制表符

如果不写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;
  • load 命令
    本地指的是hive2所在服务器的本地,而不是客户端的本地
    从本地加载文件,本质是hdfs的put操作
LOAD DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE student_local;

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

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

Hive数据仓库开发

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python代码笔记230910

1.解释错误:TypeError: only integer scalar arrays can be converted to a scalar index 抱歉给出的解释有误。要返回列表中最小值的索引,可以使用index()方法。然而,当你尝试在列表中包含多个相同最小值时,index()方法可能会引…

JavaScript里面的二进制

概述 最近在做IOT设备配网开发的时候,处理了很多跟二进制、字节相关的事情,总结了一下JavaScript中有关二进制方面的一些知识点。 二进制和字节 首先,现代计算机是基于二进制的,从现代计算机电路来说,只有高电平/低电平…

Sql语句大全--查询

今天抽空整理下项目中的Sql语句* 项目中用到的Sql语句大全 Selcet 语句,有简有难 Selcet 语句,有简有难 基本的查询语句 select * from OLASCS.LLDC where CAPOLselect CATAX,CASU from OLASCS.LLDC where CAPOL IN (122345)SELECT EO,EANT, EAUS, sub…

TypeScript 中的 any、unknown、never 和 void

any any 表示 任意类型。 它是任意类型的父类,任意类型的值都可以赋予给 any 类型: // 编译不会报错 let anything: any 前端西瓜哥;let flag: boolean true; anything flag;anything { num: 2 };它可以表示任何类型,并使用它们的语法…

AIGC参数量节节攀升,对存储带来的挑战如何解决?

引言 近期,AIGC 相关产品如同雨后春笋一般不断涌现。但在技术层面,大家普遍的关注点更多集中在性能方面,却经常忽略了存储对推理和训练效率的影响,以及 AIGC 内容可能带来的合规风险。我们特邀腾讯云存储的产品负责人 崔剑老师和…

C++ QT qml 学习之 做个登录界面

最近在学习QT,也初探到qml 做ui 的灵活性与强大,于是手痒痒,做个demo 记录下学习成果 主要内容是如何自己编写一个按钮以及qml多窗口。 参考WX桌面版,做一个登录界面,这里面按钮是写的一个组合控件,有 按下,释放,以及正常 三种状态。 import QtQuick 2.0 import QtQ…

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…

【Linux】—— 在Linux上进行读写文件操作

前言&#xff1a; 在之前&#xff0c;我已经对进程的相关知识进行了详细的介绍。本期开始&#xff0c;我们将要学习的是关于 “基础I/O”的知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;C文件接口 &#xff08;二&#xff09;系统文件I/O 1、接…

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。 以下是BubbleUPnP的一些主要特点: 1. 支持Chromecast和转码…

android java读写yaml文件

目录 申请读写权限&#xff1a; build.gradle中添加库引用&#xff1a; android java读写yaml文件 java修改yaml文件 YamlFile&#xff1a; 修改yaml文件方法2 Yaml&#xff1a; 删除值&#xff1a; 申请读写权限&#xff1a; <uses-permission android:name"and…

WebGL 绘制矩形

上一节绘制了圆点&#xff0c;调用的绘制方法如下&#xff1a;gl.drawArrays(gl.POINTS, 0, 1); 第一个参数明显是个枚举类型&#xff0c;肯定还有其他值&#xff0c;如下所示&#xff1a; POINTS 可视的点LINES 单独线段LINE_STRIP 线条LINE_LOOP 闭合线条TRIANGLES 单独三…

计算机网络篇之域名

计算机网络篇之域名 介绍 一个域名是一个由点分割的字符串序列&#xff0c;用于标识一组IP地址或互联网上的计算机&#xff0c;域名用于在因特网上标识和定位特定的网站或服务 组成 域名由两个主要部分组成&#xff1a;顶级域和二级域&#xff0c;顶级域是域名的最高级别&a…

Codeforces Round 895 (Div. 3) (A~G)

A. Two Vessels 题意&#xff1a;你有两个无限容量杯子A,B&#xff0c;分别装了a&#xff0c;b升的水&#xff0c;此外你还有一个容量为c的杯子C&#xff0c;你可以将一杯的水先倒入C中&#xff0c;再倒入另一个杯子&#xff0c;问你最少需要操作几次能使得A B杯的水量相同。 …

【题解】2596. 检查骑士巡视方案

题解&#xff1a; class Solution {int n,m;bool st[100][100];int flag;int dx[8]{-1,-2,-2,-1,1,2,2,1};int dy[8]{-2,-1,1,2,2,1,-1,-2}; public:bool checkValidGrid(vector<vector<int>>& grid) {m grid.size();n grid[0].size();dfs(grid,0,0,0);ret…

运行时链接

基本概念 运行时链接&#xff0c;是在程序运行时&#xff08;而非编译时或加载时&#xff09;将程序代码与其依赖的库代码进行链接的过程。动态链接在程序启动时或实际运行过程中通过API函数完成。这种方式的主要优点是它允许程序在运行时加载和卸载不同的库模块&#xff0c;从…

在Python中解决自定义类型比较的问题

1 问题原因 在Python编程中&#xff0c;当我们尝试对自定义类型进行比较时&#xff0c;可能会遇到这样的错误&#xff1a;TypeError: < not supported between instances of User and User 这个错误的原因是Python不知道如何对你的自定义类型进行比较。为了解决这个问题&a…

redisson常用api

redisson提供了很多对象类型的api&#xff0c;下面介绍下一些常用的对象api。 RBucket 可操作任何对象的api&#xff0c;前提是要确定好泛型&#xff0c;方法比较少。大小限制为512Mb。 RBucket<AnyObject> bucket redisson.getBucket("anyObject");bucket…

vue3中的吸顶导航交互实现 | VueUse插件

目的&#xff1a;浏览器上下滚动时&#xff0c;若距离顶部的滚动距离大于78px&#xff0c;吸顶导航显示&#xff0c;小于78px隐藏。使用vueuse插件中的useScroll方法​​​​​​​和动态类名控制进行实现 1. 安装 npm i vueuse/core 2. 获得滚动距离 项目中导入&#xff0…

@Resource 注入为null 的解决方法

Resource Resource可以用于注入对象 一般我们在编码中都会使用Resource来注入一个实例对象&#xff0c;但是特殊情况下可能会是null。 这个时候可以用SpringUtil.getBean()来手动获取 代码示例 private HbaseProperties hbaseProperties SpringUtil.getBean(HbasePropertie…

在python程序中用windows的icon

这个exe的弹窗功能会使用到一个ico文件&#xff0c;如图&#xff1a; 用软件GreenfishIconEditorProPortable或者使用在线软件将你需要的图片制作成windows的icon 用程序将ico文件生成文本文件 import base64picture_name "logo.ico" open_pic open("%s…