YARN(含MR2)常用配置

Yarn 内存分配管理机制及相关参数配置 理解Yarn的内存管理与分配机制,对于我们搭建、部署集群,开发维护应用都是尤为重要的,对于这方面我做了一些调研供大家参考。 一、相关配置情况 关于Yarn内存分配与管理,主要涉及到了ResourceManage、ApplicationMatser、NodeManager这几个概念,相关的优化也要紧紧围绕着这几方面来开展。这里还有一个Container的概念,现在可以先把它理解为运行map/re 阅读详情

YARN架构图

YARN工作机制

调度器

资源调度器的类

yarn.resourcemanager.scheduler.class

原文:
The class to use as the resource scheduler.
译文:
资源调度器的类
容量调度器是 org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
公平调度器是 org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

最大优先级

yarn.cluster.max-application-priority

原文
Defines maximum application priority in a cluster.
If an application is submitted with a priority higher than this value, it will be reset to this maximum value.
译文
定义集群中应用程序的最大优先级

处理调度器请求的线程数量

yarn.resourcemanager.scheduler.client.thread-count

原文
Number of threads to handle scheduler interface.
译文
处理调度器接口的线程数

NodeManager

单节点 NM 可分配的物理内存

yarn.nodemanager.resource.memory-mb

原文:
Amount of physical memory, in MB, that can be allocated for containers.
If set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically calculated(in case of Windows and Linux).
In other cases, the default is 8192MB.
译文:
当前节点NodeManager可分配给容器们的物理内存量(以MB为单位)
如果设置为-1且 yarn.nodemanager.resource.detect-hardware-capabilities为true,就会自动计算
其它情况默认8192MB

例如有10个NM,每个 NM 配置内存50G,则总内存是500G

单节点 NM 可分配的虚拟核心数

yarn.nodemanager.resource.cpu-vcores

原文
Number of vcores that can be allocated for containers.
This is used by the RM scheduler when allocating resources for containers.
This is not used to limit the number of CPUs used by YARN containers.
If it is set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically determined from the hardware in case of Windows and Linux.
In other cases, number of vcores is 8 by default.
译文
当前节点NodeManager可分配给容器们的虚拟核心数
如果设置为-1且 yarn.nodemanager.resource.detect-hardware-capabilities是true,就依据硬件来自动确定虚拟核数
其它情况默认8

单节点预留给非YARN进程的物理内存总量

yarn.nodemanager.resource.system-reserved-memory-mb

原文:
Amount of physical memory, in MB, that is reserved for non-YARN processes.
This configuration is only used if yarn.nodemanager.resource.detect-hardware-capabilities is set to true and yarn.nodemanager.resource.memory-mb is -1.
If set to -1, this amount is calculated as 20% of (system memory - 2* HADOOP_HEAPSIZE)
译文:
预留给非YARN进程的物理内存总量,单位为MB
当 yarn.nodemanager.resource.detect-hardware-capabilities为true且 yarn.nodemanager.resource.memory-mb为-1时生效
如果设置为-1, 计算值 = ( 系统内存 − 2 × H A D O O P _ H E A P S I Z E ) × 20 % 计算值=(系统内存 - 2 \times HADOOP\_HEAPSIZE)\times 20 \% 计算值=(系统内存−2×HADOOP_HEAPSIZE)×20%

每个容器可分配的最小内存

yarn.scheduler.minimum-allocation-mb

原文:
The minimum allocation for every container request at the RM in MBs.
Memory requests lower than this will be set to the value of this property.
Additionally, a node manager that is configured to have less memory than this value will be shut down by the resource manager.
译文:
每个 容器(向RM请求)可分配的最小内存,单位MB
低于此值的内存请求将被设置为此属性的值
此外,内存小于此值的NM节点将被RM关闭

每个容器可分配的最大内存

yarn.scheduler.maximum-allocation-mb

原文:
The maximum allocation for every container request at the RM in MBs.
Memory requests higher than this will throw an InvalidResourceRequestException.
译文:
每个 容器(向RM请求)可分配的最大内存,单位MB
高于此值的内存请求将抛出 InvalidResourceRequestException

每个容器可分配的最少虚拟核数

yarn.scheduler.minimum-allocation-vcores

