Hadoop3.x配置高可用

Hadoop 3.x 高可用集群部署实战:5节点 ZKFC+JournalNode 配置与故障切换测试 本文详细介绍了Hadoop 3.x高可用集群的部署实战,重点解析了5节点ZKFC+JournalNode配置与故障切换测试。通过优化HA架构,Hadoop 3.x将NameNode故障切换时间缩短至秒级,提升企业级大数据平台的稳定性。文章提供生产环境配置模板、实战演示及调优建议,帮助用户构建高可靠的Hadoop集群。 阅读详情

配置之前,我们先来思考一下我们为什么要配置高可用呢?

原因:
当namenode节点挂掉之后,集群就无法工作了,secondarynode 节点也只是能复制namenode的工作,而不能产生替代作用, 我们需要一个当namenode节点挂掉之后,能代替他的节点,这时候就需要来配置高可用了

官方文档:点击这里去配置

前提条件:

  1. 你的Hadoop已经能启动成功. 我们在其基础上进行修改.
  2. 要配置现在的这个Hadoop的环境变量,不然是初始化不成功的

journalnode 进程的作用

开始之前我们还要先来了解一下journalnode是什么,有什么作用?更好的帮我们来理解高可用

这个是一个进程,主要是为了实现NameNode之间的数据共享,详解:

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
在这里插入图片描述
中间就是journalnode,Active Namenode往里写editlog数据,StandBy再从里面读取数据进行同步,来实现两个机器上的数据存储达到一样.

hdfs-site.xml

<configuration>
<!-- 配置nameservice的ID,命名空间-->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>

<!--配置namenode的id-->
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<!--配置rpc通信地址 -->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>hadoop202:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>hadoop203:8020</value>
</property>
<!--配置http通信地址-->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>hadoop202:9870</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>hadoop203:9870</value>
</property>
<!--配置journalNode-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://hadoop202:8485;hadoop203:8485;hadoop204:8485/mycluster</value>
</property>
<!--配置代理-->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--侦听隔离不需要提供密码 ,配置ssh私钥地址-->
<property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
</property>
<property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
</property>
</configuration>

core-site.xml

<configuration>
<!-- 指定 NameNode 的地址 -->
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://mycluster</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/HA/hadoop-3.1.3/data</value>
 </property>
<!--以root用户登录静态页面操作-->
<property>
 <name>hadoop.http.staticuser.user</name>
 <value>root</value>
 </property>
<!--journal存放路径-->
<property>
  <name>dfs.journalnode.edits.dir</name>
 <value>/opt/module/HA/hadoop-3.1.3/data/jn</value>
</property>
</configuration>

上面这些直接照着文档来配置就行了, 这里我是配置了两个namenode
(journalnode这个的配置应该是只配置namenode节点上的就行了,我这里3个节点都配了,有空的话可以测试一下)

手动配置:

1.依赖于journal来进行数据共享的,所以要先启动journal进程

sbin/hadoop-daemon.sh start journalnode

2.在[nn1]上,对其进行格式化,并启动(只需要执行一次)

bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

3 . 在[nn2]上,同步nn1的元数据信息(只需要执行一次)

bin/hdfs namenode -bootstrapStandby

4 . 启动[nn2]

sbin/hadoop-daemon.sh start namenode

5.启动所有的datanode

sbin/hadoop-daemons.sh start datanode

7.将[nn1]切换为Active

bin/hdfs haadmin -transitionToActive nn1

8.查看是否Active

bin/hdfs haadmin -getServiceState nn1

==注:==手动配置的话,namenode宕机的话, 就无法切换状态了(Active/ Standby),无法通信!


自动配置 (依赖于zookeeper来完成)

hdfs-site.xml

#开启自动故障切换
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>

core-site.xml

#指定集群: 这里一定要看清楚,我就是这里出错了,浪费了好长时间, 这个配置的端口号要和你的zookeeper集群一致
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>

自动配置切换原理: 主要是通过zookeeper 来配合完成,使用ZKFC进程进行监视 (类似于分布式锁的实现原理)
在这里插入图片描述

组件的介绍: (从官网拿下来的组件介绍,可以进行翻译看)

Automatic failover adds two new components to an HDFS deployment: a ZooKeeper quorum, and the ZKFailoverController process (abbreviated as ZKFC).

Apache ZooKeeper is a highly available service for maintaining small amounts of coordination data, notifying clients of changes in that data, and monitoring clients for failures. The implementation of automatic HDFS failover relies on ZooKeeper for the following things:

Failure detection - each of the NameNode machines in the cluster maintains a persistent session in ZooKeeper. If the machine crashes, the ZooKeeper session will expire, notifying the other NameNode(s) that a failover should be triggered.

