【大数据之Hadoop】十七、MapReduce之数据清洗ETL

news2024/10/6 16:25:01

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将分散、零乱、标准不统一的数据整合到一起,为决策提供分析依据。

ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。

1 ETL体系结构

ETL主要是用来实现异构数据源数据集成的。多种数据源的所有原始数据大部分未作修改就被载人ETL。无论数据源在关系型数据库、非关系型数据库,还是外部文件,集成后的数据都将被置于数据库的数据表或数据仓库的维度表中,以便在数据库内或数据仓库中作进一步转换。即一般会将最终的数据存储到数据库或者数据仓库中。
在这里插入图片描述
数据源1和2均为数据库管理系统,可以使用SQL语句完成一部分数据清洗工作。

数据源为外部文件时,不能使用SQL语句进行数据清洗工作,只能直接从数据源中抽取出来,然后在数据转换的时候进行数据清洗的工作。

因此,数据仓库中的数据清洗工作主要还是在数据转换的时候进行。清洗好的数据将保存到目标数据库中,用于后续的数据分析、数据挖掘等。

抽取:
这个环节的主要抽取工具:Sqoop、Flume、Kafka、Kettle、DataX、Maxwell。抽取离线数据根据:Sqoop、DataX。抽取实时数据:Flume、Kafka、Maxwell、Kettle。

转换:
转换包括清洗、合并、拆分、加工等,可以用Hadoop生态的东西, MapReduce、Spark、Flink、Hive等对数据的清洗。

加载:
抽取转换之后,将数据加载到目标数据库。用Hbase去存储一些大数据方面的东西,或者HDFS等这些工具。

2 ETL正则匹配汇总

1、匹配中文:[\u4e00-\u9fa5]
 
2、英文字母:[a-zA-Z]
 
3、数字:[0-9]
 
4、匹配中文,英文字母和数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$
 同时判断输入长度:[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10}
 
5(?!*)  不能以_开头
(?!.*?*$)  不能以_结尾
[a-zA-Z0-9_\u4e00-\u9fa5]+  至少一个汉字、数字、字母、下划线
$  与字符串结束的地方匹配
 
6、只含有汉字、数字、字母、下划线,下划线位置不限:^[a-zA-Z0-9_\u4e00-\u9fa5]+$
 
7、由数字、26个英文字母或者下划线组成的字符串:^\w+$
 
82~4个汉字:"^[\u4E00-\u9FA5]{2,4}$";
 
9、最长不得超过7个汉字,或14个字节(数字,字母和下划线)正则表达式:
{1,7}$|^[\dA-Za-z_]{1,14}$
 