原文:
The minimum allocation for every container request at the RM in terms of virtual CPU cores.
Requests lower than this will be set to the value of this property.
Additionally, a node manager that is configured to have fewer virtual cores than this value will be shut down by the resource manager.
译文:
每个容器(向RM请求)可分配的最少虚拟核数
低于此值的请求将被设置为此属性的值
此外,虚拟核心数少于此值的NM节点将被RM关闭

每个容器可分配的最多虚拟核数

yarn.scheduler.maximum-allocation-vcores

原文:
The maximum allocation for every container request at the RM in terms of virtual CPU cores.
Requests higher than this will throw an InvalidResourceRequestException.
译文:
每个容器(向RM请求)可分配的最多虚拟核数
高于此值的请求将抛出 InvalidResourceRequestException

自动检测节点资源

yarn.nodemanager.resource.detect-hardware-capabilities

原文:
Enable auto-detection of node capabilities such as memory and CPU.
译文:
是否启用自动检测节点资源(内存、CPU…)
false为禁用,true为启用

虚拟核数和物理核数的转换乘数

yarn.nodemanager.resource.pcores-vcores-multiplier

原文:
Multiplier to determine how to convert phyiscal cores to vcores.
This value is used if yarn.nodemanager.resource.cpu-vcores is set to -1(which implies auto-calculate vcores) and yarn.nodemanager.resource.detect-hardware-capabilities is set to true.
The number of vcores will be calculated as number of CPUs * multiplier.
译文:
虚拟核数和物理核数的转换乘数
当 yarn.nodemanager.resource.cpu-vcores为-1且 yarn.nodemanager.resource.detect-hardware-capabilities为true时,此值生效
虚拟核心总数 = 物理核心总数 × 转换乘数 虚拟核心总数=物理核心总数 \times 转换乘数 虚拟核心总数=物理核心总数×转换乘数

例如:4核8线程,该参数就设为2

容器们的CPU百分比限制

yarn.nodemanager.resource.percentage-physical-cpu-limit
Containers CPU Limit Percentage

原文:
Percentage of CPU that can be allocated for containers.
This setting allows users to limit the amount of CPU that YARN containers use.
Currently functional only on Linux using cgroups.
The default is to use 100% of CPU.
译文:
可分配给容器们的CPU百分比
用于限制YARN容器们使用的CPU数量
默认值100%

MapReduce

每个Map任务的虚拟核心数

mapreduce.map.cpu.vcores

原文:
The number of virtual cores to request from the scheduler for each map task.

每个Map任务的内存

mapreduce.map.memory.mb

原文:
The amount of memory to request from the scheduler for each map task.
If this is not specified or is non-positive, it is inferred from mapreduce.map.java.opts and mapreduce.job.heap.memory-mb.ratio.
If java-opts are also not specified, we set it to 1024.
译文
每个向调度器请求的Map任务的内存,单位MB
如果冇指定,就根据 mapreduce.map.java.opts和 mapreduce.job.heap.memory-mb.ratio来推断
如果 mapreduce.map.java.opts也没指定,就1024MB

单个Map任务内存应小于单个容器可分配的最大内存
单个Map任务内存应小于单节点 NM 可分配的物理内存的最大值

每个Reduce任务的虚拟核心数

mapreduce.reduce.cpu.vcores

原文:
The number of virtual cores to request from the scheduler for each reduce task.

每个Reduce任务的内存

mapreduce.reduce.memory.mb

原文:
The amount of memory to request from the scheduler for each reduce task.
If this is not specified or is non-positive, it is inferred from mapreduce.reduce.java.opts and mapreduce.job.heap.memory-mb.ratio.
If java-opts are also not specified, we set it to 1024.
译文
每个向调度器请求的Reduce任务的内存,单位MB
如果冇指定,就根据 mapreduce.reduce.java.opts和 mapreduce.job.heap.memory-mb.ratio来推断
如果 mapreduce.reduce.java.opts也没指定,就1024MB

单个Reduce任务内存应小于单个容器可分配的最大内存
单个Reduce任务内存应小于单节点 NM 可分配的物理内存的最大值

堆大小与容器大小的比率

mapreduce.job.heap.memory-mb.ratio