Active NameNode election - ZooKeeper provides a simple mechanism to exclusively elect a node as active. If the current active NameNode crashes, another node may take a special exclusive lock in ZooKeeper indicating that it should become the next active.

The ZKFailoverController (ZKFC) is a new component which is a ZooKeeper client which also monitors and manages the state of the NameNode. Each of the machines which runs a NameNode also runs a ZKFC, and that ZKFC is responsible for:

Health monitoring - the ZKFC pings its local NameNode on a periodic basis with a health-check command. So long as the NameNode responds in a timely fashion with a healthy status, the ZKFC considers the node healthy. If the node has crashed, frozen, or otherwise entered an unhealthy state, the health monitor will mark it as unhealthy.

ZooKeeper session management - when the local NameNode is healthy, the ZKFC holds a session open in ZooKeeper. If the local NameNode is active, it also holds a special “lock” znode. This lock uses ZooKeeper’s support for “ephemeral” nodes; if the session expires, the lock node will be automatically deleted.

ZooKeeper-based election - if the local NameNode is healthy, and the ZKFC sees that no other node currently holds the lock znode, it will itself try to acquire the lock. If it succeeds, then it has “won the election”, and is responsible for running a failover to make its local NameNode active. The failover process is similar to the manual failover described above: first, the previous active is fenced if necessary, and then the local NameNode transitions to active state.

启动
(1)关闭所有HDFS服务:

sbin/stop-dfs.sh

(2)启动Zookeeper集群:

bin/zkServer.sh start

(3)初始化HA在Zookeeper中状态:

bin/hdfs zkfc -formatZK #初始化过后会出现 hadoop-ha 节点

(4)启动HDFS服务:

sbin/start-dfs.sh #配置过高可用,这个就可以启动journalnode 和 ZKFC了

(5)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode

手动开启
sbin/hadoop-daemon.sh start journalnode
sbin/hadoop-daemon.sh start zkfc

---------------------------------上面配置的是 HDFS 的高可用 --------------------------------------------

下面来配置Yarn的高可用(resourcemanager )

    <!--指定shuffle-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop202</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop203</value>
    </property>
 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop202:2181,hadoop203:2181,hadoop204:2181</value>
    </property>

    <!--启用自动恢复--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定resourcemanager的状态信息存储在zookeeper集群(默认是存储在文件系统中)--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>

启动:

sbin/start-yarn.sh

查看rm状态:

bin/yarn rmadmin -getServiceState rm1

上面配置好了,这个就非常简单了,可以去查看官方文档

命令进行整理:

sbin/hadoop-daemon.sh start journalnode # 启动journalnode进程
bin/hdfs namenode -format # 格式化 namenode
sbin/hadoop-daemon.sh start namenode # 先启动初始化之后的一台namenode
bin/hdfs namenode -bootstrapStandby # 再另一台namenode节点上进行同步源数据
sbin/hadoop-daemons.sh start datanode # 启动所有的datanode 节点
bin/hdfs zkfc -formatZK # 初始化ZKFC ,在zk上生成 hadoop-ha 节点
sbin/hadoop-daemin.sh start zkfc # 单独启动zkfc
sbin/start-dfs.sh
配置好自动故障切换之后,调用这个会自动启动journalnode,zkfc,namenode,datanode进程

Ubuntu22.04下3分钟搞定GitHub加速:SwitchHosts+小鱼工具保姆级配置指南 本文提供Ubuntu22.04下快速解决GitHub下载超时问题的保姆级教程,通过SwitchHosts图形化工具和小鱼一键换源工具实现高效加速。详细步骤包括环境准备、工具安装配置及验证方法,帮助开发者轻松优化GitHub访问速度,提升工作效率。 阅读详情

相关推荐

LEC/FORMAL --- PARTIII debug

lec(logic equivalence checking)又叫formal check,是对ic design的综合,PR前后的设计进行逻辑对比检查的工具/手段,保证综合不改变rtl原始的logic function。目前用的较多的就是C家的formal工具。接下来介绍一下lec过程中遇到的问题以及debug手段。...

sinat_27691203的博客 7703

Hadoop3.X分布式高可用集群部署

一、部署规划 1.1 版本说明 软件 版本 操作系统 CentOS Linux release 7.8.2003 (Core) hadoop hadoop-3.3.1 JAVA jdk-8u271-linux-x64 1.2 集群规划 hostname IP 组件 master 172.16.20.200 NameNode ZKFailoverController secondmaster 172.16.20.201 NameNode

wangshui898的专栏 1264

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 281

[Hadoop]一、Hadoop3.x高可用集群

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。(1)NameNode:存储文件的元数据信息,如文件名、目录结构、文件属性(生成时间、副本数、文件权限等)、每个文件的块列表和块所在的DataNode等。(2)DataNode:在本地文件系统中存储文件块数据,以及块数据的校验和。(3)SecondaryNameNode:每隔一段时间对NameNode元数据备份(在高可用模式中不需要)。

