hadoop1.21配置+hdfs-site.xml+mapred-site.xml+Core-site.xml

Hadoop

Hadoop是一个由apache基金会所开发的分布系统基础架构。

Hadoop实现一个分布式文件系统Hadoop Distributed file System 简称HDFS

核心设计HDFS(提供文件操作和数据存储)和MapReduce(实现任务的分发、跟踪、执行、收集结果)

对于hadoop的集群来讲,可分成2类:master和salve,是由一个NameNode和若干个DataNode组成。

NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataDode管理存储的数据。

MapReduce框架是由一个单独运行在主节点的JobTracker和运行在每个集群从节点的TaskTracker共同组成。主节点负责调度构成一个作业的所有任务,这些任务分布在不通的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个job被提交时,JobTracker接到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行

 

 

目前发行的稳定版本共2个

http://archive.apache.org/dist/hadoop/core/hadoop-1.2.1/hadoop-1.2.1.tar.gz

http://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz

 

首先为hadoop-1.2.1版本

确保在你集群中的每个节点上都安装了所有必须软件:sun-JDK ssh  Hadoop gcc,必须安装,建议选择sun公司发行的java版本

ssh必须安装并且保证sshd一直运行,以便用hadoop脚本管理远端hadoop守护进程

 

实验环境

操作平台:hyper-v

操作系统:2.6.32-220.el6.x86_64 (centos6.2)

软件版本:hadoop-1.2.1 jdk-6u45-linux-x64

集群架构:包括4个节点:1个master,3个salve,节点之间局域网连接,可以互相ping通

主机名   IP                 系统版本      Hadoop node       hadoop进程名

Master   172.20.38.100      centos6.2    Master             namenode,jobtracker

Slave1   172.20.38.101      centos 6.2    Slave              datanode,tasktracker

Slave2   172.20.38.102      centos 6.2    Slave              datanode,tasktracker

Slave3   172.20.38.103      centos 6.2    Slave              datanode,tasktracker

 

安装步骤

下载:jdk-6u45-linux-x64  hadoop-1.2.1.tar.gz

配置网络和主机名及用户

配置主机名,以master为例,slave1 slave2slave3,改完后重启生效

[hadoop@master hadoop-1.1.2]$ cat/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=master

 

在master上配置hosts解析,slave上相同配置

172.20.38.100 master

172.20.38.101 slave1

172.20.38.102 slave2

172.20.38.103 slave3

 

在所有服务器上建立相同的用户hadoop,将主目录做为安装目录:/home/hadoop/

 

 

Jdk安装(root安装,其他slave机器也必须都安装)

[root@master soft]# /bin/bash  jdk-6u45-linux-x64.bin

[root@master soft]# mv jdk1.6.0_45/ /usr/local/jdk6

 

添加java环境变量

[root@master soft]# vim /etc/profile

在文件最后面加上如下内容

export PATH=/usr/local/jdk6/bin:/usr/local/jdk6/jre/lib:/usr/local/jdk6/jdk/lib:$PATH

使环境变量生效:

[root@master soft]# source /etc/profile

 

将java环境复制到slave上,并是配置生效

[root@master ~]# scp -r /usr/local/jdk6 root@172.20.38.101:/usr/local/

[root@master ~]# scp -r/etc/profile root@172.20.38.101:/etc/profile

 

验证java

[root@master ~]# java-version

java version"1.6.0_45"

Java(TM) SE RuntimeEnvironment (build 1.6.0_45-b06)

Java HotSpot(TM) 64-BitServer VM (build 20.45-b01, mixed mode)

[root@master ~]# javac-version

javac 1.6.0_45

 

Ssh配置

在hadoop启动以后,namenode是通过ssh来启动和停止各个datanode上的各种守护进程,这就必须要在节点之间执行指令的时候是不需要输入密码的形式,故需要配置ssh运用无密码弓腰认证的形式。

本例中,master是主节点,须要连接slave1、slave2、slave3.

 

在master主机生成密钥对(全部默认,回车)

[root@localhost hadoop]# su hadoop