原文:
The ratio of heap-size to container-size.
If no -Xmx is specified, it is calculated as ( mapreduce.{map|reduce}.memory.mb * mapreduce.heap.memory-mb.ratio).
If -Xmx is specified but not mapreduce.{map|reduce}.memory.mb, it is calculated as (heapSize / mapreduce.heap.memory-mb.ratio).
译文
堆大小与容器大小的比率
当冇指定 -Xmx时:堆大小= mapreduce.{map|reduce}.memory.mb × \times × mapreduce.heap.memory-mb.ratio
当指定了 -Xmx,但冇指定 mapreduce.{map|reduce}.memory. mb时: mapreduce.{map|reduce}.memory.mb=堆大小/ mapreduce.heap.memory-mb.ratio
说明
默认值是0.8;当 mapreduce.map.memory.mb=4G时,Map任务堆大小=3.2G

MR的ApplicationMaster所需的内存大小

yarn.app.mapreduce.am.resource.mb

原文:
The amount of memory the MR AppMaster needs.

MR的ApplicationMaster所需的虚拟核心数

yarn.app.mapreduce.am.resource.cpu-vcores

原文:
The number of virtual CPU cores the MR AppMaster needs.

Appendix

  • 1个ApplicationMaster申请1个Container
  • 1个Spark的Executor申请1个Container
  • 1个MapTask申请1个Container
    1个ReduceTask申请1个Container
  • 假设某节点服务器内存128G
    则
    该节点 NM 可分配的物理内存应当<128G,可以是64G、96G
  • 假设有3个 NM 节点的可分配内存(G)为:8、8、16
    则
    总内存 ( G ) = 8 + 8 + 16 = 32 总内存(G)=8+8+16=32 总内存(G)=8+8+16=32
    则
    单个 容器 的最大内存 最多只能给到16G
    则
    单个Map任务的内存 不能大于16G
    • 假设1个作业的Map需要20G内存
      如果mapreduce.map.memory.mb设为8G,YARN就会分配3个8G的 容器,24>20浪费了4G
      如果mapreduce.map.memory.mb设为4G,YARN就会分配5个4G的 容器
    • 假设1个作业的Map需要1G内存
      如果mapreduce.map.memory.mb设为5G,YARN就会分配1个5G的 容器,
      多个小作业会把YARN可分配给容器的内存用满,
      用free -h可看到:实际并没有用到5G内存
en🔉cn
invalidɪnˈvælɪd作废的;不能识别的;
inferɪnˈfɜːrv. 推断
specifyˈspesɪfaɪv. 明确指出;具体说明
convertkənˈvɜːrtv. (使)转换
multiplierˈmʌltɪplaɪərn. [数] 乘数;[电子] 倍增器;增加者;繁殖者
implyɪmˈplaɪv. 暗示;意味着;必然包含
-Xms初始Java堆内存大小
-Xmx最大Java堆内存大小
yarn中container、mr内存的配置,控制container个数   最近项目在用kylin,在搭建开发环境和测试环境后,然后在kylin上建cube,kylin建cube的实际就是调用集群的MR跑任务(也可以调用spark作为引擎),在数据量小或者维度(kylin里面的一个概念)少的时候没问题,后来数据量大或维度多了,就经常出现OOM的问题。   其实一开始就知道是并行度过高的问题,也尝试过在kylin里面调试,但并没有用。后来通过jps查看yarnchil... 阅读详情

相关推荐

YARN, MR History Server和Spark History Server

YARN, MR History Server和Spark History Server三者的区别: 今天听到有人说, "Yarn自带的History Server"如何如何之类的。看来还有很多人把history server当做是为YARN的应用提供服务的功能。 所以我想,还是有必要梳理一下YARN, YARN中的history server,以及spark的history server。

美伊小公主的超级奶爸的专栏 4508

Yarn生产环境核心参数

1.ResourceManager相关 yarn.resourcemanager.scheduler.class #配置调度器,默认容量 yarn.resourcemanaager.scheduler.client.thread-count #ResourceManager处理调度器请求的线程数量,默认50 2.NodeManager相关 yarn.nodemanager.resource.detect-hardware-capabilities #是否让yarn自己检测硬件进行配置,默...

小M呀~之大数据系列 1396

YARN提交MR程序流程以及MR调优

