Hadoop -YARN ResourceManager 剖析

复现 Hadoop YARN ResourceManager 未授权访问 复现 Hadoop YARN ResourceManager 未授权访问,更多的是用来练习和熟悉漏洞的,就没安装到太复杂的环境,直接在kali里完成的。 阅读详情
一概要

        YARN采用了Maser/Slave结构,其中Master实现为ResourceManager,负责整个集群的资源管理与调度; Slave实现为NodeManager,负责单个节点的资源管理与任务启动。               
        ResourceManager是整个YARN集群中最重要的组件之一,它的设计直接决定了系统的可扩展性、可用性和容错性等特点,它的功能较多,包括ApplicationMaster管理(启动、停止等)、NodeManager管理、Application管理、状态机管理等。
        在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接受来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(即ApplicationMaster)。
        注:ResourceManager主要完成一下几个功能:
                1.与客户端交互,处理来自客户端的请求。
                2.启动和管理ApplicatinMaster,并在它运行失败时重新启动它。
                3.管理NodeManager,接受来自NodeManager的资源管理汇报信息,并向NodeManager下达管理命令(比如杀死Contanier)等。
                4.资源管理与调度,接收来自ApplicationMaster的资源申请请求,并为之分配资源(核心)。

二 ResourceManager 内部结构

                                                 
                                                                              ResourceManager 内部组件
2.1.用户交互模块
       RM分别针对普通用户(ClientRMService)、管理员(AdminService)和Web提供了三种对外服务。普通用户和管理员这两类请求通过两个不同的通信通道发送给RM,是因为要避免普通用户请求过多导致管理员请求被阻塞而迟迟得不到处理。

2.2 NodeManager 管理模块
      NodeManagerLivelinessMonitor
      监控NodeManager是否活着,如果一个NodeManager在一定时间内(10min)未回报心跳信息,则认为它死掉了,需将其从集群中移除。
      NodeListManager
       管理exclude和include节点列表,维护正常节点和异常节点列表。
       ResourceTrackerService
       处理来自NodeManager的请求,主要包括注册和心跳两种请求。注册是NodeManager启动时发生的行为,请求包中包含节点的ID、可用资源的上限等信息;心跳是周期性的行为,包含各个Container运行状态,运行的Application列表、节点健康状况等信息,作为请求的应答,ResourceTrackService可为NM返回释放Container列表、Application列表等信息。

 2.3 ApplicationMaster 管理模块
       AMLivelinessMonitor
       监控ApplicationMaster是否还活着,如果一个ApplicationMaster在一定时间(10min)内未汇报心跳信息,则认为它死掉了,它上面的所有正在运行的Container将被设置为失败状态,而ApplicationMaster本身会被重新分配到另一个节点上(默认尝试运行2次)。
       ApplicationMasterLaucher
       与某个NM 通信,要求它为某个应用程序启动ApplicationMaster。
       ApplicationMasterService
       负责处理来自ApplictionMaster的请求,请求主要包括注册、心跳和清理三种。
       注册是AM 启动时发生的行为,注册请求包中包含AM启动节点,对外的RPC端口号和tracking URL等信息。
       心跳是周期性的行为,汇报信息包括所需资源的描述、待释放的Container列表、黑名单列表,ApplicationMasterService则为之返回新分配的Container、失败的Container、待抢占的Container列表等信息。
       清理是应用程序结束时发生的。ApplicationMaster向RM发送清理应用程序的请求,以回收资源和清理各种内存空间。