weixin_44428807的博客 1119

保姆级避坑指南:在openEuler 22.03 LTS上用kubeadm 1.32.2部署K8s集群(含阿里云镜像加速)

本文提供在openEuler 22.03 LTS上使用kubeadm 1.32.2部署Kubernetes集群的详细指南,涵盖系统准备、容器运行时适配、kubeadm配置及集群初始化等关键步骤。特别针对openEuler系统的特殊性,解决软件源配置、cri-dockerd编译安装、阿里云镜像加速等常见问题,帮助用户高效完成K8s集群部署。

weixin_28312391的博客 272

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

本文通过15个实战案例,系统讲解VSCode进行Python开发的环境配置、编码技巧、调试方法及性能优化,帮助初学者快速构建专业开发环境。

赶紧的博客 3726

原生Hadoop3.X高可用配置方式

Hadoop3.X版本,在2017年左右就有了第一个alpha版本,但是那个时候刚出来,所以没有人使用,到2018年3.0.0版本作为第一个3,X正式发布,截止当前本文书写时间,3.X版本已经发展到了3.4,在Hadoop的顶层设计上最大的区别就是在2.X的时候,高可用机制只允许一个在工作中,一个在备用,但是3.X的hadoop允许最多存在五套高可用节点。当然,官方推荐最多三套,自带的MR计算框架也由原来的纯磁盘运算加入了内存运算的设计。 在给大家介绍3.X如何搭建集群之前,要先给大家说一些理论上的东西,当

别人笑我太疯癫,我笑他人看不穿。 1825

【图像超分】论文精读:SRConvNet: A Transformer-Style ConvNet for Lightweight Image Super-Resolution

本文提出了一种轻量级图像超分辨率重建方法SRConvNet,结合了卷积神经网络和Transformer的优势。针对传统Transformer计算复杂度高的问题,设计了傅立叶调制注意力(FMA)替代自注意力机制,通过区域频率空间调制实现高效的全局依赖建模;同时引入动态混合层(DML),采用混合尺度动态卷积结合通道拆分机制增强局部特征提取。实验表明,SRConvNet在计算效率和参数数量上显著优于现有轻量级超分方法,同时保持了优异的重建性能。该方法为移动端部署提供了有效的解决方案,在精度与复杂度间取得了良好平衡

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 806

Hadoop3.x高可用集群搭建流程

本文基于尚硅谷Hadoop3.x搭建高可用集群文档,hadoop版本为hadoop3.1.3,用于记录自己实操部署的过程和可能存在的问题。

weixin_43540084的博客 1738

【AutoSAR CAN】04 - 如何使用Davinci Configurator Pro工具配置CAN的波特率

改参数为Tx Arbitration start delay value ,可用于延迟仲裁过程的起始点,用来补偿CAN收发器及线路的传输延迟,以优化传输性能。有关详细信息,请参阅硬件手册。该参数指定采样点模式,即选择多少个采样点的数量,如果选择了每比特三个样本选项,则该点标记第三个样本的位置;我们要配置CAN的波特率,其实就是要弄明白 CAN 控制器的位时序即可,具体的理论部分和EB的配置部门可参考文章《该参数表示传播延迟有多少个时间单位Tq,即上文中的Propagation delay/PROGSEG。.

2601

rk3588主板PDM接口接数字MIC录音

本文介绍了Rockchip 3588平台上6麦克风PDM接口的硬件连接与软件调试过程。硬件方面展示了PDM0_CLK0_M0时钟脚和三组数据脚的连接方案。软件配置包括设备树修改,生成声卡节点,并提供了6通道录音命令示例。文章重点分析了两个常见问题:录音无声(需检查供电、接线和波形)和通道数据缺失(需正确配置rockchip,path-map寄存器映射)。最后通过Audition工具验证录音文件,确认各通道工作正常。调试过程完整展现了从硬件连接到软件配置的完整流程。

m0_60805802的博客 1011

Hadoop 3.x高可用集群部署(0基础勿看)

集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。补充:若在Hadoop启动过程找不到JAVA_HOME就到/export/service/hadoop-3.3.4/etc/hadoop/hadoop-env.sh文件手工配置JAVA_HOME。(1)在/export/service/zookeeper/目录下创建zkData。

m0_64142366的博客 1231

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

Hadoop 教程 3.x 版本的HA高可用配置和部署

在Hadoop 3.x版本中配置高可用(HA)主要涉及NameNode的高可用性设置,以消除单点故障问题。

qq_33240556的博客 651

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Hadoop3x高可用集群配置手册

