版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、大數(shù)據(jù)技術(shù)原理與操作應(yīng)用最新版精品課件第5章大數(shù)據(jù)技術(shù)原理與操作應(yīng)用最新版精品課件第5章2 學(xué)習(xí)目標(biāo)了解掌握掌握熟悉了解Zookeeper概念和特性12掌握Zookeeper的Watch機制和選舉機制4掌握Zookeeper集群部署、Zookeeper的Shell操作和Java API操作3熟悉Zookeeper數(shù)據(jù)模型、Zookeeper的應(yīng)用場景4 學(xué)習(xí)目標(biāo)了解掌握掌握熟悉了解Zookeeper概念和特本章通過對Zookeeper的簡介、Zookeeper的數(shù)據(jù)模型、Zookeeper的機制、Zookeeper集群的部署、Zookeeper的操作以及Zookeeper的典型應(yīng)用場景進(jìn)行詳細(xì)
2、講解。章節(jié)概要Apache Zookeeper旨在減輕構(gòu)建健壯的分布式系統(tǒng)的服務(wù)。Zookeeper是基于分布式計算的核心概念而設(shè)計的,主要目的是給開發(fā)人員提供一套容易理解和開發(fā)的接口,從而簡化分布式系統(tǒng)構(gòu)建的服務(wù)。本章通過對Zookeeper的簡介、Zookeeper的數(shù)據(jù) 5.1 認(rèn)識ZookeeperZookeeper的簡介ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。 5.1 認(rèn)識Zo
3、okeeperZo 5.1 認(rèn)識ZookeeperZookeeper的特性Zookeeper具有全局?jǐn)?shù)據(jù)一致性、可靠性、順序性、原子性以及實時性,可以說Zookeeper的其他特性都是為滿足Zookeeper全局?jǐn)?shù)據(jù)一致性這一特性。全局?jǐn)?shù)據(jù)一致性可靠性順序性數(shù)據(jù)更新原子性實時性 5.1 認(rèn)識ZookeeperZo 5.1認(rèn)識ZookeeperZookeeper集群角色Zookeeper集群是一個主從集群,它一般是由一個Leader(領(lǐng)導(dǎo)者)和多個Follower(跟隨者)組成。此外,針對訪問量比較大的Zookeeper集群,還可新增Observer(觀察者)。Zookeeper集群中的三種角色
4、各司其職,共同完成分布式協(xié)調(diào)服務(wù)。 5.1認(rèn)識ZookeeperZook 5.1 認(rèn)識ZookeeperZookeeper集群角色Leader是Zookeeper集群工作的核心,也是事務(wù)性請求(寫操作)的唯一調(diào)度和處理者,保證集群事務(wù)處理的順序性,同時負(fù)責(zé)進(jìn)行投票的發(fā)起和決議,以及更新系統(tǒng)狀態(tài)。Follower負(fù)責(zé)處理客戶端的非事務(wù)(讀操作)請求,如果接收到客戶端發(fā)來的事務(wù)性請求,則會轉(zhuǎn)發(fā)給Leader,讓Leader進(jìn)行處理,同時還負(fù)責(zé)在Leader選舉過程中參與投票。Observer負(fù)責(zé)觀察Zookeeper集群的最新狀態(tài)的變化,并且將這些狀態(tài)進(jìn)行同步。對于非事務(wù)性請求可進(jìn)行獨立處理;對于
5、事務(wù)性請求,則會轉(zhuǎn)發(fā)給Leader服務(wù)器進(jìn)行處理。它不參與任何形式的投票,只提供非事務(wù)性的服務(wù)。LeaderFollowerObserver 5.1 認(rèn)識ZookeeperZo 5.2 數(shù)據(jù)模型數(shù)據(jù)存儲結(jié)構(gòu)Zookeeper的數(shù)據(jù)存儲結(jié)構(gòu)和標(biāo)準(zhǔn)文件系統(tǒng)非常類似,擁有一個層次命名空間,用斜杠進(jìn)行分割,都采用樹形層次結(jié)構(gòu),那Zookeeper是由什么組成樹呢? 5.2 數(shù)據(jù)模型數(shù)據(jù)存儲結(jié)構(gòu)Zoo 5.2 數(shù)據(jù)模型數(shù)據(jù)存儲結(jié)構(gòu)Zookeeper是由節(jié)點組成的樹,樹中的每個節(jié)點被稱為Znode。每個節(jié)點都可以擁有子節(jié)點。每一個Znode默認(rèn)能夠存儲1MB的數(shù)據(jù),每個Znode都可以通過其路徑唯一標(biāo)識,
6、如圖中第三層的第一個Znode,,它的路徑是/app1/p_1。Zookeeper數(shù)據(jù)模型中每個Znode都是由三部分組成,分別是stat、data、children。 5.2 數(shù)據(jù)模型數(shù)據(jù)存儲結(jié)構(gòu)Zoo 5.2 數(shù)據(jù)模型Znode的類型Znode的類型在創(chuàng)建時被指定,一旦創(chuàng)建就無法改變。Znode有兩種類型,分別是臨時節(jié)點和永久節(jié)點。該生命周期依賴于創(chuàng)建它們的會話,一旦會話結(jié)束,臨時節(jié)點將會被自動刪除,也可以手動刪除。雖然每個臨時的Znode都會綁定一個客戶端,但它們對所有的客戶端還是可見的。需要注意的是臨時節(jié)點不允許擁有子節(jié)點。臨時節(jié)點永久節(jié)點該生命周期不依賴于會話,并且只有在客戶端顯示執(zhí)
7、行刪除操作的時候,它們才能被刪除。 5.2 數(shù)據(jù)模型Znode的類型Z 5.2 數(shù)據(jù)模型Znode的屬性Zookeeper中的每個Znode都包含了一系列的屬性,具體屬性如下所示。屬性名稱相關(guān)說明czxid節(jié)點被創(chuàng)建的時間ctime節(jié)點最后一次的修改的Zxid值mzxid節(jié)點最后一次的修改時間mtime與該節(jié)點的子節(jié)點最后一次修改的Zxid值pZxid子節(jié)點被修改的版本號cversion節(jié)點被創(chuàng)建的時間屬性名稱相關(guān)說明dataVersion數(shù)據(jù)版本號aclVersionACL版本號ephemeralOwner如果此節(jié)點為臨時節(jié)點,那么該值代表這個節(jié)點擁有者的會話ID;否則值為0dataLeng
8、th節(jié)點數(shù)據(jù)域長度numChildren節(jié)點擁有的子節(jié)點個數(shù) 5.2 數(shù)據(jù)模型Znode的屬性Z 5.3 Zookeeper的Watcher機制Watch機制的簡介ZooKeeper可以為所有的讀操作設(shè)置watch。watch事件是一次性的觸發(fā)器,當(dāng)watch的對象狀態(tài)發(fā)生改變時,將會觸發(fā)此對象上watch所對應(yīng)的事件。watch事件將被異步地發(fā)送給客戶端,并且ZooKeeper為watch機制提供了有序的一致性保證。理論上,客戶端接收watch事件的時間要快于其看到watch對象狀態(tài)變化的時間。 5.3 Zookeeper的Wat 5.3 Zookeeper的Watcher機制Watch機制
9、的類型ZooKeeper所管理的watch可以分為兩類: 數(shù)據(jù)watch(data watches):getData和exists負(fù)責(zé)設(shè)置數(shù)據(jù)watch 孩子watch(child watches):getChildren負(fù)責(zé)設(shè)置孩子watch我們可以通過操作返回的數(shù)據(jù)來設(shè)置不同的watch: getData和exists:返回關(guān)于節(jié)點的數(shù)據(jù)信息 getChildren:返回孩子列表 5.3 Zookeeper的Wat 5.3 Zookeeper的Watcher機制Watch機制的監(jiān)聽工作原理一次性觸發(fā)ZooKeeper的Watcher機制主要包括客戶端線程、客戶端 WatcherManage
10、r、ZooKeeper 服務(wù)器三部分??蛻舳嗽谙騔ooKeeper服務(wù)器注冊的同時,會將 Watcher對象存儲在客戶端的 WatcherManager當(dāng)中。當(dāng)ZooKeeper服務(wù)器觸發(fā)Watcher事件后,會向客戶端發(fā)送通知,客戶端線程從WatcherManager中取出對應(yīng)的Watcher對象來執(zhí)行回調(diào)邏輯。 5.3 Zookeeper的Wat 5.4 Zookeeper的選舉機制選舉機制的簡介Zookeeper為了保證各節(jié)點的協(xié)同工作,在工作時需要一個Leader角色,而Zookeeper默認(rèn)采用FastLeaderElection算法,且投票數(shù)大于半數(shù)則勝出的機制。選舉ID數(shù)據(jù)ID邏
11、輯時鐘服務(wù)器ID設(shè)置集群myid參數(shù)時,參數(shù)分別為服務(wù)器1、服務(wù)器2、服務(wù)器3,編號越大FastLeaderElection算法中權(quán)重越大。選舉過程中,Zookeeper服務(wù)器有四種狀態(tài),分別為競選狀態(tài)、隨從狀態(tài)、觀察狀態(tài)、領(lǐng)導(dǎo)者狀態(tài)。是服務(wù)器中存放的最新數(shù)據(jù)版本號,該值越大則說明數(shù)據(jù)越新,在選舉過程中數(shù)據(jù)越新權(quán)重越大。邏輯時鐘被稱為投票次數(shù),同一輪投票過程中邏輯時鐘值相同,邏輯時鐘起始值為0,每投一次票,數(shù)據(jù)增加。與接收到其它服務(wù)器返回的投票信息中數(shù)值比較,根據(jù)不同值做出不同判斷。 5.4 Zookeeper的選舉機制 5.4 Zookeeper的選舉機制選舉機制的類型Zookeeper選舉
12、機制有兩種類型,分別為全新集群選舉和非全新集群選舉。全新集群選舉是新搭建起來的,沒有數(shù)據(jù)ID和邏輯時鐘的數(shù)據(jù)影響集群的選舉;非全新集群選舉時是優(yōu)中選優(yōu),保證Leader是Zookeeper集群中數(shù)據(jù)最完整、最可靠的一臺服務(wù)器。 5.4 Zookeeper的選舉機制 5.4 Zookeeper的選舉機制選舉機制的類型1. 全新集群選舉服務(wù)器1啟動,先給自己投票;其次,發(fā)投票信息,由于其它機器還沒有啟動所以它無法接收到投票的反饋信息,因此服務(wù)器1的狀態(tài)一直屬于競選狀態(tài)。假設(shè)有5臺編號分別是15的服務(wù)器,全新集群選舉過程如下:步驟1:步驟2:服務(wù)器2啟動,先給自己投票;其次,在集群中啟動Zookee
13、per服務(wù)的機器發(fā)起投票對比,它會與服務(wù)器1交換結(jié)果,由于服務(wù)器2編號大,服務(wù)器2勝出,服務(wù)器1會將票投給服務(wù)器2,此時服務(wù)器2的投票數(shù)并沒有大于集群半數(shù),兩個服務(wù)器狀態(tài)依舊是競選狀態(tài)。 5.4 Zookeeper的選舉機制 5.4 Zookeeper的選舉機制選舉機制的類型1. 全新集群選舉服務(wù)器5啟動,同服務(wù)器4一樣,均成為追隨者狀態(tài)。服務(wù)器3啟動,先給自己投票;其次,與之前啟動的服務(wù)器1、2交換信息,服務(wù)器3的編號最大,服務(wù)器3勝出,服務(wù)器1、2會將票投給服務(wù)器3,此時投票數(shù)正好大于半數(shù),所以服務(wù)器3成為領(lǐng)導(dǎo)者狀態(tài),服務(wù)器1、2成為追隨者狀態(tài)。步驟3:步驟4:服務(wù)器4啟動,先給自己投票;
14、其次,與之前啟動的服務(wù)器1、2、3交換信息,盡管服務(wù)器4的編號大,但是服務(wù)器3已經(jīng)勝,所以服務(wù)器4只能成為追隨者狀態(tài)。步驟5: 5.4 Zookeeper的選舉機制 5.4 Zookeeper的選舉機制選舉機制的類型2. 非全新集群選舉統(tǒng)計邏輯時鐘是否相同,邏輯時鐘小,則說明途中可能存在宕機問題,因此數(shù)據(jù)不完整,那么該選舉結(jié)果被忽略,重新投票選舉。步驟1:統(tǒng)一邏輯時鐘后,對比數(shù)據(jù)ID值,數(shù)據(jù)ID反應(yīng)數(shù)據(jù)的新舊程度,因此數(shù)據(jù)ID大的勝出。如果邏輯時鐘和數(shù)據(jù)ID都相同的情況下,那么比較服務(wù)器ID(編號),值大則勝出。步驟2:步驟3: 5.4 Zookeeper的選舉機制 5.5 Zookeeper
15、分布式集群部署Zookeeper分布式集群部署指的是ZooKeeper分布式模式安裝。Zookeeper集群搭建通常是由2n+1臺服務(wù)器組成,這是為了保證 Leader 選舉(基于Paxos算法的實現(xiàn))能夠通過半數(shù)以上臺服務(wù)器選舉支持,因此,ZooKeeper集群的數(shù)量一般為奇數(shù)臺。 5.5 Zookeeper分布式集群 5.5 Zookeeper分布式集群部署Zookeeper安裝包的下載安裝由于Zookeeper集群運行需要Java環(huán)境支持,所以要提前安裝JDK(對于jdk的下載安裝這里不作贅述)。Zookeeper安裝包的下載安裝,具體步驟如下:1下載Zookeeper安裝包。Zooke
16、eper的下載地址為:/apache/zookeeper/zookeeper-3.4.10/。上傳Zookeeper安裝包。將下載完畢的Zookeeper安裝包上傳至Linux系統(tǒng)/export/software/目錄下。23解壓安裝Zookeeper安裝包。 5.5 Zookeeper分布式集群 5.5 Zookeeper分布式集群部署Zookeeper相關(guān)配置修改Zookeeper的配置文件。先將zoo_sample.cfg配置文件重命名為zoo.cfg,然后指定dataDir目錄、配置服務(wù)器編號與主機名映射關(guān)系、設(shè)置與主機連接的心跳端口和選舉端口。步驟1:步驟2:創(chuàng)建myid文件。根據(jù)配
17、置文件zoo.cfg設(shè)置的dataDir目錄,創(chuàng)建zkdata文件夾并創(chuàng)建myid文件,該文件里面的內(nèi)容就是服務(wù)器編號。步驟3:配置環(huán)境變量。執(zhí)行命令vi /etc/profile對profile文件進(jìn)行修改,添加Zookeeper的環(huán)境變量 5.5 Zookeeper分布式集群 5.5 Zookeeper分布式集群部署Zookeeper相關(guān)配置分發(fā)Zookeeper相關(guān)文件至其他服務(wù)器。先將Zookeeper安裝目錄、myid文件以及profile文件分發(fā)至hadoop02、hadoop03服務(wù)器上,并且修改myid的文件內(nèi)容,依次對應(yīng)服務(wù)器號進(jìn)行設(shè)置,分別為2、3。步驟4:步驟5:環(huán)境變量
18、生效。分別在hadoop01、hadoop02、hadoop03服務(wù)器上刷新profile配置文件,使環(huán)境變量生效。 5.5 Zookeeper分布式集群 5.5 Zookeeper分布式集群部署Zookeeper服務(wù)的啟動和關(guān)閉1. 啟動Zookeeper服務(wù)在hadoop01、hadoop02、hadoop03服務(wù)器上依次啟動Zookeeper服務(wù)。執(zhí)行命令“zkServer.sh status”查看該節(jié)點Zookpeer的角色。步驟1:步驟2: 5.5 Zookeeper分布式集群 5.5 Zookeeper分布式集群部署Zookeeper服務(wù)的啟動和關(guān)閉2. 關(guān)閉Zookeeper服務(wù)
19、在hadoop01、hadoop02、hadoop03服務(wù)器上執(zhí)行zkServer.sh stop關(guān)閉Zookeeper服務(wù)。執(zhí)行命令“zkServer.sh status”查看該節(jié)點Zookpeer的角色。步驟1:步驟2: 5.5 Zookeeper分布式集群 5.6 Zookeeper的Shell操作Zookeeper Shell介紹常用命令命令描述ls /使用ls命令來查看Zookeeper中所包含的內(nèi)容ls2 /查看當(dāng)前節(jié)點數(shù)據(jù)并能看到更新次數(shù)等數(shù)據(jù)create /zk “test”在當(dāng)前目錄創(chuàng)建一個新的Znode節(jié)點“zk”以及與它關(guān)聯(lián)的字符串get /zk獲取zk所包含的信息set
20、 /zk “zkbak”對zk所關(guān)聯(lián)的字符串進(jìn)行設(shè)置delete /zk將節(jié)點Znode刪除rmr將節(jié)點Znode遞歸刪除help幫助命令Zookeeper命令行工具類似于Linux的Shell環(huán)境,能夠簡單地實現(xiàn)對Zookeeper進(jìn)行訪問、數(shù)據(jù)創(chuàng)建、數(shù)據(jù)修改等的一系列操作。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper啟動Zookeeper,并連接Zookeeper服務(wù),系統(tǒng)會輸出Zookeeper集群的相關(guān)配置信息,并在屏幕輸出“welcome to Zookeeper!”等信息。 5.6 Zookeeper的S
21、hel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper1. 顯示所有操作命令在客戶端輸入help,屏幕會輸出所有可用的Shell命令。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper2. 查看當(dāng)前Zookeeper中所包含的內(nèi)容在客戶端輸入ls /,屏幕會輸出Zookeeper中所包含的內(nèi)容。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper3. 查看當(dāng)前節(jié)點數(shù)據(jù)在客戶端輸入ls2 /,屏幕會輸出當(dāng)前節(jié)點數(shù)據(jù)并且能
22、看到更新次數(shù)等數(shù)據(jù)。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper4. 創(chuàng)建節(jié)點在命令行輸入創(chuàng)建節(jié)點的命令,來創(chuàng)建一個臨時節(jié)點。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper5. 獲取節(jié)點在命令行輸入獲取節(jié)點的命令,來獲取Zookeeper指定節(jié)點的數(shù)據(jù)內(nèi)容以及屬性信息。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper6. 修改節(jié)點在命令行輸入修改節(jié)點的命令,對前面創(chuàng)建的
23、臨時節(jié)點testnode-temp進(jìn)行修改,使得節(jié)點內(nèi)容變成“123”的操作。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper7. 監(jiān)聽節(jié)點監(jiān)聽節(jié)點就是監(jiān)聽節(jié)點變化,概括為三個過程??蛻舳讼蚍?wù)端注冊Watch、服務(wù)端事件發(fā)生觸發(fā)Watch、客戶端回調(diào)Watch得到觸發(fā)事件的情況。 5.6 Zookeeper的Shel 5.6 Zookeeper的Shell操作通過Shell命令操作Zookeeper8. 刪除節(jié)點使用delete命令刪除節(jié)點時,若要刪除的節(jié)點存在子節(jié)點,就無法刪除該節(jié)點,必須先刪除子節(jié)點,才可刪除父節(jié)點
24、。使用rmr命令遞歸刪除節(jié)點,不論該節(jié)點下是否存在子節(jié)點,可以直接刪除。 5.6 Zookeeper的Shel 5.7 Zookeeper的Java API操作Zookeeper Java API介紹Zookeeper API包含五個包:org.apache.zookeeperorg.apache.zookeeper.dataorg.apache.zookeeper.serverorg.apache.zookeeper.server.quorumorg.apache.zookeeper.server.upgrade 5.7 Zookeeper的Java 5.7 Zookeeper的Java API操作Zookeeper Java API介紹org.apache.zookeeper包含Zookeeper類,這也是編程時最常用的類文件,Zookeeper類提供的常用Java API方法。方法名稱方法描述create創(chuàng)建節(jié)點delete刪除節(jié)點exists判斷節(jié)點是否存在get/setData獲取/修改節(jié)點數(shù)據(jù)getChildren獲取指定節(jié)點下的所有子節(jié)點列表 5.7 Zookeeper的Java 5.7 Zookeeper的Java API操作通過Java API操作Zookeeper啟動Zookeeper服務(wù)并連接Zookeeper服務(wù)。步驟1:添加依賴。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)蒙古自治區(qū)錫林郭勒盟三縣聯(lián)考2024-2025學(xué)年八年級上學(xué)期1月期末物理試題(無答案)
- 保安員競賽理論知識考試試題題庫及答案
- 2025年度廠房租賃合同書(含環(huán)保驗收條款)3篇
- 【產(chǎn)業(yè)圖譜】2024年江陰市重點產(chǎn)業(yè)規(guī)劃布局全景圖譜(附產(chǎn)業(yè)現(xiàn)狀、產(chǎn)業(yè)布局、產(chǎn)業(yè)發(fā)展規(guī)劃等)
- 2024小班幼兒的評語(33篇)
- 2024版期貨融資居間合同協(xié)議范本
- 2024鐵精粉倉儲物流服務(wù)合同樣本3篇
- 福建省南平市九三英華高級中學(xué)高一化學(xué)模擬試卷含解析
- 2025年度存量房租賃市場調(diào)控合作協(xié)議3篇
- 2024版安全生產(chǎn)與環(huán)境保護(hù)綜合管理協(xié)議
- 2024年道路清障拖車服務(wù)合同協(xié)議3篇
- 2025年1月八省聯(lián)考河南新高考物理試卷真題(含答案詳解)
- 建設(shè)工程檢試驗工作管理實施指引
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 食品企業(yè)產(chǎn)品出廠檢驗報告
- 鍋爐本體水壓試驗記錄
- 綜治工作中心信訪穩(wěn)定和矛盾糾紛排查化解工作流程圖
- 牛初乳知識課件
- 鼻出血鼻孔填塞-臨床實踐能力訓(xùn)練考核標(biāo)準(zhǔn)
- 初中中考英語總復(fù)習(xí)《代詞動詞連詞數(shù)詞》思維導(dǎo)圖
- 煤氣化工藝路線的比較
評論
0/150
提交評論