2.4 Applicatin 管理模块
      ApplicationACLsManager
      负责管理应用程序的访问权限,包含两部分权限:查看权限和修改权限。查看权限主要用于查看应用程序基本信息,而修改权限则主要用于修改应用程序的优先级、杀死应用程序等。
      RMAppManager
      负责管理应用程序的启动和关闭。ClientRMService收到来自客户端的提交应用程序的请求后,将调用函数RMAppManager#submitAppication创建一个RMApp对象,它将维护整个应用程序生命周期,从开始运行到最终结束。
      注:RM不负责ApplicationMaster内部任务的执行以及容错,只负责资源的分配和状态的跟踪。
      ContainerAllocationExpirer
      当一个ApplicationMaster获得一个Container后,YARN不允许ApplicationMaster长时间不对其使用,这样会降低整个集群的利用率。当ApplicationMaster收到RM新分配的一个Container后,必须再一定的时间内(默认为10min)内在对应的NM上启动该Container,否则RM将强制回收该Container,而一个已经分配的Container是否被回收则是由ContinerAllocationExpier决定和执行的。

2.5 状态机管理模块
      负责维护应用程序的整个运行周期,包括维护同一个Application启动的所有运行实例的生命周期(RMApp)、维护一次运行尝试的整个生命周期(RMAppAttempt)、维护一个Contaner的运行周期(RMContainer)、维护一个NodeManager的生命周期(RMNode)。
 

     注:1. RMContainer维护了一个Container的运行周期,包括从创建到运行的整个过程。RM将资源封装成Container发送给应用程序的ApplicationMaster,而ApplicationMaster则会在Container描述的环境中启动任务,因此,从这个层面上讲,Container和任务的生命周期是一致的(目前YARN不支持Container的重用,一个Container用完后会立刻释放,将来可能会增加Container的重用机制)。
             2. RMNode状态机是ResourceManager中用于维护一个节点生命周期的数据结构,它的实际是RMNodeImple类,该类维护了一个节点状态机,记录了节点可能存在的各个状态。例如,当一个应用程序执行完成时候,会触发一个CLEANUP_APP事件,以清理应用程序占用的资源。当一个Container执行完成时候,会触发一个CLEANUP_CONTAINER事件,以清理Container占用的资源。
             3.在YARN中,根据应用程序需求,资源被切分成大小不同的资源块,每份资源的基本信息由Container描述,而具体的使用状态追踪则是由RMContainer完成。RMContainer是ResoueceManager中用于维护一个Container生命周期的数据结构,它的实现是RMContianerImpl类,该类维护了一个Container状态机,记录了一个Container可能存在的各个状态以及导致状态转换的事件,当某个事件发生的时候,RMContainerImpl会根据实际情况进行Container状态的转移,同时触发一个行为。
            4. ApplicationMaster通过RPC函数ApplicationMasterProtocol#allocate拉取分配给它的Container后,将与对应的NodeManager通信以启动这些Container,接着NodeManager通过心跳机制将这些Container状态汇报给ResourceManager,最终ResourceManager将这些Container状态置为RUNNING.
           5.当出现以下几种情况时,将导致Container置为KILLED状态。
               a.资源调度器为了保持公平性或者更高优先级的应用程序的服务质量,不得不杀死一些应用占用的Container以满足另外一些应用程序的请求。
               b.某个NodeManager在一定时间内未向ResourceManager汇报心跳信息,则ResourceManager认为它死掉了,会将它上面所在正在运行的Container状态设置为KILLED。
               c.用户(使用API 或者 Shell命令)强制杀死一个RMAppAttempImpl实现时,会导致它所用的Container状态设置为KILLED。

2.6 安全管理模块
        YARN自带了非常全面的权限管理机制,一般而言,系统安全机制由认证和授权两大部分组成。认证就是简单的对一个实体的身份进行判断;授权则是向实体授予对数据资源和信息访问权限的决策过程。
     Hadoop认证机制的实现同时采用了Kerberos和Token两种技术,其中Kerberos用于用户与服务与服务之间的认证,他是一种基于可信任的第三方服务的认证机制,在高并发情况下,效率低。

2.7 资源分配模块
       ResourceScheduler是资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序,当前主要考虑内存和CPU资源。ResourceScheduler是一个插拔式模块,YARN自带了一个批处理资源管理器-FIFO和两个多用户调度器--Fair Scheduler和Capacity Scheduler。

三 常见行为分析