10、匹配双字节字符(包括汉字在内)[^x00-xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计111、匹配空白行的正则表达式:ns*r
评注:可以用来删除空白行
 
12、匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
 
13、匹配首尾空白字符的正则表达式:^s*|s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
 
14、匹配Email地址的正则表达式:
[\w.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w.-]*[a-zA-Z0-9].[a-zA-Z][a-zA-Z.]*[a-zA-Z]$
 
15、手机号:^((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\d{8}$
 
16、身份证:(^\d{15}$)|(^\d{17}([0-9]|X|x)$)
 
17、匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
 
18、匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
 
19、匹配国内电话号码:d{3}-d{8}|d{4}-d{7}
评注:匹配形式如 0511-4405222021-87888822
 
20、匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
 
21、匹配中国邮政编码:[1-9]d{5}(?!d)
评注:中国邮政编码为6位数字
 
22、匹配身份证:d{15}|d{18}
评注:中国的身份证为15位或1823、匹配ip地址:d+.d+.d+.d+
评注:提取ip地址时有用
 
24、匹配特定数字:

^[1-9]d*$ //匹配正整数
 
^-[1-9]d*$ //匹配负整数
 
^-?[1-9]d*$ //匹配整数
 
^[1-9]d*|0$ //匹配非负整数(正整数 + 0)
 
^-[1-9]d*|0$ //匹配非正整数(负整数 + 0)
 
^[1-9]d*.d*|0.d*[1-9]d*$ //匹配正浮点数
 
^-([1-9]d*.d*|0.d*[1-9]d*)$ //匹配负浮点数
 
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匹配浮点数
 
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$ //匹配非负浮点数(正浮点数 + 0)
 
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$ //匹配非正浮点数(负浮点数 + 0)
 
评注:处理大量数据时有用,具体应用时注意修正
 
25、匹配特定字符串:
 
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
 
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
 
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
 
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
 
^w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
 
26、
 
在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:
 
只能输入数字:“^[0-9]*$”
 
只能输入n位的数字:“^d{n}$”
 
只能输入至少n位数字:“^d{n,}$”
 
只能输入m-n位的数字:“^d{m,n}$”
 
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$”
 
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$”
 
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$”
 
只能输入非零的正整数:“^+?[1-9][0-9]*$”
 
只能输入非零的负整数:“^-[1-9][0-9]*$”
 
只能输入长度为3的字符:“^.{3}$”
 
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$”
 
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$”
 
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$”
 
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$”
 
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$”
 
验证用户密码:^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
 
只能包含字符、数字和下划线。
 
验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+”
 
只能输入汉字:“^[u4e00-u9fa5],{0,}$”
 
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
 
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
 
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
 
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01-09”和“1”“12”
 
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
 
正确格式为:“01”“09”和“1”“31”。
 
匹配中文字符的正则表达式: [u4e00-u9fa5]
 
匹配双字节字符(包括汉字在内)[^x00-xff]
 
匹配空行的正则表达式:n[s| ]*r

匹配HTML标记的正则表达式:/<(.*)>.*|<(.*) />/

匹配首尾空格的正则表达式:(^s*)|(s*$)

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

校验数字的表达式

只含数字:^[0-9]*$
 
n位的数字:^\d{n}$
 
至少n位的数字:^\d{n,}$
 
m-n位的数字:^\d{m,n}$
 
零和非零开头的数字:^(0|[1-9][0-9]*)$
 
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
 
带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
 
正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
 
有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
 
有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
 
非零的正整数:\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$
 
非零的负整数:^-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
 
非负整数:^\d+$ 或 ^[1-9]\d*|0$
 
非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
 
非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
 
非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
 
正浮点数:\d*.\d*|0.\d*[1-9]\d*$ 或 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$
 
负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ 或 ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$
 
浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$

校验字符的表达式

汉字:^[\u4e00-\u9fa5]{0,}$
 
英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
 
长度为3-20的所有字符:^.{3,20}$
 
由26个英文字母组成的字符串:^[A-Za-z]+$
 
由26个大写英文字母组成的字符串:^[A-Z]+$
 
由26个小写英文字母组成的字符串:^[a-z]+$
 
由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
 
由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
 
中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
 
中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
 
可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
 
禁止输入含有~的字符:[^~\x22]+

特殊需求表达式

Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*.\w+([-.]\w+)*$
 
SQL中Email的正则匹配:"^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$"
 
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
 
InternetURL[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
 
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
 
电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX"和"XXXXXXXX)^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
 
国内电话号码(0511-4405222021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
 
电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,14位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
 
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
 
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
 
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)^[a-zA-Z]\w{5,17}$
 
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
 
强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
 
日期格式:^\d{4}-\d{1,2}-\d{1,2}
 
一年的12个月(0109112)^(0?[1-9]|1[0-2])$
 
一个月的31(0109131)^((0?[1-9])|((1|2)[0-9])|30|31)$
 
钱的输入格式:
 
有四种钱的表示形式我们可以接受:"10000.00""10,000.00", 和没有 "分""10000""10,000"^[1-9][0-9]*$
 
这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
 
一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
 
这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
 
必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10""10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
 
这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
 
这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
 
13个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
 
备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
 
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
 
中文字符的正则表达式:[\u4e00-\u9fa5]
 
双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
 
空白行的正则表达式:\n\s*\r (可以用来删除空白行)
 
HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
 
腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
 
中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
 
IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

3 ETL例子

在运行核心业务MapReduce程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper程序,不需要运行Reduce程序。

需求:去除日志中字段个数小于等于11的日志。需要在Map阶段对输入的数据根据规则进行过滤清洗。

WebLogMapper类

package com.study.mapreduce.weblog;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Mapper;

public class WebLogMapper extendsMapper<LongWritable, Text, Text, NullWritable>{
    
    @Override
    protectedvoid map(LongWritable key, Text value, Context context) throws IOException,InterruptedException {
        
        //1 获取1行数据
        Stringline = value.toString();
        
        //2 解析日志
        booleanresult = parseLog(line,context);
        
        //3 日志不合法退出
        if(!result) {
           return;
        }
        
        //4 日志合法就直接写出
        context.write(value,NullWritable.get());
    }

    //2 封装解析日志的方法
    privateboolean parseLog(String line, Context context) {

        //1 截取
        String[]fields = line.split(" ");
        
        //2 日志长度大于11的为合法
        if(fields.length > 11) {
           returntrue;
        }else{
           returnfalse;
        }
    }
}

WebLogDriver类

package com.atguigu.mapreduce.weblog;
importorg.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WebLogDriver {
    publicstatic void main(String[] args) throws Exception {

        //1 获取job信息
        Configurationconf = new Configuration();
        Jobjob = Job.getInstance(conf);

        //2 加载jar包
        job.setJarByClass(LogDriver.class);

        //3 关联map
        job.setMapperClass(WebLogMapper.class);

        //4 设置最终输出类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);

        // 设置reducetask个数为0
        job.setNumReduceTasks(0);

        //5 设置输入和输出路径
        FileInputFormat.setInputPaths(job,new Path("D:\\loginput"));
        FileOutputFormat.setOutputPath(job,new Path("D:\\logoutput"));

        //6 提交
        boolean b =job.waitForCompletion(true);
        System.exit(b ? 0 : 1);
    }
}

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

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

相关文章

Python无框架分布式爬虫,爬取范例:拼多多商品详情数据,拼多多商品列表数据

拼多多是中国领先的社交电商平台之一&#xff0c;是一家以“团购折扣”为主要运营模式的电商平台。该平台上有海量的商品&#xff0c;对于商家和消费者来说都具有非常大的价值&#xff0c;因此&#xff0c;拼多多商品数据的采集技术非常重要。本文将介绍拼多多商品数据的采集技…

元宇宙资讯|消息称苹果 MR 头显发售要等到 2025 年

长期担任苹果分析师的吉恩・蒙斯特 (Gene Munster) 表示&#xff0c;尽管该公司可能永远不会使用“元宇宙”这个词&#xff0c;但苹果公司的混合现实耳机将是对元宇宙的认可。 深水资产管理公司 (Deepwater Asset Management) 的管理合伙人吉恩・蒙斯特 (Gene Munster) 在周三表…

【系统安全及应用2】

目录 一、开关机安全控制二、终端登录安全控制2.1、限制root只在安全终端登录2.2、如何限制虚拟终端2.3、禁止普通用户登录 三、系统弱口令检测3.1、Joth the Ripper&#xff0c;简称为 JR 四、网络端口扫描4.1、NMAP4.2、nmap的使用nmap的常用选项netstat常用选项 一、开关机安…

【C++初阶】C++入门(二):引用内联函数auto关键字范围for循环(C++11)指针空值nullptr

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C初阶】…

【pinia】新一代更好用的状态管理器Pinia

目录 一&#xff0c;Pinia状态管理库 1.Pinia介绍 2.Pinia的核心特性 3.核心概念 4.Pinia vs Vuex 5.Pinia & Vuex的不同 6.Pinia名字 二&#xff0c;Pinia基本使用 1.安装Pinia 2.配置main.ts文件 3.创建store/index.ts文件 4.使用数据 三&#xff0c;状态更新…

再获CSA大奖!顺丰科技腾讯安全iOA零信任联合方案获认可

随着千行百业数字化转型的加速&#xff0c;远程办公、业务协同、分支互联等需求涌现&#xff0c;传统的基于边界的网络安全防护理念难以有效抵挡层出不穷的威胁攻击&#xff0c;基于“无边界安全”理念的零信任技术模型逐渐成为企业关注的重点。 近日&#xff0c;第六届云安全…

千云物流 -车辆智能监控调度(一)-技术选型

技术选型 消息队列&#xff1a;rabbitMq 时序数据库&#xff1a; TDengine kv存储&#xff1a;redis 时序数据库 https://db-engines.com/en/ranking/timeseriesdbms 选择范围&#xff1a;Apache IoTDB&#xff0c;TDengine&#xff0c;OpenTSDB 对于存储车辆位置数据的时序数…

LabelImg安装记录

一 安装anaconda 安装conda主要是为了方便环境管理&#xff0c;避免软件版本冲突&#xff0c;安装简单&#xff0c;教程也很多&#xff0c;不做赘述 二 创建虚拟环境 在这里&#xff0c;我们创建一个专门用于标注数据的虚拟环境&#xff0c;取名为labelImg # 第一条命令c…

特斯拉 Tesla 热管理系统技术迭代分析(Model S/X/3/Y热管理系统介绍)

摘要&#xff1a; 特斯拉第三代热管理系统 为了更好地了解特斯拉的技术迭代以及集成度较高的热管理技术&#xff0c;今天我们针对特斯拉初代和第二代热管理系统做简单介绍。 特斯拉第一代热管理系统 系统架构原理图 第一代热管理系统应用在Model S和Model X上&#xff0c;共有…

4月14号软件资讯更新合集.....

PlayEdu v1.0-beta.2 版本发布&#xff0c;企业培训解决方案 PlayEdu 是基于 SpringBoot3 Java17 React18 开发的企业内部培训系统。它专注于提供私有化部署方案&#xff0c;包括视频&#xff0c;图片等资源的内网部署。目前主要支持有本地视频上传播放、学员邮箱登录、无限…

MIT6.824 Lecture18 Fork Consistency

Background 拜占庭问题&#xff08;Byzantine Generals Problem&#xff09;得名于一个古老的传说&#xff0c;讲述了拜占庭帝国在战争中的一个失败策略。在这个故事中&#xff0c;多名拜占庭将军要协调进攻或撤退的行动&#xff0c;但是其中一些将军可能会向其他帝国泄露假消…

在 Rocky linux 8.5 使用 Kubespray v2.21.0 离线部署 kubernetes v1.25.6 集群(草稿)

文章目录 前言创建7台虚拟机要求配置代理下载介质部署前准备安装部署工具配置 python venv配置部署容器 配置互信编写 inventory.ini创建 offline.yml部署 offline repokubespray v2.21.1 部署 kubernetes 失败报错1&#xff1a;Install packages requirements报错2&#xff1a…

各主流图床经历-尝试gitee,七牛云,smms,阿里云

目录 结论&#xff1a;都试过之后我还推荐用aliyun&#xff0c;反正不太贵 目的&#xff1a; 经历&#xff1a; typora用阿里云作图床的流程 结论&#xff1a;都试过之后我还推荐用aliyun&#xff0c;反正不太贵 目的&#xff1a; 想要让md文件中的本地相对链接转为网络图…

使用chatgpt一分钟帮你实现思维导图

前言 本篇基础篇课程&#xff0c;实操起来很简单&#xff0c;但却非常的实用。利用好这个功能&#xff0c;工作效率或能提升10倍&#xff01; 本篇内容的主题&#xff1a;利用ChatGPT&#xff0c;一分钟帮你实现详尽的思维导图。 创作内容大纲 格式转化 结合Xmind 创作内容…

2021地理设计组二等奖:城市三维空间格局对城市内涝的影响研究——以深圳市为例

作品简介 一、设计思想 内涝是指由于连续性降雨或强降雨导致城市地表径流超过地下管网排水能力从而引发的积水现象。内涝的发生会严重破坏城市基础服务设施&#xff08;如交通运输、通讯以及水、电、气的供应&#xff09;&#xff0c;甚至严重影响人民的财产和生命安全。为了降…

【Git基础】常用git命令(二)

文章目录 1. 合并commit为一个1.1 git commit --amend1.2 git rebase -i1.3 git reset1.4 示例 2. 修改commit的内容2.1 git commit --amend2.2 git rebase -i2.3 git cherry-pick2.4 git reflog和git reset 3. 查看commit内容3.1 git log3.2 git log --oneline3.3 git log -[l…

全网多种方法解决[rejected] master -> master (fetch first)的错误

文章目录 1. 复现错误2. 分析错误3. 解决错误4. 解决该错误的其他方法 1. 复现错误 今天使用git status查看文件状态&#xff0c;发现有一个文件未提交&#xff0c;如下代码所示&#xff1a; D:\project\test>git status On branch master Your branch is up to date with …

基于高德导航的大作业

绪 论 课题的建设背景 移动互联网 如今手机的发展非常迅速&#xff0c;手机越来越成为人们不可缺少的东西。手机从最初功能简单的功能机&#xff0c;发展到如今几乎无所不能的智能机&#xff0c;满足了人们的日常需求&#xff0c;手机不再是简单的通讯工具&#xff0c;还可以通…

Spring请求与响应——请求

Spring请求与响应——请求 请求映射路径RequestMapping() 请求参数GetGet发请求参数接收Get请求参数 POSTPOST发送参数 参数种类POJO类型参数数组类型类型参数集合类型参数时间参数演示 JSON数据传输参数发送请求接收请求集合参数与pojo参数演示 RequestBody与RequestParam区别…

手机信号不好?真不是套餐原因!4招教你搞定!

不少小伙伴跟搜卡之家小编抱怨手机信号突然不好&#xff0c;比如&#xff1a; 打着电话突然听不见对方的声音! 手机玩着玩着刷不出来页面和图片&#xff01; 手机信号满格但上不了网&#xff01; 这手机是不是坏了&#xff01; 其实这样的情况大部分都是因为手机信号的问题…