《Hadoop实战》第一部分阅读笔记

《大数据基础——基于Hadoop与Spark》课后习题——第一章部分答案 仅用于我个人的学习。书籍为人民邮电出版社的《大数据技术基础——基于Hadoop与Spark》。课后习题选择是我个人认为有用的。记录下来是为了督促我学习:)共好 阅读详情

Hadoop的一些基础概念。

Hadoop是一个开源的框架,可编写和运行分布式应用管理大规模数据。Hadoop强调把代码向数据迁移,而不是相反(SETI @ home),向外发展。

MapReduce的一个简单的例子就是,统计一组文档的每个单词的出现的次数。将文档分成好几个部分,然后给不同的计算机执行,分词。第二阶段,将它们分到不同的计算机上进行汇总处理。MapReduce执行分为两阶段,mapping和reducing。每阶段定义一个函数,成为mapper,reducer。在mapping阶段,获取输入数据,并将数据单元装入mapper。在reducing阶段,reducer处理来自mapper的所有输出,并给出最终结果。举例,mapper后,会出现很多(假设共5个)的<foo, 1>,将它们送给reducer,会合并成<foo, 5>。

当使用到多个reducer时,我们需要一种策略来决定应该把输出的键/值对给谁。比如<foo,1>给f开头的分区,<hoo>给h开头的分区。这里就需要Partitioner,重定向Mapper输出。如hash散列等的方式。在很多场景下,可以在mapper分发前,首先在本地进行一下“本地Reducer”。这时需要用到Combiner。如输出500次的<the, 1>,比不上输出一次的<the,500>。

接下来,看下Hadoop的构成。包括以下几种:

NameNode。Hadoop采用主从结构。分布式存储系统被称为Hadoop文件系统,即HDFS。NameNode位于HDFS的主端,指导从端的DataNode执行底层操作。NameNode是HDFS的书记员,跟踪文件如何被分割为文件块,而这些块又被哪些节点存储。驻留NameNode的节点唯一,不做其他工作。也带来一个负面影响——Hadoop集群的单点失效。

DataNode。每个从节点都会驻留一个DataNode守护进程,来执行分布式文件系统繁重的IO操作——将HDFS的文件读取或写入到本地的文件系统中。一个文件块会被存储多次,实现冗余备份。


Secondary NameNode。独占一台机器,做备份,降低数据丢失的风险。

JobTracker。应用程序和Hadoop的纽带。负责确定执行的计划,包括处理哪些文件、为不同的任务分配节点以及监控所有任务的运行。只有一个JobTracker进程,通常运行在主节点上。

TaskTracker。管理每个任务在每个节点上的执行情况。


在验证上,使用SSH。这个与git在window上的安装类似。

Hadoop的配置也很方便,通过core-site.xml配置NameNode的信息,在mapred-site.xml配置JobTracker信息,在hdfs-site.xml配置hdfs备份等信息。

HDFS是一种文件系统,专为MapReduce这类框架下的大规模分布式数据处理而设计。可以把一个大数据集(如100TB)存为一个文件。


试着在电脑上架设hadoop,可参考这个:http://www.cnblogs.com/tippoint/archive/2012/10/23/2735532.html

在单机模式测试正常。但调成伪分布模式后出错。

通过jps指令,查看当前运行的java进程有哪些,发现datanode没有启动起来。

再查看日志啊,报错信息等,发现是修改了计算机名称出错了。到/etc/hosts里面,添加当前计算机名字与127.0.0.1的对应关系。就解决了。

注意的是,在单机模式时,输入的文件夹是本地的。但是在伪分布模式下,需要先将内容拷贝进HDFS里,才能被识别。

了解到HDFS的一些基本操作,如bin/hadoop fs -mkdir /user/hadoop , bin/hadoop fs -lsr 等。


Ubuntu 搭建Hadoop源码阅读环境 JDK,Eclipse的安装请参考:Ubuntu 安装 搭建 J2EE 开发环境 Ant安装:     下载ant:http://ant.apache.org/bindownload.cgi     解压Ant:     tar -xvzf apache-ant-1.9.2-bin.tar.gz      移动重命名: mv apache-ant-1.9.2/ ~/opt/ 阅读详情

相关推荐

Warning-[INFL_DELTA] Too many events zero delay loop

