




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录课程大纲(HDFS 详解)21. HDFS 前言42. HDFS 的概念和特性43. HDFS 的 shell(命令行客户端)操作53.1 HDFS 命令行客户端使用53.2 命令行客户端支持令参数53.2 常用命令参数.74. hdfs 的工作机制114.1 概述:114.2 HDFS 写数据流程124.2.1 概述124.2.2 详细步骤图124.2.3 详细步骤.124.3. HDFS 读数据流程134.3.1 概述134.3.2 详细步骤图:134.3.3 详细步骤.135. NAMENODE 工作机制155.1 概述155.2 元数据管理155.2.1 元数据机制165.2.2
2、元数据手动查看165.2.3 元数据的 checkpoint166. DATANODE 的工作机制206.1 概述206.2 观察验证 DATANODE 功能217. HDFS 的 java 操作227.1 搭建开发环境227.2 获取 api 中的客户端对象227.3 DistributedFileSystem 实例对象所具备的.237.4 HDFS 客户端操作数据代码示例:237.4.1 文件的增删改查237.4.2 通过流的方式hdfs28课程大纲(HDFS 详解)Hadoop HDFS分布式文件系统 DFS 简介HDFS 的系统组成HDFS 的组成部分详解副本存放策略及路由规则命令行接
3、口Java 接口客户端与 HDFS 的数据流讲解学习目标:掌握 hdfs 的 shell 操作掌握 hdfs 的 java api 操作理解 hdfs 的工作原理*HDFS 基本概念篇*1. HDFS 前言l设计思想分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;l在大数据系统中作用:为各类分布式运算框架(如:mapreduce,spark,tez,)提供数据服务l重点概念:文件切块,副本存放,元数据2. HDFS 的概念和特性首先,它是一个文件系统,用于文件,通过统一名空间目录树来定位文件其次,它是分布式的,由很多服务器联合起来实现其
4、功能,集群中的服务器有各自的角色;重要特性如下:(1)HDFS 中的文件在物理上是分块block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在 hadoop2.x 版本中是 128M,老版本中是 64M(2)HDFS 文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来形如:hdfs:/namenode:port/dir-a/dir-b/dir-c/file.data文件,(3)目录结构及文件分块(元数据)的管理由 namenode 节点承担namenode 是 HDFS 集群主节点,负责维护整个 hdfs 文件系统的目录树,以及每一个路径(文件)所对应
5、的 block 块(block 的 id,及所在的 datanode 服务器)(4)文件的各个 block 的管理由 datanode 节点承担- datanode 是 HDFS 集群从节点,每一个 block 都可以在多个 datanode 上本(副本数量也可以通过参数设置 dfs.replication)多个副(5)HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改(注:适合用来做数据分析,并不适合用来做网盘应用,因为,不便修改,延迟大,网络开销大,成本太高)*HDFS 基本操作篇*3. HDFS 的 shell(命令行客户端)操作3.1 HDFS 命令行客户端使用HDFS
6、 提供 shell 命令行客户端,使用如下:3.2 命令行客户端支持令参数-appendToFile . -cat -ignoreCrc .-checksum .-chgrp -R GROUP PATH.-chmod -R PATH.-n -R OWNER:GROUP PATH.-copyFromLocal -f -p . -copyToLocal -p -ignoreCrc -crc . -count -q .-cp -f -p . -createSnapshot -deleteSnapshot -df -h .-du -s -h . -expunge-get -p -ignoreCrc -
7、crc . -getfacl -R -getmerge -nl -help cmd .-ls -d -h -R .-mkdir -p .-moveFromLocal . -moveToLocal -mv . -put -f -p . -renameSnapshot -rm -f -r|-R -skipTrash .-rmdir -ignore-fail-on-non-empty .-setfacl -R -b|-k -m|-x |-set -setrep -R -w .3.2 常用命令参数-help功能:输出这个命令参数手册-ls功能:显示目录示例: hadoop fs -ls hdfs:/h
8、adoop-server01:9000/备注:这些参数中,所有的 hdfs 路径都可以简写-hadoop fs -ls /等同于上一条命令的效果-mkdir功能:在 hdfs 上创建目录示例:hadoop fs-mkdir-p/aaa/bbb/cc/dd-moveFromLocal功能:从本地剪切粘贴到 hdfs示例:hadoopfs- moveFromLocal/home/hadoop/a.txt/aaa/bbb/cc/dd-moveToLocal功能:从 hdfs 剪切粘贴到本地-stat format .-tail -f -test -defsz -text -ignoreCrc . -
9、touchz .-usage cmd .示例:hadoopfs- moveToLocal/aaa/bbb/cc/dd/home/hadoop/a.txt-appendToFile功能:追加一个文件到已经的文件末尾示例:hadoopfs-appendToFile./hello.txthdfs:/hadoop-server01:9000/hello.txt可以简写为:Hadoopfs-appendToFile./hello.txt/hello.txt-cat功能:显示文件内容示例:hadoop fs -cat/hello.txt-tail功能:显示一个文件的末尾示例:hadoopfs-tail/w
10、eblog/access_log.1-text功能:以字符形式打印一个文件的内容示例:hadoopfs-text/weblog/access_log.1-chgrp-chmod-n功能:linux 文件系统中的用法一样,对文件所属权限示例:hadoopfs-chmod666/hello.txthadoopfs-nsomeuser:somegrp/hello.txt-copyFromLocal功能:从本地文件系统中拷贝文件到 hdfs 路径去示例:hadoopfs-copyFromLocal./jdk.tar.gz/aaa/-copyToLocal功能:从 hdfs 拷贝到本地示例:hadoop
11、 fs -copyToLocal /aaa/jdk.tar.gz-cp功能:从 hdfs 的一个路径拷贝 hdfs 的另一个路径示例: hadoopfs-cp/aaa/jdk.tar.gz/bbb/jdk.tar.gz.2-mv功能:在 hdfs 目录中移动文件示例: hadoopfs-mv/aaa/jdk.tar.gz/-get功能:等同于 copyToLocal,就是从 hdfs文件到本地示例:hadoop fs -get/aaa/jdk.tar.gz-getmerge功能:合并多个文件示例:比如 hdfs 的目录 /aaa/下有多个文件:log.1, log.2,log.3,.hadoo
12、p fs -getmerge /aaa/log.* ./log.sum-put功能:等同于 copyFromLocal示例:hadoopfs-put/aaa/jdk.tar.gz/bbb/jdk.tar.gz.2-rm功能:删除文件或文件夹示例:hadoop fs -rm -r /aaa/bbb/-rmdir功能:删除空目录示例:hadoopfs-rmdir/aaa/bbb/ccc-df功能:统计文件系统的可用空间示例:hadoopfs-df-h/-du功能:统计文件夹的大小示例:hadoopfs-du-s-h /aaa/*-count功能:统计一个指定目录下的文件节点数量示例:hadoop
13、fs -count /aaa/-setrep功能:设置 hdfs 中文件的副本数量示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz*HDFS 原理篇*4. hdfs 的工作机制(工作机制的学习主要是为加深对分布式系统的理解,以及增强遇到各种问题时的分析解决能力,形成一定的集群运维能力)注:很多不是真正理解 hadoop 技术体系的人会常常觉得 HDFS 可用于网盘类应用,但实际并非如此。要想将技术准确用在恰当的地方,必须对技术有深刻的理解4.1 概述HDFS 集群分为两大角色:NameNode、DataNode(Secondary Namenode)1.NameNo
14、de 负责管理整个文件系统的元数据2.DataNode 负责管理用户的文件数据块3.文件会按照固定的大小(blocksize)切成若干块后分布式在若干台 datanode 上4.每一个文件块可以有多个副本,并存放在不同的 datanode 上5.Datanode 会定期向 Namenode 汇报自身所保存的文件 block责保持文件的副本数量,而 namenode 则会负6.HDFS 的内部工作机制对客户端保持透明,客户端请求申请来进行HDFS 都是通过向 namenode7.4.2 HDFS 写数据流程4.2.1 概述客户端要向 HDFS 写数据,首先要跟 namenode 通信以确认可以写
15、文件并获得接收文件 block的 datanode,然后,客户端按顺序将文件逐个 block 传递给相应 datanode,并由接收到 block的 datanode 负责向其他 datanodeblock 的副本4.2.2详细步骤图4.2.3详细步骤1、根 namenode 通信请求上传文件,namenode 检查目标文件是否已,父目录是否2、namenode 返回是否可以上传3、请求第一个 block 该传输到哪些 datanode 服务器上4、namenode 返回 3 个 datanode 服务器 ABC5、请求 3 台 dn 中的一台 A 上传数据(本质上是一个 RPC 调用,建立
16、pipeline),A收到请求会继续调用 B,然后 B 调用 C,将真个 pipeline 建立完成,逐级返回客户端6、开始往 A 上传第一个 block(先从磁盘数据放到一个本地内存缓存),以 packet为,A 收到一个 packet 就会传给 B,B 传给 C;A 每传一个 packet 会放入一个应答队列等待应答7、当一个 block 传输完成之后,再次请求 namenode 上传第二个 block 的服务器。4.3. HDFS 读数据流程4.3.1 概述客户端将要的存放位置的文件路径发送给 namenode,namenode 获取文件的元(主要是 block)返回给客户端,客户端根据
17、返回的找到相应 datanode 逐个获取文件的 block 并在客户端本地进行数据追加合并从而获得整个文件4.3.2详细步骤图4.3.3详细步骤1、跟 namenode 通信元数据,找到文件块所在的 datanode 服务器2、挑选一台 datanode(就近原则,然后随机)服务器,请求建立 socket 流3、datanode 开始发送数据(从磁盘里面数据放入流,以 packet 为来做校验)4、客户端以 packet 为接收,现在本地缓存,然后写入目标文件5. NAMENODE 工作机制学习目标:理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的理解,
18、及培养 hadoop 集群运营中“性能调优”、“namenode”故障问题的分析解决能力问题场景:1、集群启动后,可以查看文件,但是上传文件错,打开 web 页面可看到 namenode 正处于 safemode 状态,怎么处理?2、Namenode 服务器的磁盘故障导致 namenode 宕机,如何挽救集群及数据?3、Namenode 是否可以有多个?namenode 内存要配置多大?namenode 跟集群数据能力有吗?4、文件的 blocksize 究竟调大好还是调小好?诸如此类问题的回答,都需要基于对 namenode 自身的工作原理的深刻理解5.1 NAMENODE 职责NAMENO
19、DE 职责:负责客户端请求的响应元数据的管理(,修改)5.2 元数据管理namenode 对数据的管理采用了三种形式:内存元数据(NameSystem)磁盘元数据镜像文件数据操作日志文件(可通过日志运算出元数据)5.2.1 元数据机制A、内存中有一份完整的元数据(内存 meta data)B、磁盘有一个“准完整”的元数据镜像(fsimage)文件(在 namenode 的工作目录中)C、用于衔接内存 metadata 和持久化元数据镜像 fsimage 之间的操作日志(edits 文件)注:当客户端对 hdfs 中的文件进行新增或者修改操作,操作首先被记入 edits 日志文件中,当客户端操作
20、后,相应的元数据会更新到内存 meta.data 中5.2.2 元数据手动查看可以通过 hdfs 的一个工具来查看 edits 中的bin/hdfs oev -i edits -o edits.xmlbin/hdfs oiv -i fsimage_0000000000000000087 -p XML -o fsimage.xml5.2.3 元数据的 checkpoint每隔一段时间,会由 secondary namenode 将 namenode 上积累的所有 edits 和一个最新的fsimage到本地,并加载到内存进行 merge(这个过程称为 checkpoint)checkpoint
21、的详细过程checkpoint 操作的触发条件配置参数checkpoint 的附带作用namenode 和 secondary namenode 的工作目录结构完全相同,所以,当 namenode故障需要重新恢复时,可以从 secondary namenode 的工作目录中将 fsimage 拷贝到namenode 的工作目录,以恢复 namenode 的元数据5.2.4 元数据目录说明在第一次部署好 Hadoop 集群的时候,我们需要在 NameNode(NN)节点上格式化磁盘:格式化完成之后,将会在$.dir/current 目录下如下的文件结构其中的 d
22、.dir 是在 hdfs-site.xml 文件中配置的,默认值如下:current/|- VERSION|- edits_*|- fsimage_0000000000008547077|- fsimage_0000000000008547077.md5- seen_txid$HADOOP_HOME/bin/hdfs namenode -node.checkpoint.check.period=60#检查触发条件是否满足的频率,60 秒node.checkpoint.dir=file:/$hadoop.tmp.dir/dfs/names
23、econdary #以上两个参数做 checkpoint 操作时,secondary namenode 的本地工作目录node.checkpoint.edits.dir=$node.checkpoint.max-retries=3#最大重试次数node.checkpoint.period=3600#两次 checkpoint 之间的时间间隔 3600 秒node.checkpoint.txns=1000000 #两次 checkpoint 之间最大的操作node
24、.name.dir 属性可以配置多个目录,如/data1/dfs/name,/data2/dfs/name,/data3/dfs/name,.。各个目录的文件结构都完全一样,相当于备份,这样做的好处是当其中一个目录损坏了,也影响到 Hadoop 的元数据,特别是当其中一个目录是 NFS(网络文件系统 Network File System,NFS)之上,即使你这台机器损坏了,元数据也得到保存。下面对$.dir/current/目录下的文件进行解释。1、VERSION 文件是 Java 属性文件,内容大致如下:其中(1)、namespaceID 是文件系统的唯一
25、标识符,在文件系统首次格式化之后生成的;(2)、storageType 说明这个文件的是什么进程的数据结构(如果是 DataNode,#Fri Nov 15 19:47:46 CST 2013namespaceID=934548976clusterID=CID-cdff7d73-93cd-4783-9399-0a22e6dce196 cTime=0storageType=NAME_NODEblockpoolID=BP-893790215-2-1383809616115layoutVersion=-47.dirfile:/$hadoop.tmp.dir/d
26、fs/namehadoop.tmp.dir 是在 core-site.xml 中配置的,默认值如下hadoop.tmp.dir/tmp/hadoop-$A base for other temporary directories.storageType=DATA_NODE);(3)、cTime 表示 NameNode时间的创建时间,由于NameNode 没有更新过,所以这里的值为 0,以后对 NameNode 升级之后,cTime 将会更新时间戳;(4)、layoutVersion 表示 HDFS 永久性数据结构的版本, 只要数据结构变更,版本号也要递减,此时的 HDFS 也
27、需要升级,否则磁盘仍旧是使用旧版本的数据结构,这会导致新版本的 NameNode 无法使用;(5)、clusterID 是系统生成或手动指定的集群 ID,在-clusterid 选项中可以使用它;如下说明a、使用如下命令格式化一个 Namenode:$HADOOP_HOME/bin/hdfs namenode -format -clusterId 选择一个唯一的 cluster_id,并且这个 cluster_id 不能与环境中其他集群有。如果没有提供 cluster_id,则会自动个唯一的 ClusterID。b、使用如下命令格式化其他 Namenode:$HADOOP_HOME/bin/h
28、dfs namenode -format -clusterId c、升级集群至最新版本。在升级过程中需要提供一个 ClusterID,例如:$HADOOP_PREFIX_HOME/bin/hdfs start namenode -config $HADOOP_CONF_DIR -upgrade-clusterId 如果没有提供 ClusterID,则会自动个 ClusterID。(6)、blockpoolID:是每一个 Namespace 所对应的 blockpool 的 ID,上面的这个BP-893790215-2-1383809616115 就是在ns1 的 nam
29、espace 下的块池的ID,这个 ID了其对应的 NameNode 节点的 ip 地址。2、$.dir/current/seen_txid 非常重要,是存放 tranionId 的文件,format之后是 0,它代表的是 namenode 里面的 edits_*文件的尾数,namenode 重启的时候,会按照 seen_txid 的数字,循序从头跑 edits_0000001到 seen_txid 的数字。所以当你的 hdfs 发生异常重启的时候,一定要比对 seen_txid 内的数字是不是你 edits 最后的尾数,不然会发生建置 namenode 时
30、metaData 的资料有缺少,导致误删 Datanode 上多余 Block 的资讯。3、$.dir/current 目录下在 format 的同时也会生成 fsimage 和 edits 文件,及其对应的 md5 校验文件。补充:seen_txid文件中的是 edits 滚动的序号,每次重启 namenode 时,namenode 就知道要将哪些 edits进行加载 edits6. DATANODE 的工作机制问题场景:1、集群容量不够,怎么扩容?2、如果有一些 datanode 宕机,该怎么办?3、datanode 明明已启动,但是集群中的可用 data
31、node 列表中就是没有,怎么办?以上这类问题的解答,有赖于对 datanode 工作机制的深刻理解6.1 概述1、Datanode 工作职责:管理用户的文件块数据定期向 namenode 汇报自身所持有的 block(通过心跳上报)(这点很重要,因为,当集群中发生某些 block 副本失效时,集群如何恢复 block 初始副本数量的问题)2、Datanode 掉线时限参数datanode 进程或者网络故障造成 datanode 无法与 namenode 通信,namenode立即把该节点判定为,要经过一段时间,这段时间暂称作超时时长。HDFS 默认的超时时长为 10 分钟+30 秒。如果定义
32、超时时间为 timeout,则超时时长的计算公式为:timeout= 2 * erval + 10 * ervalMsec3600000Determines block reporting interval in milliseconds.而默认的 erval 大小为 5 分钟,erval 默认为 3 秒。需要注意的是 hdfs-site.xml 配置文件中的 heartbeat.recheck
33、.interval 的为毫秒,erval 的为秒。所以,举个例子,如果 erval 设置为5000(毫秒),erval 设置为 3(秒,默认),则总的超时时间为 40 秒。6.2 观察验证 DATANODE 功能上传一个文件,观察文件的 block 具体的物理存放情况:在每一台 datanode 机器上的这个目录中能找到文件的切块:/home/hadoop/app/hadoop-2.4.1/tmp/dfs/data/current/BP-193442119-20-
34、1432457733977/current/erval1*HDFS 应用开发篇*7. HDFS 的 java 操作hdfs 在生产应用中主要是客户端的开发,其步骤是从 hdfs 提供的 api 中构造一个 HDFS的客户端对象,然后通过该客户端对象操作(增删改查)HDFS 上的文件7.1 搭建开发环境1、引入依赖注:如需手动引入 jar 包,hdfs 的 jar 包hadoop 的安装目录的 share 下2、window 下开发的说明建议在 linux 下进行 hadoop 应用的
35、开发,用开发,需要设置以下环境:兼容性问题。如在 window 上做客户端应A、在 windows 的某个目录下解压一个 hadoop 的安装包B、将安装包下的 lib 和 bin 目录用对应 windows 版本平台编译的本地库替换C、在 window 系统中配置 HADOOP_HOME 指向你解压的安装包D、在 windows 系统的 path 变量中加入 hadoop 的 bin 目录7.2 获取 api 中的客户端对象在 java 中操作 hdfs,首先要获得一个客户端实例Configuration conf = new Configuration()FileSystem fs = F
36、ileSystem.get(conf)org.apache.hadoophadoop-2.6.1而我们的操作目标是 HDFS,所以获取到的 fs 对象应该是 DistributedFileSystem 的实例;get是从何处具体实例化那种客户端类呢?从 conf 中的一个参数 fs.defaultFS 的配置值;如果我们的代码中没有指定 fs.defaultFS,并且工程 classpath 下也没有给定相应的配置,conf 中的默认值就来自于 hadoop 的 jar 包中的 core-default.xml,默认值为: file:/,则获取的将不是一个 DistributedFileSys
37、tem 的实例,而是一个本地文件系统的客户端对象7.3 DistributedFileSystem 实例对象所具备的7.4 HDFS 客户端操作数据代码示例:7.4.1 文件的增删改查public class HdfsFileSystem fs = null;Beforepublic void init() throws Exception / 构造一个配置参数对象,设置一个参数:我们要的 hdfs 的 URI/ 从而 FileSystem.get()就知道应该是去构造一个hdfs 文件系统的客户端,以及 hdfs 的地址/ new Configuration();的时候,它就会去加载 jar
38、 包中的 hdfs-default.xml/ 然后再加载classpath 下的hdfs-site.xml Configuration conf = new Configuration();conf.set(fs.defaultFS, hdfs:/hdp-node01:9000);/* 参数优先级: 1、客户端代码中设置的值 2、classpath 下的用户自定义配置文件 3、然后是服务器的默认配置*/conf.set(dfs.replication, 3);/ 获取一个 hdfs 的客户端,根据参数,这个实例应该是 DistributedFileSystem 的实例/ fs = FileSy
39、stem.get(conf);/ 如果这样去获取,那 conf 里面就可以不要配fs.defaultFS参数,而且,这个客户端的标识已经是 hadoop 用户fs = FileSystem.get(new URI(hdfs:/hdp-node01:9000), conf, hadoop);/* 往 hdfs 上传文件* throws Exception*/ Testpublic void testAddFileToHdfs() throws Exception / 要上传的文件所在的本地路径Path src = new Path(g:/redis-recommend.zip);/ 要上传到 h
40、dfs 的目标路径Path dst = new Path(/aaa); fs.copyFromLocalFile(src, dst); fs.();/* 从 hdfs 中文件到本地文件系统* throws IOException* throws IllegalArgumentException*/ Testpublic void testDownloadFileToLocal() throws IllegalArgumentException, IOException fs.copyToLocalFile(new Path(/jdk-7u65-linux-i586.tar.gz), new P
41、ath(d:/);fs.();Testpublic void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException / 创建目录fs.mkdirs(new Path(/a1/b1/c1);/ 删除文件夹 ,如果是非空文件夹,参数 2 必须给值true fs.delete(new Path(/aaa), true);/ 重命名文件或文件夹fs.rename(new Path(/a1), new Path(/a2);/* 查看目录,只显示文件* throws IOException* throws Il
42、legalArgumentException* throws FileNotFoundException*/ Testpublic void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException / 思考:为什么返回迭代器,而不是 List 之类的容器RemoteIterator listFiles = fs.listFiles(new Path(/), true);while (listFiles.hasNext() LocatedFileStatus fileStatus =
43、listFiles.next();System.out.println(fileStatus.getPath().getName();System.out.println(fileStatus.getBlockSize(); System.out.println(fileStatus.getPermission(); System.out.println(fileStatus.getLen();BlockLocation blockLocations = fileStatus.getBlockLocations(); for (BlockLocation bl : blockLocations
44、) System.out.println(block-length: + bl.getLength() + - + block-offset: + bl.getOffset(); String hosts = bl.getHosts();for (String host : hosts) System.out.println(host);System.out.println(-为 angelababy 打印的分割线);/* 查看文件及文件夹* throws IOException* throws IllegalArgumentException* throws FileNotFoundExce
45、ption*/ Testpublic void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException FileStatus listStatus = fs.listStatus(new Path(/);String flag = d-;7.4.2 通过流的方式hdfs/* 相对那些封装而言的更底层一些的操作方式* 上层那些 mapreducespark 等运算框架,去 hdfs 中获取数据的时候,就是调的这种底层的 api* author*/public class StreamAcc
46、ess FileSystem fs = null;Beforepublic void init() throws Exception Configuration conf = new Configuration();fs = FileSystem.get(new URI(hdfs:/hdp-node01:9000), conf, hadoop);for (FileStatus fstatus : listStatus) if (fstatus.isFile() flag = f-;System.out.println(flag + fstatus.getPath().getName();/*
47、通过流的方式上传文件到 hdfs* throws Exception*/ Testpublic void testUpload() throws Exception FSDataOutputStream outputStream = fs.create(new Path(/angelababy.love), true); FileInputStream inputStream = new FileInputStream(c:/angelababy.love);IOUtils.copy(inputStream, outputStream);Testpublic void testDownLoadFileToLocal() throws IllegalArgumentException, IOException/先获取一个文件的输入流-hdfs 上的FSDataInputStream in = fs.open(new Path(/jdk-7u65-linux-i586.tar.gz);/再构造一个文件的输出流本地的FileOutputStream out = new FileOutputSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CHTS 10118-2023雄安新区高速公路智慧服务区建设指南
- T/CHINABICYCLE 4-2021电助力自行车用传感器
- T/CETA 004-2023舞台机械薄型旋转台
- T/CEPPEA 5028-2023陆上风力发电机组预应力预制混凝土塔筒施工与质量验收规范
- T/CECS 10371-2024城镇供水水质检测移动实验室
- T/CECS 10257-2022绿色建材评价重组材
- T/CAQI 092-2019食用豌豆纤维
- T/CAPMA 4-2018熟水貂皮质量检验
- 城市配送面试题及答案
- 德国设计面试题及答案
- 2025中学教师资格证《体育学科知识与教学能力》考前通关必练题库-含答案
- 2025届辽宁省丹东市高三总复习质量测试(一)生物试卷(原卷版+解析版)
- 2024中国人形机器人产业发展蓝皮书1
- 食堂大厨考试试题及答案
- 调车作业培训课件
- 违法用地违法建设培训
- 玉盘二部合唱简谱
- JJF(皖) 218-2025 重点排放单位碳排放计量审查规范
- 全国各地大气压一览表
- 2025年执业医师定期考核题库及参考答案
- 日间手术流程规范
评论
0/150
提交评论