Hadoop大数据技术原理与应用-第四章MapReduce分布式计算框架

4 篇文章 0 订阅
订阅专栏

4.1 MapReduce 概述

4.1.1 MapReduce 核心思想

MapReduce的核心思想是“分而治之”。所谓“分而治之”就是把一个复杂的问题,按照一定的“分解"方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,把各部分的结果组成整个问题的结果,这种思想来源于日常生活与工作时的经验,同样也完全适合技术领域。
MapReduce作为一种分布式计算模型,它主要用于解决海量数据的计算问题。使用MapReduce分析海量数据时,每个MapReduce程序被初始化为一个工作任务,每个工作任务可以分为MapReduce两个阶段,具体介绍如下。

  • Map阶段:负责将任务分解,即把复杂的任务分解成若干个“简单的任务”来并行处理,但前提是这些任务没有必然的依赖关系,可以单独执行任务。
  • Reduce阶段:负责将任务合并,即把Map阶段的结果进行全局汇总。
    在这里插入图片描述

4.1.2 MapReduce 编程模型

MapReduce编程模型借鉴了函数式程序设计语言的设计思想,其程序实现过程是通过map()和reduce()函数来完成的。从数据格式上来看,map()数接收的数据格式是键值对,产生的输出结果也是键值对形式,代duce()孓数会将map0数输出的键值对作为输人,把相同key值的value进行汇总,输出新的键值对。
在这里插入图片描述
对于图4一3描述的MapReduce简易数据流模型说明如下:

  1. 原始数据处理成**键值对<K1,V1>**形式。
  2. 将解析后的键值对<K1,V1>传给map()函数,map()函数会根据映射规则,将键值对<K1,V1>映射为一系列中间结果形式的键值对<K2,V2>
  3. 将中间形式的键值对<K2,V2>形成<K2,{V2,……}>形式传给 reduce()函数 处理,把具有相同key的value 合并 在一起,产生新的键值对<K3,V3>,此时的键值对 <K3,V3>就是最终输出的结果。
    这里需要说明的是,对于某些任务来说,可能不一定需要Reduce过程,也就是说,MapReduce的数据流模型可能
    只有Map过程
    ,由Map产生的数据直接被写人HDFS中。但是,对于大多数任务来说,都是需要Reduce过程的,并且可能由于任务繁重,需要设定多个Reduce,例如,下面是一个具有多个Map和Reduce的MapReduce模型,具体如图4一4
    在这里插入图片描述
    图4一4演示的是含有3个Map2个Reduce的MapReduce程序,其中,由Map产生的相关key的输出都会集中到Reduce中处理,而Reduce是最后的处理过程,其结果不会进行第二次汇总。

4.1.3 MapReduce 编程实例——词频统计

假设有文件4-1和文件4-2两个文本文件,这两个文本文件位于HDFS中。
文件4-1 text1.txt
Hello World
Hello Hadoop
Hello itcast
文件4-2 text2.txt
Hadoop MapReduce
MapReduce Spark
根据MapReduce编程模型,那么单词计数的实现过程,如图4一5所示。
在这里插入图片描述
在图4-5中,首先,MapReduce通过默认组件TextlnputFormat将待处理的数据文件(如text1.txt和text2.txt),把每一行的数据都转变为<key,value>键值对(其中,对应key为偏移量,value为这一行的文本内容);其次,调用map()方法,将单词进行切割并进行计数,输出键值对作为Reduce阶段的输人键值对;最后,调用reduce()方法将单词汇总、排序后,通过TextOutputFormat组件输出到结果文件中。

4.2 MapReduce 工作原理

4.2.1 MapReduce 工作过程