项目场景: 运用VCS工具执行仿真的时候,遇到如下错误提示,但仿真还在继续。 Warning-[INFL_DELTA] Too many events Possible zero delay loop. Too many events in the simulation at time 0 fs. 问题描述: 为什么会有这个问题; 什么导致了这个问题; 原因分析: 1、为什么会有这个问题 由于竞争条件或编码风格不明确,可能会产生零延时回路,导致仿真挂起或仿真时间无限。 2、什么导致了这个问题 举

hh199203的博客 1万+

Hadoop 学习 第一章 大数据入门

20.1.5 Hadoop 学习

bw_ustc的博客 1419

抖音直播行为规范考试

抖音直播行为规范考试

Q1642968641的博客 1万+

Hadoop学习笔记

阅读书籍《Hadoop权威指南》

qq_61788779的博客 1049

Zotero+Obsidian+Bookxnote联动让文献阅读丝滑般体验

摘录文字或图片到Obsidian

weixin_43694742的博客 1万+

【CVPR2025 DEIM】超详细!手把手训练自己的数据集教学:从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。本文在win系统上训练,最强实时目标检测算法!

本文详细介绍了CVPR2025 DEIM目标检测模型的完整使用流程。内容包含:1)源码下载与虚拟环境配置;2)Visdrone2019数据集准备与配置文件修改;3)训练参数设置及Windows系统常见问题解决方案;4)模型验证、推理测试及热力图生成方法。特别针对Windows用户提供了虚拟环境配置指导,并详细说明了数据集路径设置、参数调整等关键步骤。通过本文的指导,小伙伴可以快速掌握DEIM模型的使用方法,用于学术论文研究和实验分析。

Ai缝合怪、助力小伙伴高效发论文 7638

hadoop源码阅读方法

下载源码 apache 下载地址: http://archive.apache.org/dist/(apache的东西在这个地址下都有,很方便) hadoop 1.1.2 下载 linux 版本 .tar.gz 文件 下载完成后,解压,进入src绑定 创建源码项目 eclipse新建 web project项目 因为hadoop有用到J2EE的包, 建立java pr

abc5582的博客 4059

10倍开发者的 Dify 魔法书:从零构建全栈 AI 应用

“不懂底层算法,也能开发爆款 AI 应用吗?” 答案是:绝对可以。 Dify 正在重新定义 AI 应用的开发范式——通过可视化的低代码平台,将原本需要数周的开发周期压缩到几小时。无论你是前端、后端、产品经理,还是渴望破局的独立开发者,这都是你不可错过的红利。 我们将手把手教你利用 Dify 快速接入百模大战,零代码搭建企业级知识库,并一键发布你的专属 AI 助手、智能客服和自动化工作流。 告别重复造轮子,掌握 Dify,一个人就是一支 AI 团队。现在上车,开启你的 10 倍速开发之旅!

davidwang456的专栏 682

搭建Hadoop源代码阅读环境

本节将介绍如何创建一个Hadoop源代码工程以方便阅读源代码。总体上说,目前存在两种Hadoop源代码阅读环境搭建方法,分别是构建Maven工程和构建Java工程。两种方法各有利弊:前者可通过网络自动下载依赖的第三方库,但源代码会被分散到多个工程中进而带来阅读上的不便;后者可将所有源代码组织在一个工程中,但需要自己添加依赖的第三方库,大家可根据自己的喜好选择一种方法。本节将依次介绍这两种方法。

发展是曲折的但也是前进的 4400

leetcode134 加油站

题目如下 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说明: 如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输...

ayang818 's blog 233

西门子TP900精智系列触摸屏和三菱Q系列PLC以太网通信的组态步骤

西门子TP900精智系列触摸屏和三菱Q系列PLC以太网通信的组态步骤

Robot_PLC_HMI_Automation 6099

如何高效的阅读Hadoop源代码?Hadoop的源代码写的怎么样?

转载:GarfieldEr007的专栏 http://blog.youkuaiyun.com/garfielder007/article/details/50936415 个人谈谈阅读hadoop源代码的经验。 首先,不得不说,Hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真一次,

wer0735的博客 1362

基于STM32设计的自动追光系统(项目资料ID:2)

基于STM32设计的自动追光系统主要由光敏采集电路、单片机核心板电路和步进电机控制电路构成。通过光敏电阻采集环境光强信息,经 STM32 单片机处理后,控制步进电机转动,实现对光源的自动追踪。该系统具有响应速度快、追踪精度较高等优点,可应用于太阳能发电、智能照明等领域,为相关场景提供高效的光资源利用方案。

以培养嵌入式工程师为己任 1万+

如何高效的阅读hadoop源代码?