YARN提交MR程序流程 YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,如图4-23所示。 图4-23 Yarn基本架构 Yarn工作机制 1.Yarn运行机制,如图4-24所示。 图4-24 Yarn工作机制 2.工作机制详解 (1)MR程序提交到客户端所在的节点。 (2)YarnRunner向ResourceManager申请一个Application...

qq_22796957的博客 2270

## YARN运行资源配置

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

chenjunshi123的博客 5408

Hadoop基础知识(MR on YARN篇)

文章目录基本概念YARN 的参数调优YARN 的架构MR on YARN 执行流程 基本概念 作业、job、application、应用 是同一个意思 container:容器,yarn 的组件,是一个虚拟的概念,将一定的内存和 CPU,比如 1G 内存,一个 vcore 抽象为一块地方,来运行任务 YARN 的参数调优 一台 64G,16Cores 的服务器,系统安装完一般会使用一定的内...

gszhihan的博客 544

(超详细)Spark on Yarn安装配置

(超详细)Spark on Yarn安装配置,附有详细步骤,详细代码,注意事项提示

数据爬坡ing的博客 2365

Hadoop-Yarn

yarn

weixin_47260194的博客 3079

[Flink] Flink运行报错The number of requested virtual cores for application master

1.背景 运行一个flink任务,启动的时候报错 org.apache.flink.client.deployment .ClusterDeploymentException: Could not deploy Yarn job cluster. at org.apache.flink.yarn.YarnClusterDescr iptor .deployJobCluster (YarnClusterDescriptor.java:82) at org.apache.flink.client.cli .

九师兄 1934

HDP 中 yarn 和 MR2 的配置

以下说明均以集群中slave结点的配置为 48G内存,12块硬盘,12核(core) CPU为例。 在Yarn中,一个Container是一个基础的包含内存和CPU的单元。为了较好的平衡利用集群的资源,通常建议每块磁盘和每个core分配1~2个container。所以在上面的配置下,每个结点允许最大配置 20个container。 ...

weixin_30587025的博客 294

模电实验室:手把手教你调试共射放大电路静态工作点(避免波形失真)

本文详细介绍了共射放大电路静态工作点的调试方法,帮助避免波形失真问题。从实验准备、电路搭建到静态工作点测量,提供了实用的电阻选值策略和常见波形失真解决方案,适合电子相关专业学生和硬件工程师参考学习。

weixin_42531128的博客 378

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 335

Hadoop学习笔记(HDP)-Part.14 安装YARN+MR

使用Yarn提交MapReduce任务的时候,中间结果会保存在HDFS,/user/username/,如果/user目录下用户目录下不存在,则被创建,当MR执行结束之后,中间结果会被删除,目录保留。因此需要在Ranger中对/user的权限做策略。

glisten0317的博客 2015

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

本文详细介绍了如何通过Copilot插件在Obsidian中免费接入DeepSeek-R1模型,实现智能知识管理。从硅基流动API密钥获取到插件配置,再到高级功能调优和实战应用技巧,手把手教你打造AI驱动的个人知识库。

weixin_33686714的博客 2801

本地运行与调试MR On Yarn程序

本地运行与调试MR on Yarn程序

wubinghua15180087610的博客 805

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1360

048、NPU的批处理(Batching):提高吞吐量的技巧

摘要: NPU批处理通过合并多个输入样本提升计算效率,但需注意硬件特性与数据布局。关键点包括:1) 批处理引擎需填充对齐,非2的幂次可能降低性能;2) 访存开销分摊是主要收益,但DDR带宽可能成为瓶颈;3) 内存需连续且对齐,排列格式(NHWC/NCHW)因NPU而异;4) 动态批处理灵活但性能损失10-20%;5) 批处理可能放大量化误差。调优需实测硬件限制,平衡吞吐与延迟,并考虑功耗影响。批处理对小模型收益有限,适合大模型优化。

m0_50546716的博客 27

MR的yarn工作流程

在 MR 的 YARN 工作流程中,YARN 主要负责资源的统一管理与调度,而 MRAppMaster 则作为作业的协调者,将 MR 作业拆分为多个 Map 和 Reduce 任务,向 RM 申请资源,并通过与各 NodeManager 的协同来启动、监控和重启任务,从而实现高效、容错的分布式计算。

weixin_50227709的博客 503

【音视频 ffmpeg 学习】 RTMP推流 mp4文件