3.1 ApplicationMaster 超时
      AM向RM注册后,必须周期性通过RPC函数ApplicationMasterProtocol#allocate向ResrouceManager汇报心跳以表明自己还活着。如果一段时间按(默认是10min)内未汇报心跳,则ResourceMananger宣布它死亡,进而导致应用程序重新运行或者直接退出。
3.2 NodeManager 超时
      NodeManger启动后通过RPC函数ResourceTracker#registerNodeManager向RM注册,之后将被加入到NMLivenessMonitor中进行监控。它必须周期性通过RPC函数ResourceTracker#nodeHeartBeat向RM汇报心跳以表明自己还活着,如果一段时间内(默认是10min)内为汇报心跳,则RM宣布它已经死亡,所以正在运行在它上面的Container将被回收。


3.3 Container 超时
      在YARN中,存在两种类型的Container,分别是用于运行ApplicationMaster的Container(AM Container)和运行普通任务的Container(简称为 "普通Container")。第一种Container超时将导致整个Application运行失败,而第二种Container超时则会触发一次资源回收。而要注意的是,第二种Container超时导致任务运行失败后,YARN不会主动将其调度到另一个节点上运行,而是将状态告诉应用程序的ApplicationMaster,由它决定是否重新申请资源或者重新执行。
      注:RM只负责资源的分配和回收以及应用程序状态的维护,它不会负责当任务失败的时候进行重启Container,即不负责容错处理。

3.4 AM超时
       RMAppImpl收到超时事件后,如果未超过用户设置的运行次数上限,将尝试启动一个新的RMAppAttemptImp或者直接宣布该应用程序运行失败;ResourceScheduler收到事件后,会清理该应用相关信息。


四 高可用

      Hadoop1.0中,HDFS和MapReduce均采用了Master/Slave结构,这种结构虽然具有设计非常简单的有点,但同时也存在Master单点故障问题。由于存在单点故障问题的系统不适合在线应用场景,这使得Hadoop在相当长时间内仅用于离线存储和计算。

         在Hadoop2.0中,HDFS同样面临着单点故障问题,但由于每个MapReduce作业拥有自己的作业管理组件,因此不再存在单点故障问题,新引入的资源管理系统YARN也采用了Master/Slave结构 ,同样出现了单点故障问题。

        在 Master/Slave架构中,为了解决Master的单点故障问题(也成为高可用问题,即HA,High Availability),通常采用
热备方案,即集群中存在一个对外服务的Active Master和若干个处于就绪状态的Standy Master,一旦Active Master出现故
障,立即采用一定的侧率选取某个Standy Master转换为Active Master以正常对外提供服务。

      HDFS 和 YARN均采用了基于共享存储的HA 解决方案,即Active Master不断将信息写入一个共享存储系统,而Standy Master则不断读取这些信息,以与Active Master的内存信息保持同步。当需要主备切换时,选中Standby Master需先保证信息完全同步后,再将自己的角色切换至Active Master。

      Zookeeper是一个针对大型文件分布式系统的可靠协调系统,提供的功能包括统一命名服务、配置管理、集群管理、共享锁和队列管理等。需要注意的是Zookeeper设计目的并不是数据存储,但它的确可以安全可靠地存储少量数据以解决分布式环境下多个服务之间的数据共享服务。

五 小结

     在YARN中,ResourceManager扮演管理者角色,它负责整个集群的管理与调度。ResourceManager内部有多个功能管理模块,主要包括:ApplicatoinMaster管理(启动和停止)、NodeManager管理、Application管理、状态机管理等。










