实训笔记7.19

实训笔记7.19

  • 7.19
    • 一、座右铭
    • 二、Hadoop的HDFS分布式文件存储系统的相关原理性内容
      • 2.1 HDFS上传数据的流程
      • 2.2 HDFS下载数据的流程
      • 2.3 HDFS中NameNode和SecondaryNameNode工作机制(涉及到HDFS的元数据管理操作)
      • 2.4 HDFS中NameNode和DataNode的工作机制(涉及到HDFS的集群管理操作)
    • 三、Hadoop的新的从节点服役和旧的从节点退役(HDFS-DataNode、YARN-NodeManager)--HDFS、YARN的运行中的操作
    • 四、Hadoop的MapReduce分布式计算框架
      • 4.1 基本概念
        • 4.1.1 MapReduce的分布式计算思想
        • 4.1.2 MapReduce运行过程中相关的一些进程
        • 4.1.3 MapReduce编程规范
      • 4.2 MapReduce的工作流程原理(简单版本)
      • 4.3 MapReduce的中序列化机制问题
      • 4.4 MR程序运行的核心阶段的细节性知识
        • 4.4.1 MR程序在运行过程中,涉及到的阶段和作用:
        • 4.4.2 MR程序运行的的第一个阶段:InputFormat阶段
    • 五、MR程序运行的问题总结
    • 六、代码示例

7.19

一、座右铭

我的故事你说,我的文字我落,我值几两你定,我去何方我挑。

二、Hadoop的HDFS分布式文件存储系统的相关原理性内容

2.1 HDFS上传数据的流程

2.2 HDFS下载数据的流程

2.1~2.2:客户端Client 主节点NameNode 从节点DataNode

2.3 HDFS中NameNode和SecondaryNameNode工作机制(涉及到HDFS的元数据管理操作)

  1. 一个概念和两个文件:元数据、edits编辑日志文件、fsimage镜像文件(元数据的持久点检查文件)
  2. SNN的检查点机制:每间隔一段时间或者记录数到达一定的数量,HDFS就会把edits文件和fsimage文件合并
  3. NameNode如果元数据丢失的恢复机制
    1. 把SNN的拷贝过来的edits文件和fismage文件复制到NN的所在目录下(可能会造成元数据的丢失)
    2. 设置NameNode的多目录存储(可以百分百恢复元数据,但是多目录只能在同一个节点上配置)
    3. 使用HA高可用安装模式
  4. HDFS的集群安全模式的问题
    1. HDFS启动之后到能正常对外提供访问的这一段时间成为集群的安全模式
    2. 元数据加载成功,同时整个HDFS集群99.9%的block数据块满足最小备份数的时候

2.4 HDFS中NameNode和DataNode的工作机制(涉及到HDFS的集群管理操作)

  1. DataNode存储的block数据块除了包含数据本身以外,还包含数据块的校验和(保证block块的完整性的)。。。
  2. NameNode和DataNode的心跳机制 每隔3秒
  3. NameNode认为DataNode死亡的掉线时限时长:2*掉线的检测时间(5分钟)+10*心跳时间

三、Hadoop的新的从节点服役和旧的从节点退役(HDFS-DataNode、YARN-NodeManager)–HDFS、YARN的运行中的操作

  1. 新节点的服役:dfs.hosts

  2. 旧节点的退役:dfs.hosts.exclude|

退役的时候,HDFS会把退役节点上的block块迁移到没有退役的节点上

四、Hadoop的MapReduce分布式计算框架

4.1 基本概念

4.1.1 MapReduce的分布式计算思想

  1. Mapper阶段
    1. mapper阶段是用来分数据的
    2. Mapper阶段处理数据之前,数据文件会按照指定的规则划分为不同的切片(数据块),然后Mapper阶段启动多个MapTask去处理每一个切片的数据 MapTask的数量是自动确定的,是和切片的数量一一对应的
  2. Reducer阶段
    1. Reducer阶段是用来合数据的
    2. Reducer阶段是Mapper阶段之后执行的,处理的数据是Mapper处理完成的数据,Reducer会启动多个ReduceTask,每一个ReduceTask负责处理Mapper阶段输出的一部分数据 ReduceTask的数量不是自动确定的,而是我们手动指定,一般ReduceTask的数量在手动指定的时候需要和分区数保持一致

