4-Hbase安装配置和应用实践.doc_第1页
4-Hbase安装配置和应用实践.doc_第2页
4-Hbase安装配置和应用实践.doc_第3页
4-Hbase安装配置和应用实践.doc_第4页
4-Hbase安装配置和应用实践.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HBase集群的安装配置和应用实践1、 实验目的 1、 掌握Hbase在Hadoop集群体系结构中发挥的作用和使用过程。2、 掌握安装和配置HBase基本方法。3、 掌握HBase基本应用开发知识。2、 实验原理HBase Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase具有以下特性:1、线性及模块可扩展性。2、严格一致读写性。3、可配置的表自动分割策略。4、RegionServer自动故障恢复。5、便利地备份MapReduce作业的基类。6、便于客户端访问的Java API。7、为实时查询提供了块缓存和Bloom Filter。8、可通过服务器端的过滤器进行查询下推预测。9、提供XML、Protobuf及二进制编码的Thrift网管和REST-ful网络服务。10、可扩展的JIRB(jruby-based)shell。11、支持通过Hadoop或JMX将度量标准倒出到文件或Ganglia中。三、实验内容实验的主要内容有如下几点:1、ntp时间同步服务器搭建与使用2、Zookeeper集群环境安装过程详解3、HBase的安装和配置。4、HBase开发实践。4、 实验步骤本实验以unbutu14.04,hadoop2.20集群为前提进行实验。Zookeeper安装版本为zookeeper-3.4.5,HBase安装版本为hbase-0.96.2-hadoop2。Hadoop集群ip及角色分配如下17 master (namenode)00 slaver1 (datanode)01 slaver2 (datanode)第一部分:准备工作(Hadoop、SSH、NTP)1、Hadoop完全分布式的安装:必须可以正常启动 HDFS 系统,确保hdfs能够上传和读写文件。2、SSH无密验证双向互通:这个具体安装,并且达到无密码登录前面已经介绍。但是要达到双向无密码互通我们只需要将每台机器的公钥均写入到同一个授权文件,然后将授权文件复制到每台机器上即可(具体公钥写入授权文件的方法参考Hadoop完全分布式的安装试验)。这样就可以达到双向无密码互通。这样Hadoop的脚本才可以远程操控其他的Hadoop和Hbase进程。3、Ntp时间同步服务器安装配置:集群的时钟要保证基本的一致。稍有不一致是可以容忍的,但是很大的不一致会 造成奇怪的行为。 运行 NTP 或者其他什么东西来同步你的时间.下面对Ntp时间同步服务器NTP安装配置步骤如下:3.1、服务端(master)apt-get install ntp安装后默认启动服务,如果没有启动,启动之。/etc/init.d/ntp startvim /etc/ntp.conf 修改为如下:重启ntp服务/etc/init.d/ntp restart3.2、客户端(slaver1、slaver2)1)使用ntpdate命令,如果不存在这个命令,则先安装apt-get install ntp2) /usr/sbin/ntpdate 17 /即使用ip为17的ntp服务器同步时间3)设置定时同步 vim /etc/crontab系统便会在每天早上1点30分自动将系统时间同步到ntp服务器的时间当然这里crontab的时间是指客户端的时间,同步后等同于ntp服务器的时间另外,可以使用以下命令同步服务器时间ulimit 和 nproc设置(集群均配置)HBase是数据库,会在同一时间使用很多的文件句柄。大多数Ubuntu系统使用的默认值1024是不能满足的,所以你需要修改你的最大文件句柄限制。可以设置到10k. 你还需要修改 hbase 用户的 nproc,如果过低会造成 OutOfMemoryError异常。需要澄清的,这两个设置是针对操作系统的,不是Hbase本身的。有一个常见的错误是Hbase运行的用户,和设置最大值的用户不是一个用户。在Hbase启动的时候,第一行日志会现在ulimit信息,所以你最好检查一下。vim /etc/security/limits.conf 添加如下内容:root - nofile 32768root soft/hard nproc 32000在 /etc/pam.d/common-session 加上这一行:session required pam_limits.so如下:否则在 /etc/security/limits.conf上的配置不会生效.还有注销再登录,这些配置才能生效!root - nofile 32768 root最大能打开的文件数不超过65536root hard nproc 16384 root用户最大能开启的进程数不超过16384pam_limits.so模块可以使用在对一般应用程序使用的资源限制方面。如果需要在SSH服务器上对来自不同用户的ssh访问进行限制,就可以调用该模块来实现相关功能。当需要限制用户admin登录到SSH服务器时的最大连接数(防止同一个用户开启过多的登录进程),就可以在/etc/pam.d/sshd文件中增加一行对pam_limits.so模块的调用第二部分:ZooKeeper集群环境的安装配置Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。ZooKeeper安装过程以下步骤均在master服务器上操作,除非有特殊说明等完成以后再进行分发至其他服务器。1、解压zookeeper-3.4.5.tar.gz至/root目录下解压:tar -zxf zookeeper-3.4.5.tar.gz更改名字为zookeeper:mv zookeeper-3.4.5 u-zookeeper2、 修改zoo.cfg配置文件在Zookeeper集群环境下只要一半以上的机器正常启动了,那么Zookeeper服务将是可用的。因此,集群上部署Zookeeper最好使用奇数台机器,这样如果有5台机器,只要3台正常工作则服务将正常,下面我们将对Zookeeper的配置文件的参数进行设置进入到u-zookeeper的conf目录下将zoo_sample.cfg文件拷贝一份,命名为为:zoo.cfgvim zoo.cfg修改内容如下:dataDir=/root/u-zookeeper/data #这两个目录需要创建dataLogDir=/root/u-zookeeper/logserver.1=98:2888:3888server.2=78:2888:3888server.3=79:2888:3888注意上图的配置中master,slave1分别为主机名。在上面的配置文件中server.id=host:port:port中的第一个port是从机器(follower)连接到主机器(leader)的端口号,第二个port是进行leadership选举的端口号。接下来在dataDir所指定的目录下创建一个文件名为myid的文件,文件中的内容只有一行,为本主机对应的id值,也就是上图中server.id中的id。例如:在服务器1中的myid的内容应该写入1,在服务器2中的myid的内容应该写入2。4、配置环境变量vim /etc/profile:/root/u-zookeeper/confvim /etc/environment/root/u-zookeeper/bin:6、远程复制分发安装文件接下来将上面的安装文件拷贝到集群中的其他机器上对应的目录下:同理拷贝/etc/profile,/etc/environment至slaver1,slaver2中拷贝完成后修改对应的机器上的myid。例如修改slaver1中的myid如下:echo 2 /roor/u-zookeeper/data/myid cat /roor/u-zookeeper/data/myid2例如修改slaver2中的myid如下:echo 3 /roor/u-zookeeper/data/myid cat /roor/u-zookeeper/data/myid 3以上操作完成后,请所有节点服务器重启。一定要reboot7、 启动zookeeper集群在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:zkServer.sh start如下图所示:其中,QuorumPeerMain是zookeeper进程,启动正常。如上依次启动了所有机器上的Zookeeper之后可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper集群中的每个结点上查询的结果:通过上面状态查询结果可见,slaver1是集群的Leader,其余的两个结点是Follower另外,可以通过客户端脚本,连接到ZooKeeper集群上。对于客户端来说,ZooKeeper是一个整体(ensemble),连接到ZooKeeper集群实际上感觉在独享整个集群的服务,所以,你可以在任何一个结点上建立到服务集群的连接,例如:退出:quit8、 停止zookeeper进程:zkServer.sh stop至此,Zookeeper集群安装完成!第三部分:Hbase的安装设置1、 解压hbase-0.96.2-hadoop2-bin.tar.gz.tar,并更名为u-hbasetar -xzvf hbase-0.96.2-hadoop2-bin.tar.gz.taru-hbase目录结构如下:2、 配置conf/hbase-env.shvim /root/u-hbase/conf/hbase-env.sh添加内容如下:一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群,即Hbase默认自带一个zookeep集群。这个集群会随着Hbase的启动而启动。而在实际的商业项目中通常自己管理一个zookeeper集群更便于优化配置提高集群工作效率,但需要配置Hbase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.在本实验中,我们采用独立运行zookeeper集群的方式,故将其属性值改为false.3、 配置conf/hbase-site.xml配置效果图如下:hbase.rootdirhdfs:/98:9000/hbasehbase.masterhdfs:/98:60000hbase.tmp.dirfile:/root/u-hbase/perty.dataDirfile:/root/u-zookeeper/datahbase.cluster.distributedtruehbase.zookeeper.quorummaster,slaver1,perty.clientPort2181要想运行完全分布式模式,加一个属性 hbase.cluster.distributed 设置为 true 然后把 hbase.rootdir 设置为HDFS的NameNode的位置hbase.rootdir:这个目录是region server的共享目录,用来持久化Hbase。URL需要是完全正确的,还要包含文件系统的schemehbase.cluster.distributed:Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面。在hbase-site.xml配置zookeeper:当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum.在这里列出Zookeeper集群的地址列表,用逗号分割。perty.clientPort:ZooKeeper的zoo.conf中的配置,客户端连接的端口。perty.dataDir:ZooKeeper的zoo.conf中的配置。对于独立的Zookeeper,要指明Zookeeper的host和端口。需要在 hbase-site.xml中设置。4、 配置conf/regionservers写入:slaver1、slaver2在这里列出了你希望运行的全部 HRegionServer,一行写一个host (就像Hadoop里面的 slaves 一样). 列在这里的server会随着集群的启动而启动,集群的停止而停止.5、 分发hbase上面我们配置完毕,接着就是把这个文件夹下发到slave节点:scp -r /root/u-hbase slaver1:/root/scp -r /root/u-hbase slaver2:/root/6、 运行和测试在master上执行:1、start-dfs.sh 2、start-yarn.sh3、zkServer.sh start(各个节点均执行)4、start-hbase.sh (先启动zookeeper然后hadoop再然后hbase)使用jps查看进程,在master上:在slaver1、slaver2(slave节点)上通过浏览器查看60010,60030端口查看17:60010/18:60030/rs-status第四部分:Hbase应用实践1、HBase表结构介绍在使用HBase之前,先介绍HBase的表结构,这样有利于实验的实践。HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)。Row Keycolumn-family1column-family2column-family3column1column2column1column2column3column1key1key2key3如上图所示,key1,key2,key3是三条记录的唯一的row key值,column-family1,column-family2,column-family3是三个列族,每个列族下又包括几列。比如column-family1这个列族下包括两列,名字是column1和column2,t1:abc,t2:gdxdf是由row key1和column-family1-column1唯一确定的一个单元cell。这个cell中有两个数据,abc和gdxdf。两个值的时间戳不一样,分别是t1,t2, hbase会返回最新时间的值给请求者。这些名词的具体含义如下:(1)Row Key与nosql数据库们一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:(1.1) 通过单个row key访问(1.2) 通过row key的range(1.3) 全表扫描Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)注意:字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。行的一次读写是原子操作 (不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。(2)列族 column familyhbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history , courses:math 都属于 courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。(3) 单元CellHBase中通过row和columns确定的为一个存贮单元称为cell。由row key, column( = + ), version 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。(4)时间戳 timestamp每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。2、实例创建一张学生成绩表下面我们要创建以下一张学生成绩表:namegradcoursemathartTom59787Jim48980这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族。(1)建立一个表scores,有两个列族grad和courese代码如下:hbase(main):001:0 create scores,grade, course可以使用list命令来查看当前HBase里有哪些表。使用describe命令来查看表结构。(记得所有的表明、列名都需要加上引号)(2)按设计的表结构插入值:代码如下:put scores,Tom,grade:,5put scores,Tom,course:math,97put scores,Tom,course:art,87put scores,Jim,grade,4put scores,Jim,course:math,89put scores,Jim,course:art,80这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,加不加冒号都是可以的。put命令比较简单,只有这一种用法:hbase put t1, r1, c1, value, ts1t1指表名,r1指行键名,c1指列名,value指单元格值。ts1指时间戳,一般都省略掉了。(3)根据键值查询数据get scores,Jimget scores,Jim,grade可能你就发现规律了,HBase的shell操作,一个大概顺序就是操作关键词后跟表名,行名,列名这样的一个顺序,如果有其他条件再用花括号加上。get有用法如下:hbase get t1, r1hbase get t1, r1, TIMERANGE = ts1, ts2hbase get t1, r1, COLUMN = c1hbase get t1, r1, COLUMN = c1, c2, c3hbase get t1, r1, COLUMN = c1, TIMESTAMP = ts1hbase get t1, r1, COLUMN = c1, TIMERANGE = ts1, ts2, VERSIONS = 4hbase get t1, r1, COLUMN = c1, TIMESTAMP = ts1, VERSIONS = 4hbase get t1, r1, c1hbase get t1, r1, c1, c2hbase get t1, r1, c1, c2 (4)扫描所有数据scan scores也可以指定一些修饰词:TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,or COLUMNS。没任何修饰词,就是上边例句,就会显示所有数据行。例句如下:代码如下:hbase scan .META.hbase scan .META., COLUMNS = info:regioninfohbase scan t1, COLUMNS = c1, c2, LIMIT = 10, STARTROW = xyzhbase scan t1, COLUMNS = c1, TIMERANGE = 1303668804, 1303668904hbase scan t1, FILTER = “(PrefixFilter (row2) AND (QualifierFilter (=, binary:xyz) AND (TimestampsFilter ( 123, 456)”hbase scan t1, FILTER = org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)过滤器filter有两种方法指出:a. Using a filterString more information on this is available in theFilter Language document attached to the HBASE-4176 JIRAb. Using the entire package name of the filter.还有一个CACHE_BLOCKS修饰词,开关scan的缓存的,默认是开启的(CACHE_BLOCKS=true),可以选择关闭(CACHE_BLOCKS=false)。(5)删除指定数据代码如下:delete scores,Jim,gradedelete scores,Jim删除数据命令也没太多变化,只有一个:hbase delete t1, r1, c1, ts1另外有一个deleteall命令,可以进行整行的范围的删除操作,慎用!如果需要进行全表删除操作,就使用truncate命令,其实没有直接的全表删除命令,这个命令也是disable,drop,create三个命令组合出来的。(6)修改表结构代码如下:disable scoresalter scores,NAME=infoenable scoresalter命令使用如下(如果无法成功的版本,需要先通用表disable):a、改变或添加一个列族:hbase alter t1, NAME = f1, VERSIONS = 5b、删除一个列族:代码如下:hbase alter t1, NAME = f1, METHOD = deletehbase alter t1, delete = f1c、也可以修改表属性如MAX_FILESIZEMEMSTORE_FLUSHSIZE, READONLY,和 DEFERRED_LOG_FLUSH:hbase alter t1, METHOD = table_att, MAX_FILESIZE = 134217728d、可以添加一个表协同处理器hbase alter t1, METHOD = table_att, coprocessor= hdfs:/foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2一个表上可以配置多个协同处理器,一个序列会自动增长进行标识。加载协同处理器(可以说是过滤程序)需要符合以下规则:coprocessor jar file location | class name | priority | argumentse、移除coprocessor如下:hbase alter t1, METHOD = table_att_unset, NAME = MAX_FILESIZEhbase alter t1, METHOD = table_att_unset, NAME = coprocessor$1f、可以一次执行多个alter命令:hbase alter t1, NAME = f1, NAME = f2, METHOD = delete(7)统计行数:代码如下:hbase count t1hbase count t1, INTERVAL = 100000hbase count t1, CACHE = 1000hbase count t1, INTERVAL = 10, CACHE = 1000count一般会比较耗时,使用mapreduce进行统计,统计结果会缓存,默认是10行。统计间隔默认的是1000行(INTERVAL)。(8)disable 和 enable 操作很多操作需要先暂停表的可用性,比如上边说的alter操作,删除表也需要这个操作。disable_all和enable_all能够操作更多的表。(9)表的删除先停止表的可使用性,然后执行删除命令。drop t1 第五部分:Hbase shell 常用命令实践下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下:名称命令表达式创建表create 表名称, 列名称1,列名称2,列名称N添加记录 put 表名称, 行名称, 列名称:, 值查看记录get 表名称, 行名称查看表中的记录总数count 表名称删除记录delete 表名 ,行名称 , 列名称删除一张表先要屏蔽该表,才能对该表进行删除,第一步 disable 表名称 第二步 drop 表名称查看所有记录scan 表名称查看某个表某个列中所有数据scan 表名称 , 列名称:更新记录就是重写一遍进行覆盖下面是一些常见命令的说明,在hbaseshell中输入help的帮助信息,在实验中,我们先介绍前3个,后面2个留个个人研究探索。COMMAND GROUPS: Group name: general Commands: status, version Group name: ddl Commands: alter, create, describe, disable,drop, enable, exists, is_disabled, is_enabled, list Group name: dml Commands: count, delete, deleteall, get,get_counter, incr, put, scan, truncate Group name: tools Commands: assign, balance_switch, balancer,close_region, compact, flush, major_compact, move, split, unassign, zk_dump Group name: replication Commands: add_peer, disable_peer,enable_peer, remove_peer, start_replication, stop_replication一般操作1.查询服务器状态hbase(main):024:0status3 servers, 0 dead,1.0000 average load2.查询hive版本hbase(main):025:0version0.90.4, r1150278,Sun Jul 24 15:53:29 PDT 2011DDL操作数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。1.创建一个表hbase(main):011:0create member,member_id,address,info0 row(s) in 1.2210seconds2.获得表的描述hbase(main):012:0listTABLEmember1 row(s) in 0.0160secondshbase(main):006:0describe memberDESCRIPTIONENABLEDNAME = member, FAMILIES = NAME= address, BLOOMFILTER = NONE, REPLICATION_SCOPE = 0, true VERSIONS = 3, COMPRESSION = NONE,TTL = 2147483647, BLOCKSIZE = 65536, IN_MEMORY = false, BLOCKCACHE = true, NAME =info, BLOOMFILTER = NONE, REPLICATION_SCOPE = 0, VERSIONS = 3, COMPRESSION = NONE, TTL= 2147483647, BLOCKSIZE = 65536, IN_MEMORY = false,BLOCKCACHE = true1 row(s) in 0.0230seconds3.删除一个列族,alter,disable,enable我们之前建了3个列族,但是发现member_id这个列族是多余的,因为他就是主键,所以我们要将其删除。hbase(main):003:0alter member,NAME=member_id,METHOD=deleteERROR: Table memberis enabled. Disable it first before altering.报错,删除列族的时候必须先将表给disable掉。hbase(main):004:0disable member0 row(s) in 2.0390secondshbase(main):005:0altermember,NAME=member_id,METHOD=delete0 row(s) in 0.0560secondshbase(main):006:0describe memberDESCRIPTIONENABLEDNAME = member, FAMILIES = NAME= address, BLOOMFILTER = NONE, REPLICATION_SCOPE = 0,false VERSIONS = 3, COMPRESSION = NONE,TTL = 2147483647, BLOCKSIZE = 65536, IN_MEMORY = false, BLOCKCACHE = true, NAME =info, BLOOMFILTER = NONE, REPLICATION_SCOPE = 0, VERSIONS = 3, COMPRESSION = NONE, TTL= 2147483647, BLOCKSIZE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论