大数据之yarn体系结构 继续写笔记,清清脑子在Hadoop2.0以后便不再有Tasktacker,也不会有JobTracker,而是以ResourceManger和ApplicationMaster代替,但是要想理清yarn的原理结构还必须从Hadoop1.0的TaskTracker和JobTracker说起。 Hadoop1.0的执行流程(我是搬运工。。。。。这段等我弄懂了再修改): 首先用户程序( 阅读详情

相关推荐

7000字超详细讲解Hadoop、Spark、Storm、YARN,建议收藏!

目录一、Hadoop1.1. 概念1.2. HDFS1.2.1. Client1.2.2. NameNode1.2.3. Secondary NameNode1.2.4. DataNode1.3. MapReduce1.3.1. Client1.3.2. JobTracker1.3.3. TaskTracker1.3.4. Task1.3.5. Reduce Task 执行过程1.4. Hadoop MapReduce 作业的生命周期二. Spark2.1. 概念2.2. 核心架构2.3. 核心组件2.4.

Java_Yhua的博客 4183

【YARN】详解 YARN 中的 ResourceManager

ClientRMService 本质是 RPC Server(实现 ApplicationClientProtocol),给客户端提供 RPC 服务。ClientRMService 中保留了 RM 上下文对象 RMContext,中央异步调度器(AsyncDispatcher)通过 RMContext 来获取节点列表、队列组织和应用列表等信息来响应客户端请求。

Data · Model · Agent · Repeat 3236

Hadoop 资源管理框架 YARN : ResourceManager

ResourceManager 核心功能 集群资源统一管理和调度 NodeManager(管理):接受资源汇报信息 ApplicationMaster(管理):分配资源 客户端(响应):处理请求 通信 (三个角色通信) 1. 与NodeManager通信(ResourceTracker ) 注册、心跳(汇报节点健康状况)、Container运行状态 领取执行指令(启动/清理/删除Cont...

AI天才研究院 9808

Hadoop学习---9、Yarn

Hadoop学习---9、Yarn、基础架构、工作机制、调度器

星光不问赶路人,岁月不负有心人 1578

【大数据Hadoop系列】YARN概述和基本架构

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

weixin_54707168的博客 441

Beyond the Spec: Decoding Samsung‘s LPDDR6 Sub-Channel and Wide-NRZ Innovations

本文深入解析了三星LPDDR6内存的两大核心技术:Sub-Channel架构与Wide-NRZ信号技术。Sub-Channel架构通过将物理通道划分为多个独立子通道,实现了内存访问的细粒度控制,大幅提升了能效,尤其适用于AI与边缘计算场景。Wide-NRZ则通过增加并行数据线而非采用PAM4,在提升带宽的同时保持了优异的信号完整性与低功耗特性。

weixin_29209801的博客 136

大数据技术之Hadoop(Yarn)

大数据技术之Hadoop(Yarn)

我从不打没有准备的仗! 9117

告别SendKeys!用DD驱动级模拟在Windows 10/11上实现真·后台键鼠操作(Python实战)

本文详细介绍了如何使用DD驱动级模拟技术在Windows 10/11上实现真后台键鼠操作,解决传统方法如pyautogui和SendKeys的局限性。通过Python实战案例,展示了驱动级模拟在游戏自动化、RPA等场景中的高效应用,包括环境配置、核心API解析及高级优化技巧。

weixin_42519985的博客 801

Hadoop - YARN ResourceManager 剖析

一概要         YARN采用了Maser/Slave结构,其中Master实现为ResourceManager,负责整个集群的资源管理与调度; Slave实现为NodeManager,负责单个节点的资源管理与任务启动。                        ResourceManager是整个YARN集群中最重要的组件之一,它的设计直接决定了系统的可扩展性、可用性和容错

好学若饥,谦卑若愚 4万+

避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道

本文详细解析了Windows下OpenCV摄像头索引混乱问题的3种解决方案,包括GUID查询法、DirectShow接口集成和注册表固化技术。针对工业视觉和智能监控场景,提供实战代码和性能优化建议,帮助开发者稳定识别多路摄像头设备,有效解决VideoCapture接口的索引漂移问题。

weixin_30836759的博客 406

SAM2与Docker的完美组合:5分钟搞定Linux环境下的图像分割部署

本文详细介绍了如何在Linux环境下通过Docker快速部署SAM2图像分割模型,解决安装过程中的常见问题。文章提供了从镜像选择、CUDA版本匹配到容器构建的全流程指南,特别针对GPU加速环境下的'cudnn_frontend: No execution plans support the graph'等报错提供了实用解决方案,帮助开发者在5分钟内完成高效部署。

fern8的博客 933

hadoop源码_Apache Hadoop YARN:Client<>ResourceManager源码DEBUG

点击关注上方“知了小巷”,设为“置顶或星标”,第一时间送达干货。本文将通过DEBUG的方式进行源码跟踪,探查YARN客户端与ResourceManager之间简单的交互过程,以yarnClient.getAllQueues()获取YARN集群所有队列信息为例进行演示。Hadoop版本3.2.1DEBUG环境:IntelliJ IDEA一、 测试用例这里直接调用YarnClient的静态方...

weixin_39683526的博客 213

基于Super-Jacoco的精准测试实践之路

灵魂拷问这个版本的影响范围到底有多大?研发改动了代码,为什么不通知测试?测试用例真的全面覆盖了吗?测试同学的测试覆盖情况该怎么评估?什么是精准测试概念借助技术手段、通过辅助算法对软件测试过...

咻咻ing的专栏 5841

Hadoop yarn源码分析(三) ResourceManager 2021SC@SDUSC

2021SC@SDUSC Hadoop yarn源码分析(三) ResourceManager一、ResourceManager简介 一、ResourceManager简介 Yarn的三大核心组件为ResourceManager(RM),ApplicationMaster(AM),NodeMananger(NM)。在Hadoop yarn中, ResourceManager负责集群中所有资源的统一管理和分配, 它接收来自各个节点(NodeManager) 的资源汇报信息, 并把接收到的信息按照一定的策略分配

LeBron_W的博客 627

用Scratch实现凯撒密码:图形化编程与古典密码学的趣味结合

字符编码与移位运算是计算机处理文本数据的基础原理之一,它通过将字母映射为数字实现信息转换。在密码学领域,凯撒密码作为最经典的替换密码,直观地展示了基于规则字符替换的加密思想,其核心价值在于通过简单算法揭示加密解密的基本框架。这种原理在编程教育中尤为重要,能够帮助初学者理解循环、变量和字符串处理等核心概念。结合Scratch图形化编程环境,学习者可以通过拖拽积木可视化构建加密算法,将抽象的移位操作转化为交互式游戏。本项目以凯撒密码为例,通过实时密钥调整和动态字母表映射,生动演示加密过程,并自然融入暴力破解和密

weixin_32428571的博客 310

Python实战:高效稳定采集微信视频号评论的API爬虫方案

网络爬虫是数据采集领域的核心技术,其原理是通过程序模拟浏览器行为,向目标服务器发送HTTP请求并解析响应数据,从而自动化获取网页或接口中的信息。这项技术的核心价值在于能够高效、批量化地收集公开数据,为市场分析、舆情监控和竞品研究提供数据基础。在社交媒体分析、电商价格监控等应用场景中,爬虫技术尤为重要。针对微信视频号这类动态加载的复杂应用,传统的GUI自动化工具(如影刀RPA)常面临性能瓶颈和风控挑战。本文聚焦于通过Python实现**无感采集**,直接与后端**API接口**交互,构建稳定高效的评论数据采集

weixin_30899023的博客 328

【Hadoop】Hadoop核心基础——YARN 框架架构与运行机制(Hadoop 集群的 “资源管家”)

这一期我们拆解了 YARN 的核心架构和运行机制 —— 它的核心价值在于 “解耦” 和 “开放”:解耦了资源管理与任务调度,解决了 Hadoop 1.x 的单点瓶颈;开放了资源接口,让 Hadoop 从 “单一计算框架” 升级为 “分布式计算平台”。有了 YARN 的支撑,Hadoop 生态才能容纳 MapReduce、Spark、Flink 等多样化的计算框架,成为大数据领域的 “基础设施”。

lxyydh88888888的博客 2030

2026年软件测试职业院校技能大赛—ERP管理平台-采购入库模块Bug定位与查找

竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 195

Spark-Submit提交流程源码分析(Yarn-Cluster源码分析, Yarn-Cluster 和 Yarn-Client 的区别)

目录 概念简介 Hadoop Yarn组件介绍: ResourceManager(RM) NodeManager(NM) ApplicationMaster(AM) Container Yarn-Cluster模式 Spark On Yarn 一、 SparkSubmit 分析 二、转到 Client 三、ApplicationMaster 四、Coarse...

康师傅没有眼泪 1632

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Yarn源码分析之集群启动流程

文章目录集群启动脚本分析ResourceManager启动流程初始化流程启动流程中央事件调度器-AsyncDispatcher 本文以hadoop2.7.1的源码分析(主要是最新版本考虑更多因素,源码不够纯粹) 集群启动脚本分析 首先我们从启动hadoop集群说起,我们一般在单点hadoop启动集群一般直接使用 sbin/start-all.sh 或 sbin/stop-all.sh ,我们直接看...

Haiwi-Song 1504

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hadoop YARN配置参数剖析(1)—RM与NM相关参数

Hadoop YARN配置参数剖析(1)—RM与NM相关参数  注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患。另外,这些参数均需要在yarn-site.xml中配置。 1.    ResourceManager相关配置参数 (1) yarn.resourcemanager.address 参数解释:ResourceManager 对客

大数据云计算qq_66336876 301

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hadoop Yarn详解

一、Yarn简介 Yarn是Hadoop集群的资源管理系统。Hadoop2.0对MapReduce框架做了彻底的设计重构,我们称Hadoop2.0中的MapReduce为MRv2或者Yarn。在介绍Yarn之前,我们先回头看一下Hadoop1.x对MapReduce job的调度管理方式(可参考:Hadoop核心之MapReduce架构设计),它主要包括两部分功能: 1. ResourceM...

Mindy的专栏 8248

hadoop yarn的job提交流程源码分析

yarn是hadoop 2.x 版本引进的作业调度框架,由NodeManager和ResourceManager组成。可以进行作业的提交和管理。现在通过一个简单的作业提交进行源码分析。 1、job提交流程图: 2、job提交源码流程: 3、源代码分析: job.waitForCompletion(true): 这个是作业提交的入口,返回了作业是否完成的状态 。可以看出主要是调用了su

phn_csdn的博客 1699

hadoop详细笔记(十八)原理加强mapreduce程序在yarn上的运行流程

免费视频教程https://www.51doit.com/或者联系博主微信 17710299606 详细步骤在上面的两张图中 , 大家仔细研读! 1、客户端client向YARN主节点ResourceManager提交作业job 比如统计4G文件中每个单词出现的次数统计结果 在hadoop环境下提交作业的语句:bin/yarn jar XXX.jar MainClass args 2、主节点ResourceManager在某个DataNode从节点上启动一个Container运行app...

HANG.NIAN 874

Hadoop YARN架构设计要点

YARN是开源项目Hadoop的一个资源管理系统,最初设计是为了解决Hadoop中MapReduce计算框架中的资源管理问题,但是现在它已经是一个更加通用的资源管理系统,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。如果你的应用程序也需要借助YARN的资源管理功能,你也可以实现YARN提供的编程API,将你的应用程序运行于YARN之上,将...

aikuangchou2298的博客 155

Hadoop基础概念科普

Hadoop基础概念科普 HDFS namenode 存储文件的源数据,如文件名、文件的目录结构、文件属性,以及每个文件的块列表和块所在的DataNode等 datanode 在本地文件系统中存储文件的块数据,以及数据的校验和 secondary namenode 用来监视HDFS的状态的辅助后台程序,每隔一段时间都获取一次HDFS的源数据的快照 YARN ResourceManager 主要作用...

丹丹老师的小菜园子 215
上一篇: Hadoop - YARN 通信协议
下一篇: Hadoop - YARN 概述
张哲BJUT
博客等级 码龄15年 151粉丝 111原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值