4.1.2 MapReduce运行过程中相关的一些进程

  1. MRAPPMaster
  2. MapTask
  3. ReduceTask

4.1.3 MapReduce编程规范

  1. 编写Mapper阶段的计算逻辑:MapTask的计算逻辑
  2. 编写Reduce阶段的计算逻辑:ReduceTask的计算逻辑
  3. 编写Driver驱动程序:整合MR程序,输入路径、Mapper阶段、Reducer阶段、输出路径

4.2 MapReduce的工作流程原理(简单版本)

在这里插入图片描述

4.3 MapReduce的中序列化机制问题

  1. MR程序的Map阶段和Reduce阶段都是要求输入的数据和输出的数据必须得是key-value键值对类型的数据,而且key-value必须得是序列化类型的数据
    1. 序列化:将Java中的某种数据类型转成二进制数据
    2. 反序列化:将二进制数据转换成某种数据类型
  2. MR程序之所以要求输入和输出的数据是K-V类型的,是因为MR程序是一个分布式计算程序,MR程序可以在多个节点上同时运行的,而且多个计算程序计算出来的结果可能跨节点,跨网络进行数据传输的。如果数据要跨节点跨网络传输,要求数据必须是二进制数据。
  3. Hadoop在进行Key-Value的序列化的时候,没有采用Java的序列化机制(Serializable、Externalizable),因为Java的序列化机制非常的笨重的,因此Hadoop基于Java的序列化机制方式提供了一种全新的专门适用于MR程序的轻量级的序列化机制。
  4. Hadoop中提供了两个接口:Writable、WritableComparable,Hadoop提供的两个序列化机制
    1. Writable
      1. 只有序列化和反序列化的效果,如果我们自定义的一个数据类型(Java类)要想当MR程序的K-V使用的话,Java必须实现Writable接口,重写两个方法,通过这两个方法规定序列化和反序列化的内容
      2. Writable的使用方式类似于Java中Externalizable序列化机制
    2. WritableComparable
      1. 接口除了具备序列化和反序列化的能力以外,还具备一个比较大小关系的方法
      2. 如果自定义的数据类型(Java类),想当MR程序中的key值来使用,必须实现此接口,让自定义数据类型既可以进行序列化反序列化还可以进行大小的比较判断 如果自定义的数据类型只想当作MR程序中的value来使用,只需要实现Writable接口即可,不需要比较大小。
  5. Hadoop常见的序列化类型(Hadoop把Java中包装类和String类型已经给我们封装好了对应的Hadoop序列化类型)—实现了WritableComparable接口
类型方法名
booleanBooleanWritable
byteByteWritable
intIntWritable
floatFloatWritable
longLongWritable
doubleDoubleWritable
stringText
mapMapWritable
arrayArrayWritable
  • 【注意】 1、如果以后MR程序运行没有报错,但是输出目录没有任何的内容,一般可能是因为输入和输出的key-value的自定义类型没有实现序列化 2、如果自定义的JavaBean充当Reducer阶段输出key-value时,最好把toString方法给重写了,否则Reducer最后输出的结果是JavaBean的地址值

4.4 MR程序运行的核心阶段的细节性知识

4.4.1 MR程序在运行过程中,涉及到的阶段和作用:

  1. InputFormat阶段:两个作用
    1. 负责对输入的数据进行切片,切片的数据和Mapper阶段的MapTask的数量是相对应的
    2. 负责MapTask读取切片数据时,如果将切片的数据转换成为Key-value类型的数据,包括key-value的数据类型的定义
  2. Mapper阶段——作用处理每一个切片数据的计算逻辑
  3. Partitioner阶段——map阶段处理完成的数据输出到缓冲区溢写磁盘的时候必须进行分区
  4. Combiner阶段:可以存在可以不存在——相当于是一个Reducer,只不过这个reducer是针对于当前的MapTask有效
  5. Reducer阶段———作用就是用来聚合所有MapTask的数据,聚合起来之后计算逻辑的编写
  6. OutputFormat阶段———作用就是Reducer阶段输出的数据如何以key-value的形式输出到最终的目的地

