




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、大數(shù)據(jù)技術(shù)基礎(chǔ)培訓(xùn)1HBase 技術(shù)介紹Hbase介紹Hbase是什么?Hadoop數(shù)據(jù)庫?Key-Value存儲(chǔ)?面向列族的數(shù)據(jù)庫?可以隨機(jī)訪問的存儲(chǔ)和檢索數(shù)據(jù)的平臺(tái)起源Google發(fā)表Google文件系統(tǒng)(GFS)、MapReduce、BigTableLucene - Nutch - Hadoop - HbaseHbase版本發(fā)展2007.4 第一個(gè)版本(HBASE-287 Mike Cafarella)2010.10 0.89(Facebook的生產(chǎn)版本)2012.1 0.92(Adds 安全,協(xié)處理器,HFile V2,分布式log-Splitting)2012.5 0.94(Perf
2、ormance Release),目前是主流版本。2013.10 0.96(支持hadoop 2.0、JDK7,添加 protobuf,Table Snapshot,PrefixTreeCompression等等)Transwarp版本 基于0.94.11Hbase應(yīng)用場景互聯(lián)網(wǎng)搜索(爬蟲收集網(wǎng)頁到BigTable)抓取增量數(shù)據(jù)OpenTSDB計(jì)數(shù)器內(nèi)容服務(wù)URL短鏈接信息交換FaceBook短信系統(tǒng)56Hbase數(shù)據(jù)模型7Hbase數(shù)據(jù)模型8Hbase數(shù)據(jù)模型9Hbase數(shù)據(jù)模型10Hbase數(shù)據(jù)模型11Hbase數(shù)據(jù)模型12Hbase數(shù)據(jù)模型Hbase數(shù)據(jù)模型數(shù)據(jù)可以通過column fa
3、mily進(jìn)行分割一個(gè)表由多個(gè)region組成每一個(gè)region都有指定的start key 和 end key每一個(gè)region底層是存儲(chǔ)在HDFS上的一個(gè)或多個(gè)文件組成(HFile)13Hbase數(shù)據(jù)模型14Hbase數(shù)據(jù)模型所有值都會(huì)存儲(chǔ)完整的坐標(biāo)值,包括Row Key、Column Family、 Column Qualifier and Timestamp每一個(gè)Cell(column)都是一行不同version是均是一行Null值不占用空間,因?yàn)椴粫?huì)被存儲(chǔ)15HBase架構(gòu)1617關(guān)系數(shù)據(jù)庫中的B+樹關(guān)系數(shù)據(jù)庫中常用B+樹組織數(shù)據(jù)如上圖所示,內(nèi)部節(jié)點(diǎn)已經(jīng)存滿,再插入一個(gè)新記錄時(shí),需要在
4、B+樹中插入一個(gè)新的內(nèi)部節(jié)點(diǎn),再鏈到B+樹中這里的問題是新的內(nèi)部節(jié)點(diǎn)在磁盤上可能存放在很遠(yuǎn)的地方,在順序掃描數(shù)據(jù)時(shí),不得不seek磁盤Log-Structured Merge-Treesinsert/update寫入log后,再寫入內(nèi)存(memory store)memory store寫滿后,flush到磁盤上后臺(tái)進(jìn)程/線程對磁盤上多個(gè)文件進(jìn)行合并,組成排序后的B+樹,同時(shí)處理刪除、更新、TTL等查詢時(shí)先查內(nèi)存中的數(shù)據(jù),再查磁盤18Seek vs TransferComplexity:B+ tree operates at the disk seek rate, resulting in l
5、og(N) seeks per access.LSM-trees, sorts and merges files while operating at transfer rates, and takes log(updates) operationsGiven these numbers: 10 MB/second transfer bandwidth 10 milliseconds disk seek time 100 bytes per entry (10 billion entries) 10 KB per page (1 billion pages)When updating 1% o
6、f entries (100,000,000), it takes: 1,000 days with random B-tree updates 100 days with batched B-tree updates 1 day with sort and merge1920Seek Versus Sort and Merge in NumbersFor our large-scale scenarios, computation is dominated by disk transfers. Although CPU, RAM, and disk size double every 182
7、4 months, seek time remains nearly constant at around a 5% increase in speed per year.As discussed at the beginning of this chapter, there are two different database paradigms: one is seek and the other is transfer. Seek is typically found in RDBMSes and is caused by the B-tree or B+ tree structures
8、 used to store the data. It operates at the disk seek rate, resulting in log(N) seeks per access.Transfer, on the other hand, as used by LSM-trees, sorts and merges files while operating at transfer rates, and takes log(updates) operations. This results in the following comparison given these values
9、: 10 MB/second transfer bandwidth 10 milliseconds disk seek time 100 bytes per entry (10 billion entries) 10 KB per page (1 billion pages)When updating 1% of entries (100,000,000), it takes: 1,000 days with random B-tree updates 100 days with batched B-tree updates 1 day with sort and mergeWe can sa
10、fely conclude that, at scale seek, is inefficient compared to transfer.Hbase架構(gòu)21HMaster處理表的創(chuàng)建、刪除、修改等操作分配region到region server上負(fù)載均衡各個(gè)region server上的region維護(hù)集群狀態(tài)通過zookeeper監(jiān)控狀態(tài)、協(xié)調(diào)操作不提供數(shù)據(jù)服務(wù)Region Server處理region所有的讀寫操作直接與client進(jìn)行數(shù)據(jù)通信控制region的分割對region進(jìn)行compact操作在運(yùn)行中可以動(dòng)態(tài)添加、刪除22HBase 組件交互HMasterRegionServe
11、rRegion1Region4RegionServerRegion3Region5RegionServerRegion2Region6ClientMetadata ops (create table, )Read/WriteRegion assignment and load balancingMasterSlavesHbase架構(gòu)region定位 .META.:記錄了用戶表的Region信息,.META.可以有多個(gè)regoin -ROOT-:記錄了.META.表的Region信息,-ROOT-只有一個(gè)regionZookeeper中記錄了-ROOT-表的location最新版本已經(jīng)沒有-RO
12、OT-23Hbase架構(gòu)數(shù)據(jù)流24Hbase架構(gòu)讀取定位對應(yīng)的region所在的region serverBlockCacheHFileMemStore25Hbase架構(gòu)插入定位對應(yīng)的region所在的region server將Put、Delete等操作寫入預(yù)寫日志W(wǎng)AL預(yù)寫日志寫完后將數(shù)據(jù)寫入MemStore當(dāng)MemStore中的數(shù)據(jù)達(dá)到一定閾值時(shí),將數(shù)據(jù)以Hfile的形式保存到HDFS中不會(huì)阻塞其他讀寫操作多個(gè)Column Family?26Hbase架構(gòu)插入定位對應(yīng)的region所在的region server將Put、Delete等操作寫入預(yù)寫日志W(wǎng)AL預(yù)寫日志寫完后將數(shù)據(jù)寫入Mem
13、Store當(dāng)MemStore中的數(shù)據(jù)達(dá)到一定閾值時(shí),將數(shù)據(jù)以Hfile的形式保存到HDFS中不會(huì)阻塞其他讀寫操作多個(gè)Column Family?27Hbase CompactionCompaction是將HFile合并的機(jī)制Minor Compaction將多個(gè)小文件合并成一個(gè)文件Major Compaction將所有文件合并成一個(gè)文件處理delete marker,真正刪除文件刪除多余的版本數(shù)據(jù)默認(rèn)每個(gè)region一天觸發(fā)一次28Hbase Splitting當(dāng)region的數(shù)據(jù)過大時(shí),就會(huì)觸發(fā)splitting操作使用middle key分割成兩個(gè)相鄰的region可以手動(dòng)觸發(fā)Splitt
14、ing的速度很快只是創(chuàng)建現(xiàn)有Hfile的引用文件,并未直接將文件分割開只有當(dāng)觸發(fā)過compaction時(shí)才真正重寫數(shù)據(jù)思考題:何時(shí)刪除父region的數(shù)據(jù)?29Auto shardingHBase MemStore性能相關(guān)參數(shù)hbase.hregion.memstore.flush.size 134217728(128M)base.regionserver.global.memstore.lowerLimit 0.35當(dāng)MemsStore所占內(nèi)存超過該比例強(qiáng)制flush hbase.regionserver.global.memstore.upperLimit 0.4阻塞插入操作hbase.h
15、region.memstore.block.multiplier 2當(dāng)一個(gè)region的MemStore的大小達(dá)到flush閾值的2倍時(shí),該region的寫操作被阻塞31Hbase數(shù)據(jù)localityRegionServer與Datanode部署在同一臺(tái)服務(wù)器上新插入的數(shù)據(jù)優(yōu)先在本地磁盤(HDFS保證)動(dòng)態(tài)locality讀本地文件(HDFS short circuit)Hbase表結(jié)構(gòu)設(shè)計(jì)33Hbase表結(jié)構(gòu)設(shè)計(jì)使用row key 查詢的時(shí)候可以獲得最佳的查詢性能選定時(shí)間(timestamp)范圍,在有些時(shí)候能夠略過一些文件指定column family 能夠有效的減少被掃描的數(shù)據(jù)指定col
16、umn qualifier可以減少網(wǎng)絡(luò)傳輸,但不會(huì)減少硬盤IO大部分情況下,使用filter對值進(jìn)行過濾的查詢都是全表掃描雖然全表,但是網(wǎng)絡(luò)傳輸會(huì)降低34Hbase表結(jié)構(gòu)設(shè)計(jì)查詢性能好的關(guān)鍵?RDBMS為什么快?Column的索引合理的query planHbase沒有怎么辦?充分利用row key 和 column的排序反規(guī)范化、復(fù)制反規(guī)范化 替代Join操作復(fù)制 為讀優(yōu)化3536Hbase表結(jié)構(gòu)設(shè)計(jì)順序RowKey: CF: CQ: TS: Val 最新的Region會(huì)成為寫入熱點(diǎn):寫入性能非常糟糕!相反,我們可以這么做:加鹽值在前面加一些離散值相當(dāng)于分桶,不同的桶在不同的region上K
17、ey field換位把移到rowkey的中間或者后面隨機(jī)Key在rowkey中去除Salting 在rowkey加前綴來使數(shù)據(jù)分散 使用常見的值或者數(shù)字作為前綴 使用求模的方式來使數(shù)據(jù)分散 使常用的的數(shù)據(jù)緊跟在后面,已方便查找或者用mapreduce處理0_rowkey1, 1_rowkey2, 2_rowkey30_rowkey4, 1_rowkey5, 2_rowkey6數(shù)據(jù)會(huì)先按前綴排序0_rowkey10_rowkey41_rowkey21_rowkey5 Hashing vs. Sequential Keys使用哈希值可以獲得最好的分散性Uses hashes for best sp
18、read 使用MD5來對用戶ID進(jìn)行運(yùn)算Key = MD5(customerID) 對于customerID的區(qū)間進(jìn)行掃描會(huì)有反作用 使用sequential keys可以獲得一些本地性 可以充分利用block caches 可能會(huì)過度使用單臺(tái)服務(wù)器,通過salting或者split region來保證region在一個(gè)較小的狀態(tài)順序RowKey: CF: CQ: TS: Val 最新的Region會(huì)成為寫入熱點(diǎn):寫入性能非常糟糕!相反,我們可以這么做:加鹽值在前面加一些離散值相當(dāng)于分桶,不同的桶在不同的region上Key field換位把移到rowkey的中間或者后面隨機(jī)Key在rowke
19、y中去除Salting Prefix row keys to gain spread Use well known or numbered prefixes Use modulo to spread across servers Enforce common data stay close to each other for subsequent scanning or MapReduce processing0_rowkey1, 1_rowkey2, 2_rowkey30_rowkey4, 1_rowkey5, 2_rowkey6Sorted by prefix first0_rowkey1
20、0_rowkey41_rowkey21_rowkey5 Hashing vs. Sequential KeysUses hashes for best spread Use for example MD5 to be able to recreate key Key = MD5(customerID) Counter productive for range scans Use sequential keys for locality Makes use of block caches May tax one server overly, may be avoided by salting o
21、r splitting regions while keeping them smallHbase表列族高級(jí)配置數(shù)據(jù)塊大小非HDFS Block,默認(rèn)65536(64K)數(shù)據(jù)塊小,索引大隨機(jī)查找性能、順序掃面性能數(shù)據(jù)塊緩存是否把數(shù)據(jù)放進(jìn)內(nèi)存,對于只進(jìn)行順序掃描或很少使用的表可以關(guān)閉內(nèi)存表LRU緩存的優(yōu)先級(jí)高布隆過濾器(Bloom Filter)ROW,ROWCOL生存時(shí)間(TTL)壓縮Block Encoding (PREFIX、DIFF、FAST DIFF)單元時(shí)間版本Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例熟悉的數(shù)據(jù)建模工具E-R圖Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例演唱會(huì)Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例傳統(tǒng)數(shù)據(jù)庫就從規(guī)范化
22、數(shù)據(jù)模型開始實(shí)體 表格屬性 列關(guān)聯(lián) 外鍵多對多關(guān)聯(lián) 聯(lián)接表Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例這些都有了是不是就夠了?如果數(shù)據(jù)是GB級(jí)別的?如果是TB級(jí)別的?Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例在Hbase中 E-R圖怎么映射?實(shí)體 表?不一定 ! !屬性 ?HBase表結(jié)構(gòu)設(shè)計(jì)實(shí)例屬性的順序沒有關(guān)系有些屬性具有辨識(shí)性主鍵 ? 樂隊(duì)HBase表結(jié)構(gòu)設(shè)計(jì)實(shí)例不存在唯一鍵? 聯(lián)合主鍵問題?順序?長度?拼接方式?固定長度分隔符其它序列化(Avro等)HBase表結(jié)構(gòu)設(shè)計(jì)實(shí)例增加屬性類型不是必要Hbase沒有類型(暫時(shí))可以幫助思考排序問題HBase表結(jié)構(gòu)設(shè)計(jì)實(shí)例還沒討論關(guān)聯(lián)!HBase沒有外鍵不支持JOIN沒有索引不支持事
23、務(wù)(只支持行級(jí)事務(wù))Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例如何處理Join?自己處理(應(yīng)用程序)反規(guī)范化( Denormalizing )將兩個(gè)邏輯實(shí)體用一個(gè)物理實(shí)體來展現(xiàn)Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例試試常規(guī)的反規(guī)范化嘗試將信息整合到Band中有點(diǎn)難以接受,從Show入手也是一樣,換個(gè)方式Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例試試整合進(jìn)聯(lián)接表似乎能夠用了Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例在HBase中列和傳統(tǒng)數(shù)據(jù)庫不同列可以動(dòng)態(tài)增加的新插入的數(shù)據(jù)不需要是一個(gè)指定的類型甚至它不需要是一個(gè)列!Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例現(xiàn)在試試 把show放入bandHbase不限制你怎么做只需要你的應(yīng)用知道如何處理Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例等等, show也
24、是一個(gè)實(shí)體,應(yīng)該有它的屬性將nested entity再細(xì)分一下有辨識(shí)性的的屬性可以作為Column Qualifier其他屬性則可以組合在value中Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例剛才將show放入了band可以放入其它信息么?比如樂隊(duì)成員?qualifier starts with:s + show_ida + album_idm + nameHbase表結(jié)構(gòu)設(shè)計(jì)一些建議宗旨為讀做優(yōu)化根據(jù)數(shù)據(jù)訪問方式來決定key的類型利用column family分割數(shù)據(jù)將數(shù)據(jù)組合在一起(替代join)盡量只是用一個(gè)讀操作完成一個(gè)請求(至少要做到盡可能少)避免熱點(diǎn)順序的rowkey可以使用bulkload來進(jìn)行
25、插入預(yù)分配region60Hbase表結(jié)構(gòu)設(shè)計(jì)實(shí)例上網(wǎng)日志URL短鏈接微博粉絲關(guān)系私信的全文檢索其它?HBase ShellHBase Shell is 在(J)Ruby的IRB的基礎(chǔ)上加上了HBase的命令。任何你可以在IRB里做的事情都可在在HBase Shell中做。你可以這樣來運(yùn)行HBase Shell: $ ./bin/hbase shell輸入 help 就會(huì)返回Shell的命令列表和選項(xiàng)??梢钥纯丛贖elp文檔尾部的關(guān)于如何輸入變量和選項(xiàng)。創(chuàng)建一個(gè)名為 test 的表,這個(gè)表只有一個(gè) 列族 為 cf。 hbase(main):003:0 create test, cf可以列出所有
26、的表來檢查創(chuàng)建情況。 hbase(main):003:0 list插入 hbase(main):004:0 put test, row1, cf:a, value1Scan這個(gè)表 hbase(main):007:0 scan testGet一行 hbase(main):008:0 get test, row1刪除表 hbase(main):012:0 disable test 0 row(s) in 1.0930 seconds hbase(main):013:0 drop test 0 row(s) in 0.0770 seconds HBase APIpublic void createT
27、able(HTableDescriptor desc) 創(chuàng)建表api,通過HBaseAdmin對象來操作的,HBaseAdmin提供了createTable這個(gè)方法。HTableDescriptor 代表的是表的schemapublic void addFamily(final HColumnDescriptor family) 增加family通過 addFamily方法。HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);HTableDescriptor t = new HTableDescriptor(tableName);HColumnDes
28、criptor cf1 = new HColumnDescriptor(f1);cf1.setBlocksize(65536);cf1.setMaxVersions(1);cf1.setBloomFilterType(BloomType.ROW);cf1.setCompressionType(Algorithm.SNAPPY);cf1.setDataBlockEncoding(DataBlockEncoding.PREFIX);cf1.setTimeToLive(36000);cf1.setInMemory(false);t.addFamily(cf1); hAdmin.createTable
29、(t);HBase APIHTable通過put方法來插入數(shù)據(jù)??梢詡鬟f單個(gè)批Put對象 public void put(final Put put) throws IOExceptionList put對象批量插入 public void put(final List puts) throws IOExceptionHbase 插入HTable table = new HTable(hbaseConfig, tableName);table.setAutoFlush(autoFlush);/設(shè)置是否自動(dòng)flushList lp = new ArrayList(); int count = 1
30、0000; byte buffer = new byte1024; Random r = new Random();for (int i = 1; i = count; +i) Put p = new Put(String.format(“row%09d”,i).getBytes(); r.nextBytes(buffer); p.add(“f1.getBytes(), null, buffer); p.add(“f2.getBytes(), null, buffer); p.setWriteToWAL(wal); /設(shè)置是否寫入WAL lp.add(p); if(i%1000=0) tabl
31、e.put(lp); lp.clear(); HBase API刪除表也是通過HBaseAdmin來操作,刪除表之前首先要disable表。這是一個(gè)比較耗時(shí)的操作,所以不建議頻繁刪除表。Example:HBaseAdmin hAdmin = new HBaseAdmin(hbaseConfig);if (hAdmin.tableExists(tableName) hAdmin.disableTable(tableName);/Disable 表,不再提供讀寫 hAdmin.deleteTable(tableName);/刪除數(shù)據(jù)文件HBase APIHBase的查詢通過掃描和過濾來得到相關(guān)記錄
32、返回的記錄是排好序的設(shè)計(jì)一個(gè)好的行鍵來匹配訪問模式掃描器緩存的值決定了客戶端對HBase的RPC調(diào)用在掃描整張表后返回的行數(shù)緩存一次RPC獲取的行數(shù)Scan.setCaching(int)配置hbase.client.scanner.cachingHBase API單條查詢是通過rowkey在table中查詢某一行的數(shù)據(jù)。HTable提供了get方法來完成單條查詢。 public Result get(final Get get)批量查詢是通過制定一段rowkey的范圍來查詢。HTable提供了個(gè)getScanner方法來完成批量查詢。public ResultScanner getScann
33、er(final Scan scan)Scan s = new Scan();s.setMaxVersions(3);ResultScanner ss = table.getScanner(s);for(Result r:ss) System.out.println(new String(r.getRow(); for(KeyValue kv:r.raw() System.out.println(new String(kv.getColumn(); Hbase Filter過濾器是在HBase服務(wù)器端上執(zhí)行判斷操作過濾器可以應(yīng)用到行鍵(RowFilter),列限定符(QualifierFilt
34、er)或者數(shù)據(jù)值(ValueFilter)過濾器允許對數(shù)據(jù)分頁處理(PageFilter),限制掃描器返回行數(shù)FilterList可以組合使用多個(gè)FilterHbase Filter 接口說明重置filter狀態(tài) reset()在過濾器中構(gòu)建邏輯來提早停止一次掃描: boolean filterAllRemaining()基于行鍵執(zhí)行過濾 boolean filterRowKey(byte buffer, int offset ,int length)如果該行沒有在上一步被過濾掉,接著調(diào)用這個(gè)方法處理當(dāng)前行的每個(gè)keyvalue對象 ReturnCode filterKeyValue(KeyV
35、alue v)變換KeyValue (eg:KeyOnlyFilter) transform(KeyValue v)過濾掉keyvalue后,調(diào)用: (eg:DependentColumnFilter) void filterRow(List kvs)最后是否選擇過濾掉某些行:(eg:SingleColumnValueFilter) boolean filterRow()Hbase Filter接口說明ReturnCodeINCLUDE 包含這個(gè)CellINCLUDE_AND_NEXT_COL 包含這個(gè)Cell并跳過老版本SKIP 跳過這個(gè)cellNEXT_COL 跳轉(zhuǎn)到下一個(gè)columnNE
36、XT_ROW 跳轉(zhuǎn)到下一行SEEK_NEXT_USING_HINT Seek到下一個(gè)Hint值KeyValue getNextKeyHint(KeyValue currentKeyValue) 根據(jù)現(xiàn)在的KeyValue構(gòu)造下一個(gè)可能的KeyValueHbase FuzzyRowFilter用例Rowkey 樣式userId_actionId_timestamp(action比如登錄、修改密碼等)可以快速獲取到用戶的登錄操作等如果需要分析用戶最近的登錄狀況,怎么辦?全表掃描 + RowFilter?冗余存儲(chǔ)?(修改?)注意:Rowkey 需要定長FuzzyRowFilter rowFilter
37、 = new FuzzyRowFilter( Arrays.asList( new Pair( Bytes.toBytesBinary(x00 x00 x00 x00_login_), new byte 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);Hbase 其它快速跳轉(zhuǎn)FilterMultiRowRangeFilterFusionRowFilter類似FuzzyRowFilter,但支持rangeList ranges = new ArrayList();ranges.add(new RowKeyRange(Bytes.toBytes(131), Bytes.toByt
38、es;ranges.add(new RowKeyRange(Bytes.toBytes(132), Bytes.toBytes;Filter filter = new MultiRowRangeFilter(ranges);List ranges = new ArrayList();ranges.add(new BytesRange(0 , 2, new byte1,0, new byte1,9);ranges.add(new BytesRange(4 , 1, new byte1, new byte1);FusionRowFilter filter = new FusionRowFilter(ranges);HBase輔助索引本地索引(region級(jí)別)針對region中的數(shù)據(jù)進(jìn)行輔助索引適用場景:userId+time,查詢某用戶符合某種條件的數(shù)據(jù)/jira/browse/HBASE-8980全局索引查詢限制條件少創(chuàng)建索引表可以在插入同時(shí)創(chuàng)建索引表能夠通過MapReduce重建索引表還未發(fā)布,請耐心等待74RowKeyColumn qualifiervaluefilterValueOrignal
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 精準(zhǔn)農(nóng)業(yè)技術(shù)應(yīng)用項(xiàng)目合同
- 律師見證 委托協(xié)議
- 智能金融科技應(yīng)用開發(fā)合同
- 中心社區(qū)房屋買賣代理合同
- 電子設(shè)備租賃服務(wù)合同
- 第3單元第9課《按圖索驥-制作熱點(diǎn)鏈接》-教學(xué)設(shè)計(jì)2023-2024學(xué)年清華大學(xué)版(2012)初中信息技術(shù)八年級(jí)下冊
- Unit3 Could you please clean the room Section A (3a) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年人教版八年級(jí)英語上冊
- 第17課 第二次世界大戰(zhàn)與戰(zhàn)后國際秩序的形成 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高一統(tǒng)編版2019必修中外歷史綱要下冊
- 第六單元課外古詩詞誦讀《如夢令(常記溪亭日暮)》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語文八年級(jí)上冊
- 認(rèn)識(shí)倍數(shù) 教學(xué)設(shè)計(jì)-2024-2025學(xué)年冀教版數(shù)學(xué)四年級(jí)上冊
- 比亞迪漢DM-i說明書
- 晚熟的人(莫言諾獎(jiǎng)后首部作品)
- GA/T 2002-2022多道心理測試通用技術(shù)規(guī)程
- 《玉磨彌蒙鐵路建設(shè)項(xiàng)目標(biāo)準(zhǔn)化管理考核實(shí)施辦法》的通知滇南安質(zhì)〔XXXX〕號(hào)
- 新人教鄂教版(2017)五年級(jí)下冊科學(xué)全冊教學(xué)課件
- 《產(chǎn)業(yè)基礎(chǔ)創(chuàng)新發(fā)展目錄(2021年版)》(8.5發(fā)布)
- YY/T 0729.4-2009組織粘合劑粘接性能試驗(yàn)方法第4部分:傷口閉合強(qiáng)度
- GB/T 1040.3-2006塑料拉伸性能的測定第3部分:薄膜和薄片的試驗(yàn)條件
- GB 4706.20-2004家用和類似用途電器的安全滾筒式干衣機(jī)的特殊要求
- 血管“斑塊”的風(fēng)險(xiǎn)課件
- mks spectra介紹殘余氣體分析儀
評論
0/150
提交評論