在这里插入图片描述
分片、格式化数据源
输人Map阶段的数据源,必须经过分片和格式化操作。其中:
- 分片操作:指的是将源文件划分为大小相等的小数据块(Hadoop2.x 中默认128MB),也就是分片(split-逻辑分块,而block物理分块,两者默认情况是一一对应的),Hadoop会为每一个分片构建一个Map任务,并由该任务运行自定义的map()数,从而处理分片里的每一条记录;
- 格式化操作:将划分好的分片(split)格式化为键值对<key,value>形式的数据,其中,key代表偏移量,value代表每一行内容。
执行MapTask
每个Map任务都有一个内存缓冲区(缓冲区大小100MB),输人的分片(split)数据经过Map任务处理后的中间结果会写人内存缓冲区中。如果写人的数据达到内存缓冲的國值(80MB),会启动一个线程将内存中的溢出数据写人磁盘,同时不影响map中间结果继续写人缓冲区。在溢写过程中,MapReduce框架会对key进行排序,如果中间结果比较大,会形成多个溢写文件,最后的缓冲区数据也会全部溢写人磁盘形成一个溢写文件,如果是多个溢写文件,则最后合并所有的溢写文件为一个文件·
执行Shuffle过程
MapReduce工作过程中,Map阶段处理的数据如何传递给Reduce阶段,这是MapReduce框架中关键的一个过程,这个过程叫作Shuffle.Shuffle会将MapTask输出的处理结果数据分发给ReduceTask,并在分发的过程中,对数据按key进行分区和排序。关于Shuffle过程的具体机制.详见4.2.节。
执行ReduceTask–合并
输人ReduceTask的数据流是**<key,{value list}>形式,用户可以自定义reduce()方法进行逻辑处理,最终以<key,value>**的形式输出·
写入文件
MapReduce框架会自动把ReduceTask生成的<key,value>传入OutputFormat的write方法,实现文件的写入操作。

4.2.2 MapTask 工作原理

MapTask作为MapReduce工作流程的前半部分,它主要经历了5个阶段,分别是Read阶段、Map阶段、Collect阶段、Split阶段和Combine阶段,如图4.7所示。
在这里插入图片描述

  1. Read阶段:MapTask通过用户编写的RecordReader,从输人的InputSplit中解析出一个个key/value。
  2. Map阶段:将解析出的key/value交给用户编写的map()函数处理,并产生一系列新的key/value
  3. Collect阶段:在用户编写的map()函数中,数据处理完成后,一般会调用outputCollector.collect0输出结果,在该函数内部,它会将生成的key/value分片(通过调用partitioner),并写人一个环形内存缓冲区中。
  4. Spill阶段:即“溢写”,当环形缓冲区后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写人本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作.
  5. Combine阶段:当所有数据处理完成以后,MapTask会对所有临时文件进行一次合并,以确保最终只会生成一个数据文件

4.2.3 PreduceTask 工作原理

ReduceTask的工作过程主要经历了5个阶段,分别是Copy阶段、Merge阶段、Sort阶段、Reduce阶段和Write阶段,如图4.8所示。
在这里插入图片描述

  1. Copy阶段:Reduce会从各个MapTask上远程复制一片数据,并针对某一片数据,如果其大小超过一定國值,则写到磁盘上,否则直接放到内存中。
  2. Merge阶段:在远程复制数据的同时,ReduceTask会启动两个后台线程,分别对内存磁盘上的文件进行合并,以防止内存使用过多或者磁盘文件过多。
  3. Sort阶段:用户编写reduce()方法输人数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
  4. Reduce阶段:对排序后的键值对调用reduce()方法,键相等的键值对调用一次reduce()方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写人到HDFS中。
  5. Write阶段:reduce()函数将计算结果写到HDFS上。

4.2.4 Shuffle 工作原理