4.4.2 MR程序运行的的第一个阶段:InputFormat阶段

  1. InputFormat是一个抽象类,提供了两个抽象方法

    1. getSplits:这个方法是用来进行输入数据文件的切片计算的
    2. createRecordReader:这个方法是MapTask读取切片数据时,是按照行读取还是按照其他规则读取,包括读取时key-value分别代表什么含义,什么类型
  2. 常用的InputFormat的实现类:

    1. FileInputFormat(是InputFormat的默认实现类)FileInputFormat是专门用来读取文件数据时使用的输入格式化类,但是FileInputFormat也是一个抽象类

    2. FileInputFormat抽象类有五个常用的非抽象子类

      1. TextInputFormat(是FileInputFormat默认实现类)

        1. 如何切片

          1. 两个核心参数:MinSplitSize=1LMaxSplitSize=Long.MAX_VALUE

            confguration("mapreduce.input.fileinputformat.split.minsize",xxxL)

            configuration("mapreduce.input.fileinputformat.split.maxsize",xxxL)

          2. 每一个输入文件单独进行切片

          3. 每一个文件先获取它的blockSize,然后计算文件的切片大小splitSize=Math.max(minSize, Math.min(maxSize, blockSize))

          4. 先判断文件是否能被切片,如果文件是一个压缩包(.gz、.zip),单独成为一个切片,如果文件能被切片,判断文件的长度是否大于splitSize的1.1倍,如果不大于 文件单独成为一个切片,如果大于1.1倍,按照splitsize切一片,然后将剩余的大小和splitsize继续比较

          5. 示例

            1. 第一种情况: a.tar.gz 300M blocksize 128M 有一个数据切片300M
            2. 第二种情况:blocksize均为128M a.txt 200M 两个切片:一个切片128M 第二个切片72M b.txt 130M 一个切片:130M
          6. 【注意】

            TextInputFormat是按照SplitSize进行切片的,默认情况下SplitSize=文件的BlockSize

            如果你要让SplitSize大于blockSize,那么我们需要在MR程序调整minsize的大小即可

            如果你要让SplitSize小于BlockSize 那么需要MR程序调整maxSize的大小即可

        2. 如何读取数据成为key-value

      2. KeyValueTextInputFormat

      3. NLineInputFormat

      4. CombineInputFormat

      5. SequenceFileInputFormat

  3. 如何自定义InputFormat实现类

五、MR程序运行的问题总结

  1. MR程序运行需要在控制台输出日志,MR程序控制台输出的日志能清洗看到MR程序切片数量以及MapTask的数量和ReduceTask的数量 但是默认情况下控制台是无法输出日志的,如果要输出日志信息,我们需要对代码进行修改

    1. 需要在项目的resources目录引入log4j.properties文件 日志信息输出文件,文件当中定义了我们如何输出日志信息

    2. 引入一个日志框架的依赖,如果没有这个依赖,那么日志文件不会生效输出 pom.xml

      <dependency>      
          <groupId>org.slf4j</groupId>     
          <artifactId>slf4j-log4j12</artifactId>      <version>1.7.21</version>    
      </dependency>
      

六、代码示例

package com.sxuek.flow;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Objects;

/**
 * JavaBean:是Java中一种很干净的类,类中只具备私有化的属性、构造器、getter setter方法  hashCode equals方法 toString方法
 * 实体类:实体类又是一种特殊的JavaBean,当JavaBean是和数据库中数据表对应的类的时候,JavaBean称之为实体类
 *
 * JavaBean可以自己手动生成也可以使用lombok的技术基于注解快速的创建JavaBean这个类
 *    Lombok使用要慎重,Lombok对代码的侵占性是非常大的
 *
 * 如果自定义的JavaBean要当MR程序的输入和输出的KV值,最好让JavaBean存在一个无参构造器(MR程序底层反射构建这个类的对象)
 * 如果自定义的JavaBean要充当Reducer阶段的KEY和Value,那也就意味着JavaBean的结果要写到最终的结果文件当中,JavaBean的数据往结果文件写的格式是按照
 * JavaBean的toString方法去写的。
 */
public class FlowBean implements Writable {
//public class FlowBean {
    private Long upFlow;//上行流量
    private Long downFlow; //下行流量
    private Long sumFlow; //总流量

    public FlowBean() {

    }

    public FlowBean(Long upFlow, Long downFlow, Long sumFlow) {
        this.upFlow = upFlow;
        this.downFlow = downFlow;
        this.sumFlow = sumFlow;
    }

    public Long getUpFlow() {
        return upFlow;
    }

    public void setUpFlow(Long upFlow) {
        this.upFlow = upFlow;
    }