个人谈谈阅读hadoop源代码的经验。 首先,不得不说,hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真一次,认真阅读一次hadoop源代码,一定要有足够的心理准备和时间预期。 其次,需要注意,阅读Hadoop源代码的效率,因人而异,如果你有足够的分布式系统知识储备,看过类似的系统,则能够很快地读它...

大数据入门零基础教程学习教学 134

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hadoop实战-11-hive阅读笔记

Hadoop实战11章阅读笔记导言hive简介hive体系结构hive的数据存储hive的元数据存储hive安装、配置error logs错误日志hive表可存储的数据类型hive DDL创建表删除表修改表、分区语句创建、删除视图创建/删除函数展示描述语句数据操作 导言 hive是Hadoop的一个重要子项目,封装MapReduce编程技术,提供hive QL的类SQL的编程接口,方便快捷的访问和使用MapReduce。 hive简介 hive是一个基于Hadoop文件系统上的数据仓库结构,提供的功能:数据

hummingbird0的博客 393

STM32F407中文手册

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

如何高效的阅读hadoop源代码?(建议收藏)

原文:http://dongxicheng.org/mapreduce-nextgen/how-to-read-hadoop-code-effectively/作者:董西成整理:大数据肌肉猿个人谈谈阅读hadoop源代码的经验:首先,不得不说,hadoop发展到现在这个阶段,代码已经变得非常庞大臃肿,如果你直接阅读最新版本的源代码,难度比较大,需要足够的耐心和时间,所以,如果你觉得认真一次,认真阅...

a934079371的博客 392

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

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

Hadoop源代码阅读环境搭建

Hadoop源代码阅读环境搭建 一、说明 作为一个学习hadoop的同学。必须在本机上搭建hadoop源代码阅读环境,这样,在方便阅读源代码的同一时候也方便进行调试和源代码改动。好了。以下開始搭建好开发环境。 1.环境说明:hadoop 版本号:1.2.1、 IDE:eclipse、操作系统:centos 2.网上有人是通过eclipse的新建项目指定文...

adr5970的博客 339

Hadoop阅读笔记(五)——重返Hadoop目录结构

  常言道:男人是视觉动物。我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物。某些场合(比如面试、初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型。所以,第一眼,先走外貌协会的路线,打量一番,再通过望闻问切等各种手段获取关于你的大量信息(如谈吐、举止等),以快速建立起对于你的认识。   待人接物如此,搞技术也不例外,起码我是这样的。把玩了一番...

baixieyun4655的博客 179

python写的hadoop实战_hadoop实战 pdf

hadoop实战手册为3个部分,深入浅出地介绍了Hadoop 框架、编写和运行Hadoop 数据处理程序所需的实践技能及Hadoop之外更大的生态系统。本书适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读参考。hadoop实战手册目录第1章 Hadoop简介1.1 为什么写《Hadoop 实战》1.2 什么是Hadoop1.3 了解分布式系统和Hadoop1.4 比较SQL 数据库和H...

weixin_39580748的博客 351

Mac搭建Hadoop源码阅读环境

1、本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3。需要安装的工具包括idea、jdk、maven、protobuf等 2、jdk,使用的版本是1.8版,在jdk官网下载jdk-8u111-macosx-x64.dmg,点击安装,一路next。 3、idea安装,略 4、maven,使用的版本是3.3.9,下载apache-maven-3.3.9...

dawujiong2967的博客 186

关于如何阅读Hadoop源代码

前言: 最近由于工作需要,开始要撸Hbase的源代码了,但是。。。悲剧的是在IDEA中一步步的跟进代码,发现被设计模式搞懵了,还有Java知识,整体框架等都是在撸代码过程中的拦路虎。有幸拜读了董老师的博客,感觉有点拨开了层层迷雾,遂转载此博客,等把Hbase修炼透彻,以此文章为证,记录在阅读Hbase源代码的点点滴滴!以下文字均处于董老师的博客:============ 个人谈谈阅读hadoop

yjq_java的专栏 1346

eclipse上hadoop源码阅读

一、获取Hadoop的源码   首先通过官网下载hadoop-2.5.2-src.tar.gz的软件包,下载好之后解压发现出现了一些错误,无法解压缩, 因此有部分源码我们无法解压 ,因此在这里我讲述一下如何通过maven来获取完整的源码: 需要说明的是,在使用maven的时候,需要先安装jdk,protoc ,如果没有安装可以参考 http://www.linuxidc.com

摩西YF拉比 399
上一篇: java发布可用程序
下一篇: ssh 公钥私钥认证原理
lightty
博客等级 码龄17年 59粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值