集群规划 本次安装拟使用的各软件版本如下 CentOS 7.6 Zookeeper 3.6.3 Hadoop 3.2.2 Hive 3.1.2 Spark 3.0.2 Sqoop 1.4.7 MySQL 8.0.21 机器规划 机器名称 zookeeper journalnode namenode datanode yarn mysql hive spark hadoop101 Y Y Y Y Y Y Y Y hadoop102 Y Y Y Y Y Y hadoop1

坚哥笔记 1418

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hadoop3.X 高可用架构配置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

weixin_38335560的博客 1685

Hadoop 3.x 集群部署:高可用配置与 YARN 资源调度优化(附脚本)

容器内存分配需满足: $$ \text{Container Memory} = \min \left( \text{CLUSTER_MAX}, \max \left( \text{MIN_ALLOC}, \lceil \frac{\text{TASK_MEM}}{\text{ALLOC_UNIT}} \rceil \times \text{ALLOC_UNIT} \right) \right) $$ 其中 $\text{ALLOC_UNIT}$ 为最小分配单元(默认1024MB)

gredfdfssdf的博客 440

Apache Hadoop 3.x 版本的HA高可用配置和部署

本文主要讲解 Apache Hadoop 3.x 版本的HA高可用配置和部署 本文在优快云上发布,原始链接:https://blog.csdn.net/yang_shibiao/article/details/123831724 在其他网站上均为盗版

yang_shibiao的博客 2599

从单点故障到高可用:在Ubuntu 22.04上一步步将Hadoop 3.x升级为HA集群(含ZooKeeper 3.8配置)

本文详细介绍了在Ubuntu 22.04上将Hadoop 3.x从单点架构升级为高可用(HA)集群的完整搭建过程,包括ZooKeeper 3.8的配置优化。通过实战案例展示了HA架构如何将故障恢复时间从小时级压缩到秒级,提升HDFS读写性能40%以上,并降低运维成本23%。

weixin_29064103的博客 340

Ubuntu搭建Hadoop3.X分布式和高可用集群,一步步深入

本文介绍了在Ubuntu操作系统上搭建Hadoop 3.x分布式和高可用环境的步骤。首先解释了Hadoop 3.x的架构和核心组件。然后,详细讲解了如何配置Ubuntu网络和主机名,安装Java和SSH,并生成SSH密钥。接下来,引导用户通过安装和配置Hadoop的各个组件(如HDFS、YARN和MapReduce)来搭建分布式集群。通过本文的指导,读者将能够快速地在Ubuntu上搭建Hadoop 3.x分布式和高可用环境。

qq_53663722的博客 4907

hadoop3.x高可用安装

这里写自定义目录标题The number of milliseconds of each tickThe number of ticks that the initialsynchronization phase can takeThe number of ticks that can pass betweensending a request and getting an acknowledge...

qq_18822205的博客 673

HADOOP3.X-HA安装

HADOOP3.x-HA 安装教程

wn_96的博客 1288

Centos 7 Hadoop3.x HA 高可用搭建教程

Hadoop3.x HA 高可用搭建教程

qq_40076192的博客 4572

Hadoop3.3.6高可用集群搭建

在上一篇文章中《Hadoop3.x入门-搭建3节点分布式集群》只是一个简单的测试的分布式集群,并不是高可用的,也就是说当namenode或者resourcemanager节点挂掉,hadoop的功能就无法使用了,所以无法应用到生产环境中。在上一篇文章中《Hadoop3.x入门-搭建3节点分布式集群》只是一个简单的测试的分布式集群,并不是高可用的,也就是说当namenode或者resourcemanager节点挂掉,hadoop的功能就无法使用了,所以无法应用到生产环境中。解决方法:安装插件psmisc。

qq_28604399的博客 1046

Hadoop-HA-3.3.3高可用集群搭建

hadoop最新版本的HA高可用集群搭建流程

qq_39604679的博客 4002

Hadoop: High Available

即HDFS 支持一主一备的架构最多支持 5 个,官方推荐使用 3 个基于Hadoop3.x. 总的来说就是要借助Zookeeper来实现高可用,然后就是编辑Hadoop的配置文件已实现高可用cuiyaonan2000@163.com。

难得糊涂 1164

Hadoop高可用集群搭建

本文详细介绍了基于CentOS 7搭建Hadoop 3.X高可用集群的全流程。首先明确了环境要求,包括CentOS 7.x、JDK 8+、Zookeeper 3.7+和Hadoop 3.X等基础组件,并提供了集群节点规划方案。接着指导完成网络配置、SSH免密登录等准备工作。在Zookeeper集群部署环节,详细说明了安装配置、节点同步和启动验证步骤。文章重点解析了Hadoop各核心配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml等)的关键参数设置。最后介绍了集群启

qq_42773076的博客 1009
上一篇: 压缩与存储
下一篇: Ganglia在linux上的下载安装
First_____
博客等级 码龄6年 132粉丝 150原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值