    public Long getDownFlow() {
        return downFlow;
    }

    public void setDownFlow(Long downFlow) {
        this.downFlow = downFlow;
    }

    public Long getSumFlow() {
        return sumFlow;
    }

    public void setSumFlow(Long sumFlow) {
        this.sumFlow = sumFlow;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        FlowBean flowBean = (FlowBean) o;
        return Objects.equals(upFlow, flowBean.upFlow) && Objects.equals(downFlow, flowBean.downFlow) && Objects.equals(sumFlow, flowBean.sumFlow);
    }

    @Override
    public int hashCode() {
        return Objects.hash(upFlow, downFlow, sumFlow);
    }

    @Override
    public String toString() {
        return upFlow+"\t"+downFlow+"\t"+sumFlow;
    }

    /**
     * 序列化写的方法
     * @param out <code>DataOuput</code> to serialize this object into.
     * @throws IOException
     */
    @Override
    public void write(DataOutput out) throws IOException {
        out.writeLong(upFlow);
        out.writeLong(downFlow);
        out.writeLong(sumFlow);
    }

    /**
     * 反序列化读取数据的方法
     * @param in <code>DataInput</code> to deseriablize this object from.
     * @throws IOException
     */
    @Override
    public void readFields(DataInput in) throws IOException {
        upFlow = in.readLong();
        downFlow = in.readLong();
        sumFlow = in.readLong();
    }
}

package com.sxuek.flow;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

/**
 * 现在有一个文件 phone_data.txt,文件中记录着手机号消耗的流量信息
 * 文件中每一行数据代表一条手机的流量消耗,每一条数据是以\t制表符分割的多个字段组成的
 * 使用MR程序统计每一个手机号消耗的总的上行流量、总的下行流量、总流量
 */
public class FlowDriver {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException, URISyntaxException {
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS","hdfs://192.168.68.101:9000");
//        configuration.set("mapreduce.input.fileinputformat.split.minsize",150*1024*1024+"");
        //maxsize  100M  minsize  1L  blocksize 128M
        configuration.set("mapreduce.input.fileinputformat.split.maxsize",100*1024*1024+"");

        Job job = Job.getInstance(configuration);

        /**
         * MR程序封装的时候,按道理需要指定InputFormat类,只有指定了这个实现类,才能实现切片和kv数据的读取
         * 但是MR程序有个机制,如果没有指定InputFormat的实现类,默认就会实现FileInputFormat的一个实现子类TextInputFormat当作默认的切片机制
         * 和KV数据读取的InputFormat类
         */
//        job.setInputFormatClass(TextInputFormat.class);
        //封装输入的文件路径 输入路径可以是一个 也可以是多个 输入路径可以是文件也可以是文件夹
        /**
         * 默认切片机制 每一个文件单独切片  n个文件 最小有n个文件
         * splitSize 100M
         * 文件能否被切割、文件的大小是否大于splitsize的1.1倍
         * 300M   100M  100M  100M
         * 120M   100M   20M
         */
        FileInputFormat.setInputPaths(job,new Path("/test1"));