Shuffle是MapReduce的核心,它用来确保每个Reducer的输人都是按键排序的。它的性能高低直接决定了整个MapReduce程序的性能高低。接下来,通过一个图来描述Shuffle过程,具体如图4-9所示。
在这里插入图片描述
在图1一9中,MapReduce阶段都涉及了Shuffle机制,接下来,分别进行分析,具体如下:

  1. Map阶段
    1. MapTask处理的结果会暂且放人一个内存缓冲区中(该缓冲区默认大小是100(B),当缓冲区快要溢出时(默认达到缓冲区大小的80%),会在本地文件系统创建一个溢出文件,将该缓冲区的数据写人这个文件。
    2. 写人磁盘之前,线程会根据ReduceTask的数量,将数据分区,一个Reduce任务对应一个分区的数据。这样做的目的是为了避免数据倾斜(有些reduce任务分配到大量数据,而有些reduce任务分到很少的数据,甚至没有分到数据的尴尬局面)。
    3. 分完数据后,会对每个分区的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combine操作,这样做的目的是尽可能少地执行数据写人磁盘的操作。
    4. 当Map任务输出最后一个记录时,可能有很多溢出文件,这时需要将这些文件合并,合并的过程中会不断地进行排序和Combine操作,其目的有两个:一是尽量减少每次写人磁盘的数据量;二是尽量减少下一复制阶段网络传输的数据量。最后合并成了一个已分区且已排序的文件。
    5. 将分区中的数据复制给对应的Reduce任务。
  2. Reduce阶段
    1. Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果Reduce阶段接收的数据量相当,则直接存储在内存中,如果数据量超过了该缓冲区大小的一定比例,则对数据合并溢写到磁盘中。
    2. 随着溢写文件的增多,后台线程会将它们合并成一个更大的有序的文件,这样做是为了给后面的合并节省时间。
    3. 合并的过程中会产生许多的中间文件(写入磁盘了),但MapReduce会让写人磁盘的数据尽可能地少,并且最后一次合并的结果并没有写人磁盘,而是直接输人到reduce函数。

4.4 MapReduce 运行模式

MapReduce程序的运行模式主要有如下两种。

  1. 本地运行模式:在当前的开发环境模拟MapReduce执行环境,处理的数据及输出结果在本地操作系统
  2. 集群运行模式:把MapReduce程序打成一个jar包,提交至YARN集群上去运行任务。由于YARN集群负责资源管理和任务调度,程序会被框架分发到集群中的节点上并发地执行,因此处理的数据和输出结果都在HDFS中。集群运行模式只需要将MapReduce程序打成jar包上传至集群即可,比较简单

4.5 MapReduce性能优化策略

使用Hadoop进行大数据运算,当数据量极大时,那么对MapReduce性能的调优重要性不言而喻,尤其是Shuffle过程中的参数配置对作业的总执行时间影响特别大。下面总结一些和MapReduce相关的性能调优方法,主要从5个方面考虑:数据输人、Map阶段、Reduce阶段、Shuffle阶段和其他调优属性,

  1. 数据输入
    在执行MapReduce任务前,将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载的次数,而任务的装载比较耗时,从而导致MapReduce运行速度较慢。因此采用CombineTextInputFormat来作为输人,解决输人端大量的小文件场景。
  2. Map阶段
    1. 减少溢写(spill)次数:通过调整io.sort.mb及sort.split.percent参数值,增大触发spill的内存上限,减少split次数,从而减少磁盘I/O
    2. 减少合并(mee)次数:通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短mr处理时间。
    3. 在map之后,不影响业务逻辑前提下,先进行combine处理减少I/O
      上面提到的那些属性参数,都是位于mapred-default.xml文件中,这些属性参数的调优方式如表4一1所示。
      在这里插入图片描述
  3. Reduce阶段
    1. 合理设置map和reduce数:两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间太多,会导致map和reduce任务间竞争资源,造成处理超时等错误.
    2. 设置map和reduce共存:调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间·
    3. 规避使用reduce:因为reduce在用于连接数据集的时候将会产生大量的网络消耗。通过将MapReduce参数setNumReduceTasks设置为0来创建一个只有map的作业。
    4. 合理设置reduce端的buffer:默认情况下,数据达到一个阈值的时候,buffer中的数据就会写人磁盘,然后reduce会从磁盘中获得所有的数据。也就是说,buffer和reduce是没有直接关联的,中间多一个写磁盘一·读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置.使得buffer中的一部分数据可以直接输送到reduce,从而减少I/O开销。这样一来,设置buffer需要内存,读取数据需要内存,red计算也要内存,所以要根据作业的运行情况进行调整。
      上面提到的属性参数,都是位于mapred-default.xml文件中,这些属性参数的调优方式如表4一2所示。
      在这里插入图片描述
  4. Shuffle阶段
    Shuffle阶段的调优就是给Shuffle过程尽量多地提供内存空间,以防止出现内存溢出现象,可以由参数mapred.child.java.opts来设置,任务节点上的内存大小应尽量大。
    上面提到的属性参数,都是位于mapred-site.xml文件中,这些属性参数的调优方式如表4.3所示。

在这里插入图片描述

  1. 其他调优属性
    除此之外,MapReduce还有一些基本的资源属性的配置,这些配置的相关参数都位于mapred-default.xml文件中,可以合理配置这些属性提高MapReduce性能,表4一4列举了部分调优属性。
    在这里插入图片描述
大数据讲课笔记5.1 初探MapReduce
howard2005的专栏
10-08 1194
1. 理解MapReduce核心思想; 2. 掌握MapReduce编程模型; 3. 理解MapReduce编程实例——词频统计
Hadoop小白初识MapReduce-如何实现分布式计算简单介绍
weixin_42578727的博客
04-09 498
简介mapreduce是如何实现分布式计算(执行流程) mapreduce由map阶段和reduce阶段组成,map的主要作用是“映射”,在处理数据任务时被称为mapper模块,reduce则表示为“归约”,其在计算时被称为reducer模块。 那mapreduce(简称**“MR”**)到底是如何进行超大数据量的分布式计算的呢? 首先我们需要介绍一下MR中的主要组成: (1).Mapper:映射...
Hadoop实战之路——第四章 使用Eclipse编写Hadoop程序
老象的专栏
05-29 2195
4.1 使用VNC远程桌面连接Linux        下面以centOS6.4为例进行
Hadoop权威指南第四章学习笔记(超详细)
weiqiang2的博客
02-08 387
第四章 Hadoop的I/O操作 4.1 数据的完整性 当数据量达到hadoop处理的极限时,可能会破坏数据的完整性。 检测数据完整性的常见措施: 匹配校验和(第一次引入系统时计算的校验和 是否等于 通过不可靠通道时计算出来的校验和,常用的校验方式...
MapReduce框架原理
Movle
05-05 545
1.1 MapReduce工作流程 1.流程示意图: 2.流程详解     上面的流程是整个mapreduce最全工作流程,但是shuffle过程只是从第7步开始到第16步结束,具体shuffle过程详解,如下: (1)maptask收集我们的map()方法输出的kv对,放到内存缓冲区中 (2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件...
大数据快速入门(05):MapReduce 编程模型赏析
天道酬勤
10-12 408
一、Hadoop 诞生的传奇故事 (上图是 Doug Cutting,hadoop 之父) 1985年,Cutting 毕业于美国斯坦福大学。 Cutting 的第一份工作是在 Xerox 做实习生,为激光扫描仪上的操作系统开发屏幕保护程序,这也是他最早的“平台”级的作品。 Cutting 却不满足于此,于是他开始踏入搜索领域,让搜索技术可以为更多人所用。于是1997年底,他用 java 开发出了 Lucene,一个非常伟大的项目。 2004年,Cutting 和同为程序员出身的 Mike Cafarel
Hadoop大数据技术原理应用》课后习题答案
12-03
Hadoop大数据技术原理应用》课后习题答案是关于Hadoop大数据技术原理应用的基础知识问答集,涵盖了Hadoop的基本概念、HDFS分布式文件系统、MapReduce分布式计算框架、Zookeeper分布式协调服务等方面的知识点。...
大学生大数据技术原理应用章节测验期末考试答案.docx
12-17
4. 大数据技术原理应用中有很多新兴的技术,如Spark、Hadoop、HBase等,这些技术都是大数据时代的产物。 5. 在大数据产品中,每种产品都有特定的应用场景,例如批处理、实时处理等。HBase表中的行可以通过某列的...
大数据技术原理应用实验
最新发布
04-08
第四章 分布式离线计算框架MapReduce 85 实验十一 MapReduce单词计数 85 实验十二 MapReduce数据去重 94 实验十三 MapReduce单表关联 103 第五章 统一资源管理系统YARN 114 实验十四 YARN命令基础 114 实验十五 YARN...
大数据技术原理应用 林子雨
06-14
Hadoop是一个开源的分布式计算框架,核心组件包括分布式文件系统HDFS和MapReduce,HDFS是谷歌文件系统GFS的开源实现,MapReduce是针对谷歌MapReduce的开源实现。Hadoop具有高可靠性、 高效性、高可扩展性、高容错性...
分布式计算模型MapReduce的学习
weixin_43288858的博客
06-10 1118
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上MapReduce是采用一种分而治之的思想设计出来的分布式计算框架那什么是分而治之呢?比如一复杂、计算量大、耗时长的的任务,暂且称为“大任务”;此时使用单台服务器无法计算或较短时间内计算出结果时,可将此大任务切分成一个个小的任务,小任务分别在不同的服务器上并行的执行;最终再汇
实训任务4:Hadoop综合操作
m0_72168501的博客
12-08 792
Mapduce java api实训任务
MapReduce整理
weixin_50405727的博客
02-23 762
文章目录1. MapReduce 概述2. MapReduce的优缺点2.1. 优点2.2. 缺点3. MapReduce 核心思想3.1. MapReduce 计算流程3.2. MapReduce 编程规范4. MapReduce [反]序列化5. MapReduce 框架原理5.1. 切片与 MapTask 并行度决定机制5.2. ReduceTask 并行度决定机制5.3. Job提交流程源码解析5.4. FileInputFormat 切片源码解析6. MapReduce 切片机制6.1. File
MapReduce系统学习(2)
MyySophia的博客
08-24 604
Shuffle过程详解 shuffer是一个网络拷贝的过程,是指通过网络把数据从map端拷贝到reduce端的过程. map阶段 最左边有一个inputsplit,最终会产生一个map任务,map任务在执行的时候会k1,v1转化为k2,v2,这些数据会先临时存储到一个内存缓冲区中,这个内存缓冲区的大小默认是100M (io.sort.mb属性),当达到内存缓冲区大小的80%(io.sort.spill.percent)也就是80M的时候,会把内存中的数据溢写到本地磁盘中(mapred.local....
第3章 Hadoop分布式计算框架-MapReduce
qq_52331221的博客
04-19 1760
文章目录第3章 Hadoop分布式计算框架-MapReduce一:判断题二:单选题三:主观题 第3章 Hadoop分布式计算框架-MapReduce 一:判断题 1:不同的Map任务之间不能互相通信 T 二:单选题 1:MapReduce 框架提供了一种序列化键 /值对的方法 ,支持这种序列化的类能够在 Map 和 Reduce 过程中充当键或值 ,以下说法错误的是 A.实现 Writable 接口的类是值 B.实现 WritableComparable 接口的类可以是值或键 C.Hadoop
MapReduce编程实例-----词频统计(浅记)
gklive的博客
03-27 7934
实验目的: Windows系统下,通过MapReduce实现次词频统计 MapReduce编程实例-----词频统计 1)·首先,MapReduce通过默认组件TextInputFormat将待处理的数据文件(如ext1.txt和text2.txt), 把每一行的数据都转变为<key,value>键值对; 2)·其次,调用Map()方法,将单词进行切割并进行计数,输出键值对作为Reducer阶段的输入键值对 3)·最后,调用Reduce()方法将单词汇总、排序后,通过...
使用HadoopMapReduce实现数据排序
热门推荐
someby的博客
10-06 1万+
最近想系统学习大数据知识,在观看视频编写代码的时候,在数据排序的时候,出现了一些问题,一致于弄了好久才找到原因,现在记录下来,方便查看 数据输入格式: 按照我的代码逻辑,应该输出数据为 在代码处理时,计算结果却是 没有输出输入的数据,而是输出 最后保存在HDFS上的数据只是 1    1 2    2 3    3 4    4 5    5 6    6 7    7...
HadoopMapReduce运行原理(一)
Stay Focused And Work Hard !!!
03-03 1万+
一. Hadoop的知识架构图如下所示:二、MapReduce 的基本概念 1)MapReduce是什么? MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。 相对于Hadoop框架来说,其最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。 MapReduce把任务分为 map(映射)阶段和r
大数据技术应用4-4MapRuduce
m0_51679196的博客
09-03 458
MapReduce的简介
期末试题0(hadoop大数据技术应用) - 汇总
12-14
Hadoop大数据技术是当前互联网时代最常用的大数据处理平台之一,它能够处理海量的数据并且实现分布式存储和计算。在本学期的课程学习中,我们深入了解了Hadoop的基本架构和原理,包括HDFS分布式文件系统、MapReduce计算模型、YARN资源管理等核心组件。 在学习Hadoop的过程中,我们还学习了如何使用Hive和HBase这两种不同的数据存储方式,了解了它们的特点和适用场景。同时,我们也掌握了如何使用Pig和Spark等工具来进行大数据的处理和分析,包括数据清洗、转换和挖掘等操作。 在实际操作中,我们通过搭建Hadoop集群、编写MapReduce程序和使用Hive、HBase等工具来完成了大量的实验和项目,对Hadoop大数据技术有了更加深入的理解和掌握。同时,我们也学习了如何优化Hadoop集群的性能,避免出现单点故障和提高系统的稳定性。 通过本学期的学习,我对Hadoop大数据技术有了全面的了解,并且在实践中积累了丰富的经验。我相信这门课程的学习将对我的未来职业发展有着重要的帮助,我会继续不断地加强对Hadoop大数据技术的学习和应用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Hadoop大数据技术原理与应用-第一章初识Hadoop 1638
  • Hadoop大数据技术原理与应用-第四章MapReduce分布式计算框架 1233
  • python3 网络爬虫开发实战(崔庆才著)第二章 904
  • Hadoop大数据技术原理与应用-第二章搭建Hadoop集群 876
  • Hadoop大数据技术原理与应用-第三章HDFS分布式文件系统 799