[hadoop@localhost ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key(/home/hadoop/.ssh/id_rsa):

Created directory '/home/hadoop/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in/home/hadoop/.ssh/id_rsa.

Your public key has been saved in/home/hadoop/.ssh/id_rsa.pub.

The key fingerprint is:

66:af:37:80:3a:ba:28:8b:5a:ff:33:ab:39:77:c4:afhadoop@localhost

The key's randomart image is:

+--[ RSA 2048]----+

|                |

|                |

|                |

|                |

|       oS        |

|      .o+.       |

|  .  . . o.     |

|oo .+.+ ..+     |

|B.oo+*o=Eo .    |

+-----------------+

[hadoop@localhost ~]$ cat ~/.ssh/id_rsa.pub

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEAu4mpWdP8ylXdM9KuWtzf0avxXt+2xnegHlCZaZdV+DNgtGSvpCU5pFKzjR9qvRH8epAf1usc2+KfMo6w5LpDK9wQ+dRhGoHTW0x1KN66KI6VniVV/kZqsy12K0nmBW1SMnNhBXudH9e4adkhLwkSFKpFsxYtrO7TvsuxbgeuwGk7hTXEQfPk0Zs6ZmlQILlL1BYP2sHl9BM/MD5KN2ERCq2YcyRVCCOxeQcP/HIqFWZOF4vLLts5TOJlGWdmPFRHwCRcFsOSCdXajJRHfYura1M9tWd3up/xI68710RouUoGuYikWHB3+Znw2hcYK2RI3SxdNaC4t/lt9JJ/0InJEw==hadoop@localhost

 

将master公钥添加到远程slave主机上

[hadoop@localhost ~]$ cp ~/.ssh/id_rsa.pub~/.ssh/authorized_keys

[hadoop@localhost ~]$ chmod 600 ~/.ssh/authorized_keys

[hadoop@localhost ~]$ scp -r ~/.ssh hadoop@172.20.38.101:/home/hadoop/

注:authorized_keys权限设置为600,否则会出问题

 

测试登陆

[hadoop@localhost ~]$ ssh slave3

The authenticity of host 'slave3 (172.20.38.103)'can't be established.

RSA key fingerprint is9a:31:73:88:08:85:ae:26:56:5f:4c:9f:16:36:b4:a6.

Are you sure you want to continue connecting (yes/no)?yes

Warning: Permanently added 'slave3,172.20.38.103'(RSA) to the list of known hosts.

 

安装hadoop-1.2.1

[hadoop@master soft]$ tar-zxvf hadoop-1.2.1.tar.gz

[hadoop@master soft]$ mvhadoop-1.2.1 /home/hadoop/hadoop-1.2.1

添加环境变量,root用户添加

[root@master ~]# echo 'exportPATH=/home/hadoop/hadoop-1.2.1/bin:$PATH' >> /etc/profile

[root@master ~]# source/etc/profile

 

集群配置,在所有节点上配置相同(配置完成后scp同步)

配置conf/hadoop-env.sh文件

[hadoop@master ~]$ cd /home/hadoop/hadoop-1.2.1/conf

[hadoop@master conf]$echo 'exportJAVA_HOME=/usr/local/jdk6/' >> hadoop-env.sh

 

配置文件: core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>

 

<!-- Put site-specific property overrides in thisfile. -->

 

<configuration>

       <property>

               <name>fs.default.name</name>

               <value>hdfs://master:9000</value>

       </property>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>/home/hadoop/tmp</value>

       </property>

       <property>

               <name>fs.checkpoint.period</name>

               <value>60</value>

       </property>

</configuration>

注释:fs.default.name是NameNode的URI。 hdfs://主机名:端口

       hadoop.tmp.dir是hadoop的默认临时路径,最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。需要重新执行NameNode格式化命令

       fs.checkpoint.period:snn 检查nn日期的时间周期,文档为66秒,生产环境建议12小时

 

 

配置文件: mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>

 

<!-- Put site-specific property overrides in thisfile. -->

 

<configuration>

       <property>

               <name>mapred.job.tracker</name>

               <value>master:9001</value>

       </property>

</configuration>

注释:mapredjob.tracker是jobtracker的主机(或ip)和端口。主机:端口

 

配置文件:hdfs-site.xml

<configuration>

        <property>

               <name>dfs.name.dir</name>

               <value>/home/hadoop/name1, /home/hadoop/name2</value>

               <description></description>

        </property>

        <property>

               <name>dfs.data.dir</name>

                <value>/home/hadoop/data1,/home/hadoop/data2</value>

               <description></description>

        </property>

        <property>

<name>dfs.replication</name>

<value>2</value>

        </property>

</configuration>

 

注释:dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分隔的目录列表时,nametable数据将会被复制到所有目录中做冗余备份

       dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分隔的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不通设备上

      dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建会有问题

 

配置文件masters和slaves主从节点,注意最好使用主机名,并且保证机器之间通过主机名可以访问

[hadoop@localhost conf]$ cat masters

master

[hadoop@localhost conf]$ cat slaves

slave1

slave2

slave3

 

配置结束,把配置好的hadoop文件拷贝到其他集群的机器中,并且保证上面的配置对于其他机器正确,如果其他机器的java安装路径不一样,需要修改conf/hadoop-env.sh

scp -r /home/hadoop/hadoop-1.2.1 slave1:/home/hadoop/

 

root用户把环境变量同步到slave并使之生效

scp -r /etc/profile root@172.20.38.101:/etc/profile

source /etc/profile

 

 

 

hadoop启动

[hadoop@master conf]$ cd/home/hadoop/hadoop-1.2.1/bin/

[hadoop@master bin]$./start-all.sh

 

检测

Master

Slave

查看集群状态统计信息

访问master是否正常http://172.20.38.100:50070

 

 

 

常用命令

hadoop dfs -ls #列出HDFS下文件

hadoop dfs -ls in #列出HDFS下某个文档中的文件

hadoop dfs -put test.txt test #上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功

hadoop dfs -get in getin #从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录

hadoop dfs -rmr out #删除HDFS上的out目录

hadoop dfs -cat in/* #查看HDFS上in目录的内容

hadoop dfsadmin -safemode leave #退出安全模式

hadoop dfsadmin -safemode enter #进入安全模式

 

 

添加一个新的节点

在新加的节点上安装hadoop

修改hadoop/conf/master文件,加入NmaeNode主机名

在NameNode节点上修改Hadoop/conf/slaves文件,加入新加节点主机名

建立到新加节点无密码的ssh连接

运行启动命令 start-all.sh

访问http://master:50070

 

 

 

 

 

 

 

 

 

主要配置文件配置项整理

Core-site.xml

name

value

description

fs.default.name

hdfs://hadoopmaster:9000

定义hadoopmasteruri和端口

fs.checkpoint.dir

/opt/data/hadoop1/hdfs/namesecondary1

定义hadoopname备份的路径,官方文档说是读取这个,写入dfs.name.dir

fs.checkpoint.period

1800

定义name备份的备份间隔时间,秒为单位,只对snn生效,默认一小时

fs.checkpoint.size

33554432

以日志大小间隔做备份间隔,只对snn生效,默认64m

io.compression.codecs

org.apache.hadoop.io.compress.defaultcodec,
com.hadoop.compression.lzo.lzocodec,
com.hadoop.compression.lzo.lzopcodec,
org.apache.hadoop.io.compress.gzipcodec,
org.apache.hadoop.io.compress.bzip2codec
(
排版调整,实际配置不要回车)

hadoop所使用的编解码器,gzipbzip2为自带,lzo需安装hadoopgpl或者kevinweil,逗号分隔,snappy也需要单独安装

io.compression.codec.lzo.class

com.hadoop.compression.lzo.lzocodec

lzo所使用的压缩编码器

topology.script.file.name

/hadoop/bin/rackaware.py

机架感知脚本位置

topology.script.number.args

1000

机架感知脚本管理的主机数,ip地址

fs.trash.interval

10800

hdfs垃圾箱设置,可以恢复误删除,分钟数,0为禁用,添加该项无需重启hadoop

hadoop.http.filter.initializers

org.apache.hadoop.security.
authenticationfilterinitializer
(
排版调整,实际配置不要回车)

需要jobtracker,tasktracker
namenode,datanode
http访问端口用户验证使用,需配置所有节点

hadoop.http.authentication.type

simple | kerberos | #authentication_handler_classname#

验证方式,默认为简单,也可自己定义class,需配置所有节点

hadoop.http.authentication.
token.validity
(
排版调整,实际配置不要回车)

36000

验证令牌的有效时间,需配置所有节点

hadoop.http.authentication.
signature.secret
(
排版调整,实际配置不要回车)

默认可不写参数

默认不写在hadoop启动时自动生成私密签名,需配置所有节点

hadoop.http.authentication.cookie.domain

domian.tld

http验证所使用的cookie的域名,ip地址访问则该项无效,必须给

此文来自马开东博客 转载请注明出处网址: http://www.makaidong.com

所有节点都配置域名才可以。

hadoop.http.authentication.
 simple.anonymous.allowed
(
排版调整,实际配置不要回车)

true | false

简单验证专用,默认允许匿名访问,true

hadoop.http.authentication.
kerberos.principal
(
排版调整,实际配置不要回车)

http/localhost@$localhost

kerberos验证专用,参加认证的实体机必须使用http作为kname

hadoop.http.authentication.
kerberos.keytab
(
排版调整,实际配置不要回车)

/home/xianglei/hadoop.keytab

kerberos验证专用,密钥文件存放位置

hadoop.security.authorization

true|false

hadoop服务层级验证安全验证,需配合hadoop-policy.xml使用,配置好以后用dfsadmin,mradmin -refreshserviceacl刷新生效

io.file.buffer.size

131072

用作序列化文件处理时读写buffer的大小

hadoop.security.authentication

simple | kerberos

hadoop本身的权限验证,非http访问,simple或者kerberos

hadoop.logfile.size

1000000000

设置日志文件大小,超过则滚动新日志

hadoop.logfile.count

20

最大日志数

io.bytes.per.checksum

1024

每校验码所校验的字节数,不要大于io.file.buffer.size

io.skip.checksum.errors

true | false

处理序列化文件时跳过校验码错误,不抛异常。默认false

io.serializations

org.apache.hadoop.io.
serializer.writableserialization

(排版需要。实际配置不要回车)

序列化的编解码器

io.seqfile.compress.blocksize

1024000

块压缩的序列化文件的最小块大小,字节

webinterface.private.actions

true | false

设为true,则jtnntracker网页会出现杀任务删文件等操作连接,默认是false

 

 

 

 

Mapred-site.xml

 

name

value

Description

hadoop.job.history.location

job历史文件保存路径,无可配置参数,也不用写在配置文件里,默认在logs的history文件夹下。

hadoop.job.history.user.location

用户历史文件存放位置

io.sort.factor

30

这里处理流合并时的文件排序数,我理解为排序时打开的文件数

io.sort.mb

600

排序所使用的内存数量,单位兆,默认1,我记得是不能超过HADOOP_HEAPSIZE设置,否则会OOM

mapred.job.tracker

hadoopmaster:9001

连接jobtrack服务器的配置项,默认不写是local,map数1,reduce数1

mapred.job.tracker.http.address

0.0.0.0:50030

jobtracker的tracker页面服务监听地址

mapred.job.tracker.handler.count

15

jobtracker服务的线程数

mapred.task.tracker.report.address

127.0.0.1:0

tasktracker监听的服务器,无需配置,且官方不建议自行修改

mapred.local.dir

/data1/hdfs/mapred/local,
/data2/hdfs/mapred/local,
...

mapred做本地计算所使用的文件夹,可以配置多块硬盘,逗号分隔

mapred.system.dir

/data1/hdfs/mapred/system,
/data2/hdfs/mapred/system,
...

mapred存放控制文件所使用的文件夹,可配置多块硬盘,逗号分隔。

mapred.temp.dir

/data1/hdfs/mapred/temp,
/data2/hdfs/mapred/temp,
...

mapred共享的临时文件夹路径,解释同上。

mapred.local.dir.minspacestart

1073741824

本地运算文件夹剩余空间低于该值则不在本地做计算。字节配置,默认0

mapred.local.dir.minspacekill

1073741824

本地计算文件夹剩余空间低于该值则不再申请新的任务,字节数,默认0

mapred.tasktracker.expiry.interval

60000

TT在这个时间内没有发送心跳,则认为TT已经挂了。单位毫秒

mapred.map.tasks

2

默认每个job所使用的map数,意思是假设设置dfs块大小为64M,需要排序一个60M的文件,也会开启2个map线程,当jobtracker设置为本地是不起作用。

mapred.reduce.tasks

1

解释同上

mapred.jobtracker.restart.recover

true | false

重启时开启任务恢复,默认false

mapred.jobtracker.taskScheduler

org.apache.hadoop.mapred.
CapacityTaskScheduler

org.apache.hadoop.mapred.
JobQueueTaskScheduler

org.apache.hadoop.mapred.
FairScheduler

重要的东西,开启任务管理器,不设置的话,hadoop默认是FIFO调度器,其他可以使用公平和计算能力调度器

mapred.reduce.parallel.copies

10

reduce在shuffle阶段使用的并行复制数,默认5

mapred.child.java.opts

-Xmx2048m
-Djava.library.path=
/opt/hadoopgpl/native/
Linux-amd64-64

每个TT子进程所使用的虚拟机内存大小

tasktracker.http.threads

50

TT用来跟踪task任务的http server的线程数

mapred.task.tracker.http.address

0.0.0.0:50060

TT默认监听的httpIP和端口,默认可以不写。端口写0则随机使用。

mapred.output.compress

true | false

任务结果采用压缩输出,默认false,建议false

mapred.output.compression.codec

org.apache.hadoop.io.
compress.DefaultCodec

输出结果所使用的编解码器,也可以用gz或者bzip2或者lzo或者snappy等

mapred.compress.map.output

true | false

map输出结果在进行网络交换前是否以压缩格式输出,默认false,建议true,可以减小带宽占用,代价是会慢一些。

mapred.map.output.compression.codec

com.hadoop.compression.
lzo.LzoCodec

map阶段压缩输出所使用的编解码器

map.sort.class

org.apache.hadoop.util.
QuickSort

map输出排序所使用的算法,默认快排。

mapred.hosts

conf/mhost.allow

允许连接JT的TT服务器列表,空值全部允许

mapred.hosts.exclude

conf/mhost.deny

禁止连接JT的TT列表,节点摘除是很有作用。

mapred.queue.names

ETL,rush,default

配合调度器使用的队列名列表,逗号分隔

mapred.tasktracker.map.
tasks.maximum

12

每服务器允许启动的最大map槽位数。

mapred.tasktracker.reduce.
tasks.maximum

6

每服务器允许启动的最大reduce槽位数

 

 

 

 

 

 

Hdfs-site.xml

 

name

value

Description

dfs.default.chunk.view.size

32768

namenode的http访问页面中针对每个文件的内容显示大小,通常无需设置。

dfs.datanode.du.reserved

1073741824

每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节

dfs.name.dir

/opt/data1/hdfs/name,
/opt/data2/hdfs/name,
/nfs/data/hdfs/name

NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也可以在一台服务器的多块硬盘上使用

dfs.web.ugi

nobody,nobody

NN,JT等所使用的web tracker页面服务器所使用的用户和组

dfs.permissions

true | false

dfs权限是否打开,我一般设置false,通过开发工具培训别人界面操作避免误操作,设置为true有时候会遇到数据因为权限访问不了。

dfs.permissions.supergroup

supergroup

设置hdfs超级权限的组,默认是supergroup,启动hadoop所使用的用户通常是superuser。

dfs.data.dir

/opt/data1/hdfs/data,
/opt/data2/hdfs/data,
/opt/data3/hdfs/data,
...

真正的datanode数据保存路径,可以写多块硬盘,逗号分隔

dfs.datanode.data.dir.perm

755

datanode所使用的本地文件夹的路径权限,默认755

dfs.replication

3

hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6

dfs.replication.max

512

有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,不用写配置文件里。

dfs.replication.min

1

最小份数,作用同上。

dfs.block.size

134217728

每个文件块的大小,我们用128M,默认是64M。这个计算需要128*1024^2,我碰上过有人直接写128000000,十分浪漫。

dfs.df.interval

60000

磁盘用量统计自动刷新时间,单位是毫秒。

dfs.client.block.write.retries

3

数据块写入的最多重试次数,在此次数之前不会捕获失败。

dfs.heartbeat.interval

3

DN的心跳检测时间间隔。秒

dfs.namenode.handler.count

10

NN启动后展开的线程数。

dfs.balance.bandwidthPerSec

1048576

做balance时所使用的每秒最大带宽,使用字节作为单位,而不是bit

dfs.hosts

/opt/hadoop/conf/hosts.allow

一个主机名列表文件,这里的主机是允许连接NN的,必须写绝对路径,文件内容为空则认为全都可以。

dfs.hosts.exclude

/opt/hadoop/conf/hosts.deny

基本原理同上,只不过这里放的是禁止访问NN的主机名称列表。这在从集群中摘除DN会比较有用。

dfs.max.objects

0

dfs最大并发对象数,HDFS中的文件,目录块都会被认为是一个对象。0表示不限制

dfs.replication.interval

3

NN计算复制块的内部间隔时间,通常不需写入配置文件。默认就好

dfs.support.append

true | false

新的hadoop支持了文件的APPEND操作,这个就是控制是否允许文件APPEND的,但是默认是false,理由是追加还有bug。

dfs.datanode.failed.volumes.tolerated

0

能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown。

dfs.secondary.http.address

0.0.0.0:50090

SNN的tracker页面监听地址和端口

dfs.datanode.address

0.0.0.0:50010

DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN

dfs.datanode.http.address

0.0.0.0:50075

DN的tracker页面监听地址和端口

dfs.datanode.ipc.address

0.0.0.0:50020

DN的IPC监听端口,写0的话监听在随机端口通过心跳传输给NN

dfs.datanode.handler.count

3

DN启动的服务线程数

dfs.http.address

0.0.0.0:50070

NN的tracker页面监听地址和端口

dfs.https.enable

true | false

NN的tracker是否监听在HTTPS协议,默认false

dfs.datanode.https.address

0.0.0.0:50475

DN的HTTPS的tracker页面监听地址和端口

dfs.https.address

0.0.0.0:50470

NN的HTTPS的tracker页面监听地址和端口

dfs.datanode.max.xcievers

2048

相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

疯飙的蜗牛

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值