        //封装Mapper阶段
        job.setMapperClass(FlowMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(FlowBean.class);

        //封装Reducer阶段
        job.setReducerClass(FlowReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(FlowBean.class);
        job.setNumReduceTasks(1);

        //封装输出结果路径
        //MR程序要求输出路径不能提前存在 如果提前存在会报错
        Path path = new Path("/output");
        //是用来解决输出目录如果存在MR程序报错问题的
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.68.101:9000"), configuration, "root");
        if (fs.exists(path)){
            fs.delete(path,true);
        }
        FileOutputFormat.setOutputPath(job,path);

        //最后提交程序运行即可
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}

package com.sxuek.flow;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * 读取切片数据,一行数据读取一次 而且读取的key value  LongWritable  Text
 * 输出的key value 是Text  FlowBean
 *
 */
public class FlowMapper extends Mapper<LongWritable, Text,Text,FlowBean> {
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, FlowBean>.Context context) throws IOException, InterruptedException {
        String line = value.toString();
        String[] array = line.split("\t");
        String phoneNumber = array[1];
        Long upFlow = Long.parseLong(array[array.length - 3]);
        Long downFlow = Long.parseLong(array[array.length - 2]);
        FlowBean flowBean = new FlowBean(upFlow,downFlow,upFlow+downFlow);
        //需要将这一条数据以手机号为key  以flowbean为value输出给reduce
        context.write(new Text(phoneNumber),flowBean);
    }
}

package com.sxuek.flow;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class FlowReducer extends Reducer<Text,FlowBean,Text,FlowBean> {
    @Override
    protected void reduce(Text key, Iterable<FlowBean> values, Reducer<Text, FlowBean, Text, FlowBean>.Context context) throws IOException, InterruptedException {
        //计算手机号消耗的总的上行 下行 总流量  values中每一条流量的上 下 总累加起来即可
        long upFlowSum = 0L;
        long downFlowSum = 0L;
        long sumFlowSum = 0L;
        for (FlowBean value : values) {
            upFlowSum += value.getUpFlow();
            downFlowSum += value.getDownFlow();
            sumFlowSum += value.getSumFlow();
        }
        //需要以手机号为key  以flowbean为value将结果输出,flowbean需要将我们计算出来总流量信息封装起来
        FlowBean flowBean = new FlowBean(upFlowSum,downFlowSum,sumFlowSum);
        context.write(key,flowBean);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CVE-2023-1454注入分析复现

简介 JeecgBoot的代码生成器是一种可以帮助开发者快速构建企业级应用的工具&#xff0c;它可以通过一键生成前后端代码&#xff0c;无需写任何代码&#xff0c;让开发者更多关注业务逻辑。 影响版本 Jeecg-Boot<3.5.1 环境搭建 idea 后端源码&#xff1a; https://git…

opencv -12 图像运算之按 《位或》 运算(图像融合图像修复和去除)

位或运算 或运算的规则是&#xff0c;当参与或运算的两个逻辑值中有一个为真时&#xff0c;结果就为真。其逻辑关系可以类比为如图 所示的并联电路&#xff0c;两个开关中只要有任意一个闭合时&#xff0c;灯就会亮。 3-5 对参与或运算的算子的不同情况进行了说明&#xff0c;…

050、事务设计之Percolator事务模型

Percolator 背景 Bigtable: 大表打散每行到各个节点&#xff0c;每一行作为一个kv。解决的问题 一个事务涉及的行在多个节点&#xff0c;如何用单行对一个事务进行控制&#xff0c;实现原子性。 快照隔离级别&#xff08;snapshot &#xff09; 白色点&#xff1a;代表事务开始…

Spring:Bean生命周期

Bean 生命周期生命周期 Bean 生命周期是 bean 对象从创建到销毁的整个过程。 简单的 Bean 生命周期的过程: 1.实例化(调用构造方法对 bean 进行实例化) 2.依赖注入(调用 set 方法对 bean 进行赋值) 3.初始化(手动配置 xml 文件中 bean 标签的 init-method 属性值,来指…

C语言小项目——通讯录高阶(文件管理版)

通讯录初阶: 点这里 通讯录中阶: 点这里 文件管理版本改进之处通讯录初始化退出通讯录并保存 完整代码contact.hcontact.ctest.c 文件管理版本改进之处 通讯录初始化 contact.c 退出通讯录并保存 test.c contact.c contact.h 完整代码 contact.h #pragma once#include&l…

Android应用启动全流程分析(源码深度剖析)

作者&#xff1a;努比亚技术团队 源码来源&#xff1a;努比亚技术团队 1.前言 从用户手指点击桌面上的应用图标到屏幕上显示出应用主Activity界面而完成应用启动&#xff0c;快的话往往都不需要一秒钟&#xff0c;但是这整个过程却是十分复杂的&#xff0c;其中涉及了Android系…

【Win10系统下载Python3】

Python3官网&#xff1a;https://www.python.org/downloads/windows/ 注

基于springboot的微信小程序宠物领养医院系统(源代码+数据库+10000字论文)085

基于springboot的微信小程序宠物领养医院系统(源代码数据库10000字论文)085 一、系统介绍 本项目有网页版和小程序端 本系统分为管理员、医生、用户三种角色 用户角色包含以下功能&#xff1a; 登录、注册、宠物领养、医生在线咨询、查看挂号、个人中心、密码修改、宠物寄…

线性表的链式存储结构以及顺序表和链表的比较

2.2线性表的链式存储结构 **链式存储结构&#xff1a;**结点在存储器中的位置是任意的&#xff0c;即逻辑上相邻的数据元素在物理上不一定相邻。 线性表的链式表示又称为非顺序映像或链式映像 这组存储单元既可以是连续的&#xff0c;也可以是不连续的&#xff0c;甚至是零散…

Python机器学习、数据统计分析在医疗中的应用

Python机器学习在医疗诊断领域的应用 随着人工智能技术的不断发展&#xff0c;机器学习已经在医疗领域的诊断治疗、预防等方面展现出强大的潜力。Python 作为一种广泛应用于机器学习的语言&#xff0c;在医疗领域也已经被广泛使用。本文将探讨 Python 机器学习在医疗领域的应用…

apache ozone详细介绍

Ozone是哪路神 Apache Ozone https://github.com/apache/ozone Ozone是Apache软件基金会下的一个项目&#xff0c;其定位是&#xff1a;一个用户大数据分析和云原生应用、具有高扩展性、强一致性的分布式Key-Value对象存储。 HDFS是业界默认的大数据存储系统&#xff0c;在业…

零钱兑换 II(力扣)动态规划 JAVA

给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例…

git下载源码及环境搭建之前端(三)

学习目标&#xff1a; vue 新项目的 前端环境搭建 vue 项目在 使用 Visual Studio Code 开发前端项目环境的搭建及 相关文件的配置 操作步骤&#xff1a; 前端&#xff1a; 下图所示为开发时前端所用的编辑器 注意&#xff1a;在配置时 有时候 localhost 可能 不太好用&…

AN OVERVIEW OF LANGUAGE MODELS RECENT DEVELOPMENTS AND OUTLOOK

LLM系列相关文章&#xff0c;针对《AN OVERVIEW OF LANGUAGE MODELS: RECENT DEVELOPMENTS AND OUTLOOK》的翻译。 语言模型综述&#xff1a;近年来的发展与展望 摘要1 引言2 语言模型的类型2.1 结构化LM2.2 双向LM2.3 置换LM 3 语言单元3.1 字符3.2 单词和子单词3.2.1 基于统…

JVM——类加载和垃圾回收

目录 前言 JVM简介 JVM内存区域划分 JVM的类加载机制 1.加载 双亲委派模型 2.验证 验证选项 3.准备 4.解析 5.初始化 触发类加载 JVM的垃圾回收策略 GC 一&#xff1a;找 谁是垃圾 1.引用计数 2.可达性分析 &#xff08;这个方案是Java采取的方案&#x…

金融数据库的战场,太平洋保险和OceanBase打了场胜仗

点击关注 文丨刘雨琦 “数据库的国产替代&#xff0c;必须经过严格的考虑&#xff0c;保证不会出错&#xff0c;所以大多数企业的领导层选择按兵不动或者简单扩容。因为不换就不会错&#xff0c;选了很久如果选错&#xff0c;还可能会出现重大事故。” 某银行数据库技术人员…

【Vue】day02-Vue基础入门

目录 day02 一、今日学习目标 1.指令补充 2.computed计算属性 3.watch侦听器 4.综合案例 &#xff08;演示&#xff09; 二、指令修饰符 1.什么是指令修饰符&#xff1f; 2.按键修饰符 3.v-model修饰符 4.事件修饰符 三、v-bind对样式控制的增强-操作class 1.语法…

AI时代图像安全“黑科技”如何助力人工智能与科技发展?

〇、前言 7月7日下午&#xff0c;2023世界人工智能大会&#xff08;WAIC&#xff09;“聚焦大模型时代AIGC新浪潮—可信AI”论坛在上海世博中心红厅举行。人工智能等技术前沿领域的著名专家与学者、投资人和领军创业者汇聚一堂&#xff0c;共同探索中国科技创新的驱动力量。 在…

【Git】Git 拉取的快速方法(含项目示例)

文章目录 一、问题的提出二、问题的尝试解决 一、问题的提出 在我们之前的拉取中&#xff0c;速度可能比较慢&#xff0c;例如&#xff0c;我们要拉取CLIP的项目。 (ldm) rootI1385efcc2300601b29:/hy-tmp/latent-diffusion# pip install githttps://github.com/openai/CLIP.…

JavaWeb课程设计项目实战(02)——搭建开发环境

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 友情提示 1、 假若你的设备已有可用的Java开发基础环境&#xff0c;则无需重新搭建 2、 假若你需重新搭建Java开发&#xff0c;请务必彻底卸载之前的环境 3、 请尽量保证与…
最新文章