分类专栏

  • Hadoop 4篇
  • python 1篇
  • 机器学习 5篇
  • 商业数据 1篇
  • 爬虫 2篇

最新评论

  • Hadoop大数据技术原理与应用-第二章搭建Hadoop集群

    不吃西红柿丶: 非常有用,感谢大佬的整理,期待后续大作

  • Hadoop大数据技术原理与应用-第一章初识Hadoop

    不吃西红柿丶: 非常有用,感谢大佬的整理,期待后续大作

  • 《机器学习实战》第三章——决策树(ID3)

    不正经的kimol君: 写的不错,学习了,学习的道路上一起进步,也期待你的关注与支持!

大家在看

  • 踏上编程之路:成为程序员后我领悟到的那些事
  • 探寻Agent AI智能体的未来:迈向全面智能化的新纪元
  • 程序员应具备的职业素养:我的见解与分享 192

最新文章

  • Hadoop大数据技术原理与应用-第三章HDFS分布式文件系统
  • Hadoop大数据技术原理与应用-第二章搭建Hadoop集群
  • Hadoop大数据技术原理与应用-第一章初识Hadoop
2021年5篇
2020年10篇
2019年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司呼和浩特百度爱采购海口百度爱采购价格舟山营销型网站建设多少钱醴陵百度竞价哪家好钦州网页设计公司中山网页制作哪家好邢台外贸网站制作哪家好大连网站搜索优化报价湛江营销型网站建设贵港企业网站建设宜宾seo多少钱贵阳SEO按天收费报价随州关键词按天计费公司抚州SEO按效果付费多少钱湘西推广网站哪家好坂田网站建设多少钱揭阳关键词排名包年推广公司同乐关键词按天收费报价昌都SEO按天扣费推荐那曲网站seo优化公司潮州至尊标王哪家好舟山seo网站推广推荐黔东南百搜标王多少钱坑梓seo排名多少钱遂宁建设网站价格玉溪营销型网站建设价格西宁网站关键词优化公司霍邱设计网站文山网站推广泰州网站优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化