3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。2.RTMP协议中基本的数据单元称为消息(Message)。下载地址:http://nginx.org/download。下载 rtmp模块 到nginx 模块下。安装nginx 和 rtmp模块。(1). linux 环境准备。下载nginx安装包。使用 vcl 播放流。

weixin_45397344的博客 2277

Hadoop入门—HDFS、MR、Yarn

hadoop生态及架构,HDFS存储方式、Yarn资源调度、MR并行计算

qq_73181349的博客 2979

高级电机控制场景实例:基于Simulink的永磁同步电机基于Luenberger观测器的弱磁控制仿真

本文基于Simulink实现表贴式永磁同步电机(SPMSM)的Luenberger观测器弱磁控制仿真,通过构建“观测-弱磁-控制”协同逻辑,突破传统矢量控制的基速限制。利用线性化模型设计观测器实时估计电流与磁链,结合电压极限约束动态注入负d轴电流,实现转速扩展至12000rpm(4倍基速),弱磁区电流THD低于3%,动态响应时间小于5ms,验证了高速运行下系统稳定性与鲁棒性。附完整建模步骤、MATLAB函数代码及性能分析,适用于电动汽车、机床等高速驱动场景,为高级电机控制提供可复现的技术范式。

amy_mhd的博客 32

AD18软件——捕捉栅格、电气栅格、可见栅格的意义及设置

本文介绍了PCB设计中的三种栅格功能:可视栅格用于辅助定位(快捷键Shift+Ctrl+G),捕捉栅格控制光标移动间距(快捷键G),电气栅格实现元件自动吸附(快捷键Shift+E)。同时提供了在Altium Designer中快速查找相同网络标号的两种实用方法:Alt+鼠标单击或双击网络。这些功能可显著提高PCB设计效率和准确性。

qq_37999850的博客 646

yarn历史日志_配置文件

我们在YARN运行MapReduce的程序的时候,任务会被分发到不同的节点,在不同的Container内去执行。如果一个程序执行结束后,我们想去查看这个程序的运行状态呢?每一个MapTask的执行细节?每一个ReduceTask的执行细节?这个时候我们是查看不到的,因此我们需要开启记录历史日志的服务。​历史日志服务开启之后,Container在运行任务的过程中,会将日志记录下来,保存到当前的节点。

HYSliuliuliu的博客 9700

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spark-配置yarn模式

通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源, 这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。队列内部又可以垂直划分,这样一个组织内部的多个成员就可以共享这个队列资源了,在一个队列内部,资源的调度是采用的是先进先出(FIFO)策略。但是实际中,资源是有限的,并且在繁忙的群集上, 应用程序通常将需要等待其某些请求得到满足。现在,如果B用户在其他作业仍在运行时开始第二个作业,它将与B的另一个作业共享其资源,因此B的每个作业将拥有资源的四分之一,而A继续将拥有一半的资源。

2402_87084142的博客 907

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

YARN REST API 提交MR任务

@羲凡——只为了更好的活着 YARN REST API 提交MR任务 官网介绍地址 http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html 既然是api,推荐使用postman或者idea,本文使用postman 0.准备MR的jar包并上传到hdfs上 hdfs dfs...

@羲凡—只为更好的活着 2092

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

hadoop之MR on yarn 架构详解与shuffle剖析

目录 1.MapReduce简介 2.Container简介 3.vcore简介 4.MR on yarn 架构 4.1架构图 4.2相关角色介绍 4.3流程详解 5.MR 与 yarn常用命令 6.Shuffle剖析 1.MapReduce简介 大数据最早的分布式计算框架,如今企业开发已不会直接使用java代码写MR代码运行作业,因为只有map、reduce两种函数,代码很...

君永夜 1295

MR ON YARN流程

MR ON YARN流程 1.Client向RM提交应用程序,其中包含Application Master主程序和启动命令。 2.Applications Manager会为应用程序分配第一个container容器,来运行Application Master主程序。 3.Application Master主程序就会向Applicaitons Manager注册,就可以做yarn的web界面上看到job的运行状况。 4.Application Master主程序采用轮询的方式通过RPC协议向Resourc

Student_xx的博客 596
上一篇: 数仓模型HIVE业务元数据治理:专题构建方案
下一篇: 大数据(2g)MapReduce补充
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值