最新HADOOP学习笔记.doc

上传人:1595****071 文档编号:34717298 上传时间:2022-08-18 格式:DOC 页数:61 大小:1.43MB
返回 下载 相关 举报
最新HADOOP学习笔记.doc_第1页
第1页 / 共61页
最新HADOOP学习笔记.doc_第2页
第2页 / 共61页
点击查看更多>>
资源描述

《最新HADOOP学习笔记.doc》由会员分享,可在线阅读,更多相关《最新HADOOP学习笔记.doc(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateHADOOP学习笔记HADOOP学习笔记HADOOP学习笔记 -白兵南 大 通 用 数 据 技 术 股 份 有 限 公 司General Data Technologies Co., Ltd.GBase版权所有2004-2013天津总公司:中国天津华苑产业区海泰发展六道6号海泰绿色产业基地J座5层电 话:022-58815678传真:022-58815679北京分公司

2、:北京海淀区金源时代商务中心B区1206电话:010-88866866传真:010-88864556 E-mail:info日期版本变更说明作者2014-9-25V20140925创建白兵目录1文档说明12第一课:认识HADOOP22.1HADOOP的前世今生22.2HADOOP基础原理22.2.1HDFS32.2.2MapReduce52.3HADOOP的国内外应用63第二课:认识HADOOP2(常用组件简介)63.1Hbase简介63.2Hive简介73.3pig简介73.4Zookeeper简介73.5Sqoop简介83.6Hue简介83.7Yarn简介83.8Impal简介84第三课:

3、部署HADOOP104.1部署环境104.2目录结构104.3安装步骤114.3.1环境检查&环境变量配置114.3.2下载拷贝安装包到主目录下,并解压114.3.3配置profile变量124.3.4Hbase-env.sh配置124.3.5slaves配置124.3.6yarn-env.sh配置124.3.7core-site.xml配置124.3.8hdfs-site.xml配置134.3.9mapred-site.xml配置134.3.10yarn-site.xml配置154.3.11配置完成,文件拷贝至两个slave节点154.4安装完成检验164.5安装过程中的问题185第四课:H

4、ADOOP的基本操作205.1启动/停止hadoop205.2文件操作205.2.1查看文件列表205.2.2创建文件目录205.2.3上传文件215.2.4下载文件215.2.5删除文件、目录225.3MapReduce Job操作225.3.1提交MapReduce Job225.3.2杀死某个正在运行的Job225.3.3练习WordCount225.3.4练习过程中的问题235.4HADOOP常用命令收集246第五课:HBASE-1简单介绍和安装266.1HBASE介绍266.2安装286.2.1下载解压286.2.2安装-修改conf/regionservers286.2.3安装-修

5、改conf/hbase-site.xml286.2.4安装-修改conf/hbase-env.sh296.2.5安装-设置环境变量306.3启动HBASE306.4安装过程中的问题317第六课:ZOOKEEPER安装337.1下载zookeeper337.2解压337.3修改zoo.cfg配置文件337.4创建相应目录&拷贝目录&编辑myid347.5配置环境变量347.6启动并测试zookeeper347.7安装过程中的问题358附录368.1配置项core-site.xml介绍368.2配置项hdfs-site.xml介绍388.3配置项mapred-site.xml介绍41-1 文档说明

6、本文档这一系列的Hadoop学习笔记是针对本人作为初学者从零开始一步一步进行下来的,过程中参考了网上的很多文章,同时结合自己的实际练习对学习Hadoop中遇到的问题进行了归纳总结。主要目的就是将hadoop相关知识在这里汇总,方便查阅和学习参考。后续内容会不定期通过论坛以及群邮件(每周两节课左右)发出,内容肯定会有些不完整或者不全面的地方,希望大家指正。我这里抛砖引玉,也希望各位同事能够把自己的在hadoop方面学习或收集的知识共享出来,供大家一起学习。2 第一课:认识HADOOP2.1 HADOOP的前世今生谈到Hadoop就不得不提到Lucene和Nutch。首先,Lucene并不是一个应

7、用程序,而是提供了一个纯Java的高性能全文索引引擎工具包,它可以方便的嵌入到各种实际应用中实现全文搜索/索引功能。Nutch是一个应用程序,是一个以Lucene为基础实现的搜索引擎应用,Lucene为Nutch提供了文本搜索和索引的API,Nutch不光有搜索的功能,还有数据抓取的功能。在nutch0.8.0版本之前,Hadoop还属于Nutch的一部分,而从nutch0.8.0开始,将其中实现的NDFS和MapReduce剥离出来成立一个新的开源项目,这就是Hadoop,而nutch0.8.0版本较之以前的Nutch在架构上有了根本性的变化,那就是完全构建在Hadoop的基础之上了。在Ha

8、doop中实现了Google的GFS和MapReduce算法,使Hadoop成为了一个分布式的计算平台。Hadoop作为Apache基金会资助的开源项目,由Doug Cutting带领的团队进行开发,基于Lucene和Nutch等开源项目,实现了Google的GFS和Hadoop能够稳定运行在20个节点的集群;2006年1月,Doug Cutting加入雅虎公司,同年2月Apache Hadoop项目正式支持HDFS和MapReduce的独立开发。同时,新兴公司Cloudera为Hadoop提供了商业支持,帮助企业实现标准化安装,并志愿贡献社区。2.2 HADOOP基础原理Hadoop原来是A

9、pache Lucene下的一个子项目,它最初是从Nutch项目中分离出来的专门负责分布式存储以及分布式运算的项目。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。或者说,Hadoop并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架Hadoop由分布式存储HDFS和分布式计算MapReduce两部分组成。HDFS是一个master/slave的结构,就通常的部署来说,在master上只运行一个Namenode,而在每一个slave上运行一个Datanode。MapReduce是Google的一项重要技术,它是一

10、个编程模型,用以进行大数据量的计算。MapReduce的名字源于这个模型中的两项核心操作:Map和Reduce。Map是把一组数据一对一的映射为另外的一组数据,Reduce是对一组数据进行归约,映射和归约的规则都由一个函数指定。经过几年的快速发展,Hadoop现在已经发展成为包含多个相关项目的软件生态系统,成为大数据处理技术的事实标准,目前典型的Hadoop生态系统如下所示:2.2.1 HDFSHDFS(HADOOP DISTRIBUTED FILE SYSTEM),是一个分布式文件系统。它是谷歌的GFS提出之后出现的一种用户级文件系统。有一定的容错性,能提供高吞吐量的数据访问,适合大规模数据

11、集上的应用。HDFS 提供了一个高度容错性和高吞吐量的海量数据存储解决方案,并且可以被部署在低价的硬件设备之上。HDFS很适合那些有大数据集的应用,并且提供了对数据读写的高吞吐率。HDFS是一个master/slave的结构,就通常的部署来说,在master上只运行一个Namenode,而在每一个slave上运行一个Datanode。 HDFS支持传统的层次文件组织结构,同现有的一些文件系统在操作上很类似,比如你可以创建和删除一个文件,把一个文件从一个目录移到另一个目录,重命名等等操作。Namenode管理着整个分布式文件系统,对文件系统的操作(如建立、删除文件和文件夹)都是通过Namenod

12、e来控制。基本概念: Block:大文件的存储会被分割为多个block进行存储。默认64MB,每一个blok会在多个datanode上存储多份副本,默认3份 Namenode:主要负责存储一些metadata信息,主要包括文件目录、block和文件对应关系,以及block和datanote的对应关系 Datanode:负责存储数据,数据以block的形式存在下面是HDFS的结构:从上面的图中可以看出,Namenode,Datanode,Client之间的通信都是建立在TCP/IP的基础之上的。当Client要执行一个写入的操作的时候,命令不是马上就发送到Namenode,Client首先在本机

13、上临时文件夹中缓存这些数据,当临时文件夹中的数据块达到了设定的Block的值(默认是64M)时,Client便会通知Namenode,Namenode便响应Client的RPC请求,将文件名插入文件系统层次中并且在Datanode中找到一块存放该数据的block,同时将该Datanode及对应的数据块信息告诉Client,Client便这些本地临时文件夹中的数据块写入指定的数据节点。 HDFS采取了副本策略,其目的是为了提高系统的可靠性,可用性。HDFS的副本放置策略是三个副本,一个放在本节点上,一个放在同一机架中的另一个节点上,还有一个副本放在另一个不同的机架中的一个节点上。2.2.2 Ma

14、pReduceMapReduce是Google 的一项重要技术,它是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。至少现阶段而言,对许多开发人员来说,并行计算还是一个比较遥远的东西。MapReduce就是一种简化并行计算的编程模型,它让那些没有多少并行计算经验的开发人员也可以开发并行应用。 MapReduce的名字源于这个模型中的两项核心操作:Map和 Reduce。也许熟悉Functional Programming(函数式编程)的人见到这两个词会倍感亲切。简单的说来,Map是把一组数据一对一的映射为另外的一组数据,其映射的规则由一个函数来指定,比

15、如对1, 2, 3, 4进行乘2的映射就变成了2, 4, 6, 8。Reduce是对一组数据进行归约,这个归约的规则由一个函数指定,比如对1, 2, 3, 4进行求和的归约得到结果是10,而对它进行求积的归约结果是24。MapReduce示例:1. 输入端根据输入文本大小进行切片形成适合Map处理的数据片2. 分片后的数据申请Map资源,执行本地单词映射操作3. 通过交换将map生成的结果按照单词进行归并重组4. 重组后的结果,申请Reduce资源,进行单词的合并统计5. .对Reduce的结果进行记录合并生成输出文件MapReduce的优点: 通过MapReduce这个分布式处理框架,不仅能

16、用于处理大规模数据,而且能将很多繁琐的细节隐藏起来,比如,自动并行化、负载均衡和灾备管理等,这样将极大地简化开发者工作 MapReduce的伸缩性非常好,也就是说,每增加一台服务器,其就能将差不多的计算能力接入到集群中,而过去的大多数分布式处理框架,在伸缩性方面都与MapReduce相差甚远。MapReduce的缺点: MapReduce最大的不足则在于,其不适应实时应用的需求,目前还无法满足用户交互式的需求。2.3 HADOOP的国内外应用2008年之后,国内应用和研究Hadoop的企业也越来越多,包括淘宝、百度、腾讯、网易、金山等。淘宝是国内最先使用Hadoop的公司之一;百度在Hadoo

17、p上进行广泛应用并对它进行改进和调整,同时赞助了HyperTable的开发。总之,互联网企业是Hadoop在国内的主要使用力量。同样的,很多科研院所也投入到Hadoop的应用和研究中,包括中科院、清华大学、浙江大学和华中科技大学等。3 第二课:认识HADOOP2(常用组件简介)3.1 Hbase简介HBase是一个分布式的、多版本的、面向列的开源数据库 利用Hadoop HDFS作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 利用Hadoop MapReduce来处理HBase中的海量数据 利用Zookeeper作为协同服务HBase是GoogleBigtabl

18、e的开源实现,其中表的特点如下: 大:一个表可以有上亿行,上百万列 面向列:面向列(族)的存储和权限控制,列(族)独立检索 稀疏:对于为空的列,并不占用存储空间,因此,表可以设计的非常稀疏 多版本:每条记录中的数据可以有多个版本 无类型:存在HBase中的数据都是字符串,无其他类型3.2 Hive简介Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的类sql查询功能,可以将类sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合

19、数据仓库的统计分析。3.3 pig简介Pig是Hadoop上层的衍生架构,对比Hive(一种声明式的语言),Pig是一种过程语言,类似于存储过程一步一步的对数据进行转化Pig对MapReduce算法实现了一套shell,类似SQL语句,在Pig中称为Pig Latin,可以对数据进行排序、过滤、求和、分组(group by)、关联(Joining)等操作Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。3.4 Zookeeper简介ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、

20、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。3.5 Sqoop简介sqoop主要用来在Hadoop和关系数据库中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS,或者将数据从HDFS导出到关系数据库。sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。3.6 Hue简介Hue是专门为运营和开发人员开发的,执行Hadoop相关应用的图形化用户界面。Hue程序被整合到一个类似桌面的环境,以web程序的形式发布,

21、用户可以通过B/S方式使用。3.7 Yarn简介YARN提供了统一的资源调度管理平台。首先支持原来的MapReduce分布式计算框架和HBase等资源分配和调度,以及支持Apache旗下的Spark。Cloudera独立贡献的Impala、flume也支持YARN。Tweeter开源Storm在实时计算方面日益成熟,影响很大,Storm发布了Storm on YARN项目,形成对YARN有力支持。著名开源项目Tez、OpenMPI宣布对YARN的支持。主要原因是YARN解决了各分布式计算框架资源调度困难、数据共享困难等实际问题。YARN目前吸纳了其他的框架,成为了集群的管理者。3.8 Impa

22、l简介Impala是运行于现有Hadoop基础设施上的实时互动SQL查询引擎,可以让Hdadoop DFS文件系统以及Apache HBase数据库中的数据支持实时查询(Impala能使用SQL快速查询存储在Hadoop的HDFS和HBase中的PB级大数据)。这意味着Impala为Hadoop打开了通向关系型数据库和传统商业智能工具的大门(后两者基于SQL查询)。此前,数据仓库架构Apache Hive能够让Hadoop某种程度上支持结构化数据访问,但是Hive采用的方法是将SQL查询转化成MapReduce任务,这导致Hive的性能很差。而且,Hive只能支持不到30%的SQL分析功能,而

23、根据Cloudera的说法,Impala将比Hive出色得多。Impala实际上是两个产品。核心部分是Impala实时查询引擎,采用Apache开源授权方式,Hadoop用户可以单独使用这个引擎。同时,Impala项目也将以Cloudera Enterprise RTQ(Real-Time Query)为名进入CDH发行版。可以部署到生产环境的版本将到2013年一季度就绪。Cloudera Enterprise RTQ将作为Cloudera 管理控制台的一部分,负责管理Impala服务器。从这个管理控制台中IT人员能够看到查询的运行情况、运行时间以及活跃用户数等。Impala有望解决Hadoo

24、p系统的两个顽疾:批处理速度慢和数据可访问性差(无法支持分秒级的实时互动查询分析)。Cloudera在官方博客中透露Impala是在Dremel的启发下开发的。Impala不再使用缓慢的 Hive+MapReduce批处理,而是通过与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或者HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。4 第三课:部署HADOOP4.1 部署环境l 硬件环境本文以1台namenode和2台datanode为例,共

25、有3台机器,虚拟机安装x86_64 GNU/Linux Red Hat 4.4.5-6,Java使用的是jdk-8u11-linux-x64。主机名及地址分别为:master:192.168.130.140slave1:192.168.130.141slave2:192.168.130.142这里有一点需要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析SSH互信l 软件环境:hadoop-2.4.0build 1.8.0_11-b124.2 目录结构由于Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户。我的三台机器上是这样的:都有一个h

26、adoop的帐户,主目录是/home/hadoop。Hadoop部署目录即在主目录下,所有的hadoop版本放在这个目录中。4.3 安装步骤4.3.1 环境检查&环境变量配置 需要安装JDK,(注意:安装JDK需要处理一些其他问题,JDK必须是Linux版本的,还有就是JDK要和操作系统的位数相符合,比如32位、64位都有对应的安装包,我是卸载掉本系统原JDK,安装的1.8版本)。在终端输入java version / javac测试安装JDK是否成功: 配置JDK环境变量 关掉防火墙、selinux 配置SSH无密码登陆4.3.2 下载拷贝安装包到主目录下,并解压 登陆下载hadoop-2.

27、4.0(本人随便下的一个版本,没有考证那个版本最稳当,全凭眼缘;看官可自行下载更高级版本,后在各种网上文档中看到建议用hadoop-2.2.0,说是比较稳定) 用户解压hadoop-2.4.0.tar.gz,最终目录结构为/home/hadoop/ hadoop-2.4.0hadoophadoopmaster hadoop$ tar zxvf hadoop-2.4.0.tar.gzhadoophadoopmaster hadoop$ ln -s hadoop-2.4.0 hadoop(此步必须)4.3.3 配置profile变量4.3.4 Hbase-env.sh配置其中JAVA_HOME是必

28、须设定的变量,HADOOP_HOME变量可以设定也可以不设定,如果不设定,HADOOP_HOME默认的是bin目录的父目录,即本文中的/home/hadoop /hadoop。export JAVA_HOME= /usr/java/jdk1.8.0_114.3.5 slaves配置在/home/hadoop/hadoop/etc/hadoop/目录下,打开slaves文件,该文件用来指定所有的从节点,一行指定一个主机名。即本文中的slave1,slave2, slaves文件设置如下: slave1slave24.3.6 yarn-env.sh配置加入如下内容:export JAVA_HOME

29、= /usr/java/jdk1.8.0_114.3.7 core-site.xml配置在 之间增加 fs.default.name hdfs:/master:9000 hadoop.tmp.dir /home/hadoop/tmp/hadoop-$user.name 4.3.8 hdfs-site.xml配置在 之间增加 dfs.replication 1 dfs.data.dir /opt/hdfs/data #dfs.namenode.name.dir#file:/opt/hadoop/dfs/name#dfs.datanode.data.dir#file:/opt/hadoop/dfs

30、/data#dfs.namenode.secondary.http-address#master:9001#dfs.webhdfs.enabledtrue 4.3.9 mapred-site.xml配置在 之间增加 mapred.job.tracker master:9001 mapred.local.dir /home/hadoop/hadoop/mapred/local mapred.system.dir /home/hadoop/tmp/mapred/system mapreduce.framework.name yarn mapreduce.jobhistory.address mas

31、ter:10020 mapreduce.jobhistory.webapp.address master:19888 mapred.child.java.opts -Xmx512m mapreduce.cluster.map.memory.mb -1 mapreduce.cluster.reduce.memory.mb -1 4.3.10 yarn-site.xml配置在 之间增加yarn.nodemanager.aux-servicesmapreduce_shuffleyarn.nodemanager.aux-services.mapreduce.shuffle.classorg.apach

32、e.hadoop.mapred.ShuffleHandleryarn.resourcemanager.addressmaster:8032yarn.resourcemanager.scheduler.addressmaster:8030yarn.resourcemanager.resource-tracker.addressmaster:8031yarn.resourcemanager.admin.addressmaster:8033yarn.resourcemanager.webapp.addressmaster:8088 yarn.nodemanager.vmem-pmem-ratio 3

33、 4.3.11 配置完成,文件拷贝至两个slave节点配置完成,文件拷贝至两个slave节点,同时注意建lnScp r /home/hadoop/hadoop-2.4.0 hadoop192.168.130.141:/home/hadoop/hadoophadoopslave1 $ ln -s hadoop-2.4.0 hadoop4.4 安装完成检验做完所有的准备工作现在就可以启动hadoop集群,执行命令如下:hadoop namenode -formatsh start-all.sh启动完成,查看集群是否启动: 1、jps查看 2、hdfs查看 hadoopslave2 logs$ ha

34、doop dfsadmin -reportDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it. 3、访问DFS : http:192.168.130.140:50070 恭喜你,安装成功!4.5 安装过程中的问题 安装的hadoop版本是2.4.0的,但每次执行命令时都会显示下面的信息hadoopmaster hadoop$ hadoop dfs -lsDEPRECATED: Use of this script. to execute

35、hdfs command is deprecated.Instead use the hdfs command for it.A:原来从0.20.0版本以后,hadoop 命令换成了hdfs命令,上面的命令如同下面的命令:hadoopmaster hadoop$ hdfs dfs -ls / 这时就没有错误了 2、遇到报错如下:report: Call From master/192.168.130.140 to master:9000 failed on connection exception: .ConnectException: Connection refused; For more

36、 details see: http:/wiki.apache.org/hadoop/ConnectionRefusedA: 此问题折腾了很久很久,最终得到解决,遇到相似问题以下检查点供参考:1、首先检查hostname配置是否正确;2、在/etc/hosts中的0:00行注释掉,最好将127.0.0.1行也注释掉;3、在配置文件中最好使用ip地址,不要使用localhost; 我的问题为,配置文件中指定的目录权限不足,导致无法创建相应目录而使NAMENODE没有启动起来。5 第四课:HADOOP的基本操作5.1 启动/停止hadoop启动Hadoop1. 进入HADOOP_HOME目录。2.

37、 执行sh bin/start-all.sh关闭Hadoop1. 进入HADOOP_HOME目录。2. 执行sh bin/stop-all.sh单独运行namenode、datanode、secondarynamenode、resourcemanager、nodemanagerhadoop-daemon.sh start namenodehadoop-daemon.sh start datanodehadoop-daemon.sh start secondarynamenode 在hadoop 2.0以前我们可能会使用这样的一类命令:start jobtracker。2.0以后hadoop将j

38、obtracker与tasktracker以YARN来代替,所以resourcemanager与nodemanager的启动命令:yarn-daemon.sh start resourcemanageryarn-daemon.sh start nodemanager5.2 文件操作5.2.1 查看文件列表查看hdfs中/根目录下的文件。1. 进入HADOOP_HOME目录。2. 执行sh bin/hadoop fs -ls / “发现目录下至存在一个baibing的目录”3. 补充:查看文件内容 hadoop fs -cat /test/test.txt5.2.2 创建文件目录查看hdfs中根

39、目录下新建一个叫做test/te的t2新目录。1. 进入HADOOP_HOME目录。2. 执行hadoopmaster sbin$ hadoop fs -mkdir /test或者hadoopmaster sbin$ hdfs dfs -mkdir /test2你可能注意到了在创建目录时使用了两种命令,查询资料得到区别如下:hadoop fs:使用面最广,可以操作任何文件系统。hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后者。5.2.3 上传文件上传一个本机/home/hadoop/test.tx

40、的文件到hdfs中/test/目录下1. 进入HADOOP_HOME目录。2. 执行 hadoop fs -put /home/hadoop/test.txt /test 或 hdfs dfs -put /home/hadoop/test1.txt /test2/5.2.4 下载文件下载hdfs中/test目录下的test.txt文件到本机/home/hadoop/test/中1. 进入HADOOP_HOME目录。2. 执行hadoop fs -get /test/test.txt /home/hadoop/test/5.2.5 删除文件、目录删除hdfs中/test2目录下的/test1.txt;删除hdfs中/test2目录1、进入HADOOP_HOME目录。2. 执行hdfs dfs -rm /test2/test1.txthdfs dfs rm -r /test2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 成人自考

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