真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

hadoopMapReduce的知識(shí)點(diǎn)有哪些

本篇內(nèi)容介紹了“hadoop MapReduce的知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開(kāi)發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、做網(wǎng)站,app軟件開(kāi)發(fā)公司以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出聶拉木免費(fèi)做網(wǎng)站回饋大家。

一 應(yīng)用程序編寫(xiě)規(guī)范
1.設(shè)置Combiner
        對(duì)于一大批MapReduce程序,如果可以設(shè)置一個(gè)Combiner,那么對(duì)于提高作業(yè)性能是十分有幫助的。Combiner可減少M(fèi)ap Task中間輸出的結(jié)果,從而減少各個(gè)Reduce Task的遠(yuǎn)程拷貝數(shù)據(jù)量,最終表現(xiàn)為Map Task和Reduce Task執(zhí)行時(shí)間縮短。

2. 選擇合理的Writable類(lèi)型
       在MapReduce模型中,Map Task和Reduce Task的輸入和輸出類(lèi)型均為Writable。Hadoop本身已經(jīng)提供了很多Writable實(shí)現(xiàn),包括IntWritable、 FloatWritable。為應(yīng)用程序處理的數(shù)據(jù)選擇合適的Writable類(lèi)型可大大提升性能。比如處理整數(shù)類(lèi)型數(shù)據(jù)時(shí),直接采用 IntWritable比先以Text類(lèi)型讀入在轉(zhuǎn)換為整數(shù)類(lèi)型要高效。如果輸出整數(shù)的大部分可用一個(gè)或兩個(gè)字節(jié)保存,那么直接采用VIntWritable或者VLongWritable,它們采用了變長(zhǎng)整型的編碼方式,可以大大減少輸出數(shù)據(jù)量。

二 作業(yè)級(jí)別參數(shù)調(diào)優(yōu)

1.規(guī)劃合理的任務(wù)數(shù)目
   在Hadoop中,每個(gè)Map Task處理一個(gè)Input Split。Input Split的劃分方式是由用戶自定義的InputFormat決定的,默認(rèn)情況下,有以下三個(gè)參數(shù)決定。
   mapred.min.split.size :Input Split的最小值 默認(rèn)值1
   mapred.max.split.szie:   Input Split的最大值
   dfs.block.size:HDFS 中一個(gè)block大小   默認(rèn)值64MB
   golsize:它是用戶期望的Input Split數(shù)目=totalSize/numSplits ,其中totalSize為文件的總大??;numSplits為用戶設(shè)定的Map Task個(gè)數(shù),默認(rèn)情況下是1.
    splitSize = max{minSize,min{goalSize,blockSize}} 如果想讓InputSize尺寸大于block尺寸,直接增大配置參數(shù)mpared.min.split.size即可。

2.增加輸入文件的副本數(shù)
      如果一個(gè)作業(yè)并行執(zhí)行的任務(wù)數(shù)目非常多,那么這些任務(wù)共同的輸入文件可能成為瓶頸。為防止多個(gè)任務(wù)并行讀取一個(gè)文件內(nèi)容造成瓶頸,用戶可根據(jù)需要增加輸入文件的副本數(shù)目。

3.啟動(dòng)推測(cè)執(zhí)行機(jī)制
     推測(cè)執(zhí)行是Hadoop對(duì)“拖后腿”的任務(wù)的一種優(yōu)化機(jī)制,當(dāng)一個(gè)作業(yè)的某些任務(wù)運(yùn)行速度明顯慢于同作業(yè)的其他任務(wù)時(shí),Hadoop會(huì)在另一個(gè)節(jié)點(diǎn) 上為“慢任務(wù)”啟動(dòng)一個(gè)備份任務(wù),這樣兩個(gè)任務(wù)同時(shí)處理一份數(shù)據(jù),而Hadoop最終會(huì)將優(yōu)先完成的那個(gè)任務(wù)的結(jié)果作為最終結(jié)果,并將另一個(gè)任務(wù)殺掉。

4.設(shè)置失敗容忍度
     Hadoop運(yùn)行設(shè)置任務(wù)級(jí)別和作業(yè)級(jí)別的失敗容忍度。作業(yè)級(jí)別的失敗容忍度是指Hadoop允許每個(gè)作業(yè)有一定比例的任務(wù)運(yùn)行失敗,這部分任務(wù)對(duì)應(yīng)的輸入數(shù)據(jù)將被忽略;
     任務(wù)級(jí)別的失敗容忍度是指Hadoop允許任務(wù)失敗后再在另外節(jié)點(diǎn)上嘗試運(yùn)行,如果一個(gè)任務(wù)經(jīng)過(guò)若干次嘗試運(yùn)行后仍然運(yùn)行失敗,那么Hadoop才會(huì)最終認(rèn)為該任務(wù)運(yùn)行失敗。
      用戶應(yīng)該根據(jù)應(yīng)用程序的特點(diǎn)設(shè)置合理的失敗容忍度,以盡快讓作業(yè)運(yùn)行完成和避免沒(méi)必要的資源浪費(fèi)。

5.適當(dāng)打開(kāi)JVM重用功能
       為了實(shí)現(xiàn)任務(wù)隔離,Hadoop將每個(gè)任務(wù)放到一個(gè)單獨(dú)的JVM中執(zhí)行,而對(duì)于執(zhí)行時(shí)間較短的任務(wù),JVM啟動(dòng)和關(guān)閉的時(shí)間將占用很大比例時(shí)間,為此,用戶可以啟用JVM重用功能,這樣一個(gè)JVM可連續(xù)啟動(dòng)多個(gè)同類(lèi)型的任務(wù)。

6.設(shè)置任務(wù)超時(shí)時(shí)間
       如果一個(gè)任務(wù)在一定的時(shí)間內(nèi)未匯報(bào)進(jìn)度,則TaskTracker會(huì)主動(dòng)將其殺死,從而在另一個(gè)節(jié)點(diǎn)上重新啟動(dòng)執(zhí)行。用戶可根據(jù)實(shí)際需要配置任務(wù)超時(shí)時(shí)間。

7.合理使用DistributedCache
       一般情況下,得到外部文件有兩種方法:一種是外部文件與應(yīng)用程序jar包一起放到客戶端,當(dāng)提交作業(yè)時(shí)由客戶端上傳到HDFS的一個(gè)目錄下,然后通過(guò) Distributed Cache分發(fā)到各個(gè)節(jié)點(diǎn)上;另一種方法是事先將外部文件直接放到HDFS上,從效率上講,第二種方法更高效。第二種方法不僅節(jié)省了客戶端上傳文件的時(shí) 間,還隱含著告訴DistributedCache:"請(qǐng)將文件下載到各個(gè)節(jié)點(diǎn)的pubic級(jí)別共享目錄中”,這樣,后續(xù)所有的作業(yè)可重用已經(jīng)下載好的文 件,不必重復(fù)下載。

8.跳過(guò)壞記錄
       Hadoop為用戶提供了跳過(guò)壞記錄的功能,當(dāng)一條或幾條壞數(shù)據(jù)記錄導(dǎo)致任務(wù)運(yùn)行失敗時(shí),Hadoop可自動(dòng)識(shí)別并跳過(guò)這些壞記錄。

9.提高作業(yè)優(yōu)先級(jí)
       所有Hadoop作業(yè)調(diào)度器進(jìn)行任務(wù)調(diào)度時(shí)均會(huì)考慮作業(yè)優(yōu)先級(jí)這一因素。作業(yè)的優(yōu)先級(jí)越高,它能夠獲取的資源(slot數(shù)目)也越多。Hadoop提供了 5種作業(yè)優(yōu)先級(jí),分別為VERY_HIGH、 HIGH、 NORMAL、 LOW、 VERY_LOW。
     注:在生產(chǎn)環(huán)境中,管理員已經(jīng)按照作業(yè)重要程度對(duì)作業(yè)進(jìn)行了分級(jí),不同重要程度的作業(yè)允許配置的優(yōu)先級(jí)不同,用戶可以擅自進(jìn)行調(diào)整。

10.合理控制Reduce Task的啟動(dòng)時(shí)機(jī)
         如果Reduce Task啟動(dòng)過(guò)早,則可能由于Reduce Task長(zhǎng)時(shí)間占用Reduce slot資源造成"slot Hoarding"現(xiàn)象,從而降低資源利用率;反之,如果Reduce Task啟動(dòng)過(guò)晚,則會(huì)導(dǎo)致Reduce Task獲取資源延遲,增加了作業(yè)的運(yùn)行時(shí)間。

三 任務(wù)級(jí)別參數(shù)調(diào)優(yōu)

     hadoop任務(wù)級(jí)別參數(shù)調(diào)優(yōu)分兩個(gè)方面: Map Task和Reduce Task。

1.Map Task調(diào)優(yōu)
       map運(yùn)行階段分為:Read、Map、Collect、Spill、Merge五個(gè)階段。
       map 任務(wù)執(zhí)行會(huì)產(chǎn)生中間數(shù)據(jù),但這些中間結(jié)果并沒(méi)有直接IO到磁盤(pán)上,而是先存儲(chǔ)在緩存(buffer)中,并在緩存中進(jìn)行一些預(yù)排序來(lái)優(yōu)化整個(gè)map的性能,存儲(chǔ)map中間數(shù)據(jù)的緩存默認(rèn)大小為100M,由io.sort.mb 參數(shù)指定。這個(gè)大小可以根據(jù)需要調(diào)整。當(dāng)map任務(wù)產(chǎn)生了非常大的中間數(shù)據(jù)時(shí)可以適當(dāng)調(diào)大該參數(shù),使緩存能容納更多的map中間數(shù)據(jù),而不至于大頻率的IO磁盤(pán),當(dāng)系統(tǒng)性能的瓶頸在磁盤(pán)IO的速度上,可以適當(dāng)?shù)恼{(diào)大此參數(shù)來(lái)減少頻繁的IO帶來(lái)的性能障礙。
        由于map任務(wù)運(yùn)行時(shí)中間結(jié)果首先存儲(chǔ)在緩存中,默認(rèn)當(dāng)緩存的使用量達(dá)到80%(或0.8)的時(shí)候就開(kāi)始寫(xiě)入磁盤(pán),這個(gè)過(guò)程叫做spill(也叫溢出),進(jìn)行spill的緩存大小可以通過(guò)io.sort.spill.percent 參數(shù)調(diào)整,這個(gè)參數(shù)可以影響spill的頻率。進(jìn)而可以影響IO的頻率。

        當(dāng)map任務(wù)計(jì)算成功完成之后,如果map任務(wù)有輸出,則會(huì)產(chǎn)生多個(gè)spill。接下來(lái)map必須將些spill進(jìn)行合并,這個(gè)過(guò)程叫做 merge, merge過(guò)程是并行處理spill的,每次并行多少個(gè)spill是由參數(shù)io.sort.factor指定的默認(rèn)為10個(gè)。但是當(dāng)spill的數(shù)量非常 大的時(shí)候,merge一次并行運(yùn)行的spill仍然為10個(gè),這樣仍然會(huì)頻繁的IO處理,因此適當(dāng)?shù)恼{(diào)大每次并行處理的spill數(shù)有利于減少merge 數(shù)因此可以影響map的性能。

        當(dāng)map輸出中間結(jié)果的時(shí)候也可以配置壓縮。

  hadoop MapReduce的知識(shí)點(diǎn)有哪些




2. Reduce Task調(diào)優(yōu)


        reduce 運(yùn)行階段分為shuflle(copy) merge sort   reduce write五個(gè)階段。

        shuffle 階段為reduce 全面拷貝map任務(wù)成功結(jié)束之后產(chǎn)生的中間結(jié)果,如果上面map任務(wù)采用了壓縮的方式,那么reduce 將map任務(wù)中間結(jié)果拷貝過(guò)來(lái)后首先進(jìn)行解壓縮,這一切是在reduce的緩存中做的,當(dāng)然也會(huì)占用一部分cpu。為了優(yōu)化reduce的執(zhí)行時(shí) 間,reduce也不是等到所有的map數(shù)據(jù)都拷貝過(guò)來(lái)的時(shí)候才開(kāi)始運(yùn)行reduce任務(wù),而是當(dāng)job執(zhí)行完第一個(gè)map任務(wù)時(shí)開(kāi)始運(yùn)行的。 reduce 在shuffle階段 實(shí)際上是從不同的并且已經(jīng)完成的map上去下載屬于自己的數(shù)據(jù),由于map任務(wù)數(shù)很多,所有這個(gè)copy過(guò)程是并行的,既同時(shí)有許多個(gè)reduce取拷貝 map,這個(gè)并行的線程是通過(guò)mapred.reduce.parallel.copies 參數(shù)指定,默認(rèn)為5個(gè),也就是說(shuō)無(wú)論map的任務(wù)數(shù)是多少個(gè),默認(rèn)情況下一次只能有5個(gè)reduce的線程去拷貝map任務(wù)的執(zhí)行結(jié)果。所以當(dāng)map任務(wù)數(shù)很多的情況下可以適當(dāng)?shù)恼{(diào)整該參數(shù),這樣可以讓reduce快速的獲得運(yùn)行數(shù)據(jù)來(lái)完成任務(wù)。

       reduce線程在下載map數(shù)據(jù)的時(shí)候也可能因?yàn)楦鞣N各樣的原因(網(wǎng)絡(luò)原因、系統(tǒng)原因等),存儲(chǔ)該map數(shù)據(jù)所在的datannode 發(fā)生了故障,這種情況下reduce任務(wù)將得不到該datanode上的數(shù)據(jù)了,同時(shí)該 download thread 會(huì)嘗試從別的datanode下載,可以通過(guò)mapred.reduce.copy.backoff (默認(rèn)為30秒)來(lái)調(diào)整下載線程的下載時(shí)間,如果網(wǎng)絡(luò)不好的集群可以通過(guò)增加該參數(shù)的值來(lái)增加下載時(shí)間,以免因?yàn)橄螺d時(shí)間過(guò)長(zhǎng)reduce將該線程判斷為 下載失敗。

reduce 下載線程在map結(jié)果下載到本地時(shí),由于是多線程并行下載,所以也需要對(duì)下載回來(lái)的數(shù)據(jù)進(jìn)行merge,所以map階段設(shè)置的io.sort.factor 也同樣會(huì)影響這個(gè)reduce的。

      同map一樣 該緩沖區(qū)大小也不是等到完全被占滿的時(shí)候才寫(xiě)入磁盤(pán)而是默認(rèn)當(dāng)完成0.66的時(shí)候就開(kāi)始寫(xiě)磁盤(pán)操作,該參數(shù)是通過(guò)mapred.job.shuffle.merge.percent 指定的。

      當(dāng)reduce 開(kāi)始進(jìn)行計(jì)算的時(shí)候通過(guò)mapred.job.reduce.input.buffer.percent 來(lái)指定需要多少的內(nèi)存百分比來(lái)作為reduce讀已經(jīng)sort好的數(shù)據(jù)的buffer百分比,該值默認(rèn)為0。Hadoop假設(shè)用戶的reduce()函數(shù) 需要所有的JVM內(nèi)存,因此執(zhí)行reduce()函數(shù)前要釋放所有內(nèi)存。如果設(shè)置了該值,可將部分文件保存在內(nèi)存中(不必寫(xiě)到磁盤(pán)上)。


   hadoop MapReduce的知識(shí)點(diǎn)有哪些



     總之,Map Task和Reduce Task調(diào)優(yōu)的一個(gè)原則就是減少數(shù)據(jù)的傳輸量、盡量使用內(nèi)存、減少磁盤(pán)IO的次數(shù)、增大任務(wù)并行數(shù),除此之外還有根據(jù)自己集群及網(wǎng)絡(luò)的實(shí)際情況來(lái)調(diào)優(yōu)。


三 管理員角度調(diào)優(yōu)

       管理員負(fù)責(zé)為用戶作業(yè)提供一個(gè)高效的運(yùn)行環(huán)境。管理員需要從全局出發(fā),通過(guò)調(diào)整一些關(guān)鍵參數(shù)提高系統(tǒng)的吞吐率和性能。總體上來(lái)看,管理員需從硬件選擇、操 作系統(tǒng)參數(shù)調(diào)優(yōu)、JVM參數(shù)調(diào)優(yōu)和Hadoop參數(shù)調(diào)優(yōu)等四個(gè)角度入手,為Hadoop用戶提供一個(gè)高效的作業(yè)運(yùn)行環(huán)境。

硬件選擇
     Hadoop自身架構(gòu)的基本特點(diǎn)決定了其硬件配置的選項(xiàng)。Hadoop采用了Master/Slave架構(gòu),其中,master維護(hù)了全局元數(shù)據(jù)信 息,重要性遠(yuǎn)遠(yuǎn)大于slave。在較低Hadoop版本中,master存在單點(diǎn)故障問(wèn)題,因此,master的配置應(yīng)遠(yuǎn)遠(yuǎn)好于各個(gè)slave。

操作系統(tǒng)參數(shù)調(diào)優(yōu)

     1.增大同時(shí)打開(kāi)的文件描述符和網(wǎng)絡(luò)連接上限
     使用ulimit命令將允許同時(shí)打開(kāi)的文件描述符數(shù)目上限增大至一個(gè)合適的值。同時(shí)調(diào)整內(nèi)核參數(shù)net.core.somaxconn網(wǎng)絡(luò)連接數(shù)目至一個(gè)足夠大的值。

    補(bǔ)充:net.core.somaxconn的作用
     net.core.somaxconn是Linux中的一個(gè)kernel參數(shù),表示socket監(jiān)聽(tīng)(listen)的backlog上限。什么是 backlog呢?backlog就是socket的監(jiān)聽(tīng)隊(duì)列,當(dāng)一個(gè)請(qǐng)求(request)尚未被處理或建立時(shí),它會(huì)進(jìn)入backlog。而 socket server可以一次性處理backlog中的所有請(qǐng)求,處理后的請(qǐng)求不再位于監(jiān)聽(tīng)隊(duì)列中。當(dāng)server處理請(qǐng)求較慢,以至于監(jiān)聽(tīng)隊(duì)列被填滿后,新來(lái)的 請(qǐng)求會(huì)被拒絕。在Hadoop 1.0中,參數(shù)ipc.server.listen.queue.size控制了服務(wù)端socket的監(jiān)聽(tīng)隊(duì)列長(zhǎng)度,即backlog長(zhǎng)度,默認(rèn)值是 128。而Linux的參數(shù)net.core.somaxconn默認(rèn)值同樣為128。當(dāng)服務(wù)端繁忙時(shí),如NameNode或 JobTracker,128是遠(yuǎn)遠(yuǎn)不夠的。這樣就需要增大backlog,例如我們的3000臺(tái)集群就將 ipc.server.listen.queue.size設(shè)成了32768,為了使得整個(gè)參數(shù)達(dá)到預(yù)期效果,同樣需要將kernel參數(shù) net.core.somaxconn設(shè)成一個(gè)大于等于32768的值。

2.關(guān)閉swap分區(qū)
     避免使用swap分區(qū),提供程序的執(zhí)行效率。
     除此之外,設(shè)置合理的預(yù)讀取緩沖區(qū)的大小、文件系統(tǒng)選擇與配置及I/O調(diào)度器選擇等

JVM參數(shù)調(diào)優(yōu)
     由于Hadoop中的每個(gè)服務(wù)和任務(wù)均會(huì)運(yùn)行在一個(gè)單獨(dú)的JVM中,因此,JVM的一些重要參數(shù)也會(huì)影響Hadoop性能。管理員可通過(guò)調(diào)整JVM FLAGS和JVM垃圾回收機(jī)制提高Hadoop性能。

Hadoop參數(shù)調(diào)優(yōu)
  1.合理規(guī)劃資源

      設(shè)置合理的槽位數(shù)目
      在Hadoop中,計(jì)算資源是用槽位表示的。slot分為兩種:Map  Slot和Reduce Slot。每種slot代表一定量的資源,且同種slot是同質(zhì)的,也就是說(shuō),同種slot代表的資源量是相同的。管理員需要根據(jù)實(shí)際需要為 TaskTracker配置一定數(shù)目的Map Slot和Reduce Slot數(shù)目,從而限制每個(gè)TaskTracker上并發(fā)執(zhí)行的Map Task和Reduce Task的數(shù)目。

      編寫(xiě)健康監(jiān)測(cè)腳本
       Hadoop允許管理員為每個(gè)TaskTracker配置一個(gè)節(jié)點(diǎn)健康狀況監(jiān)測(cè)腳本。TaskTracker中包含一個(gè)專(zhuān)門(mén)的線程周期性執(zhí)行該腳本,并將 腳本執(zhí)行結(jié)果通過(guò)心跳機(jī)制匯報(bào)給JobTracker。一旦JobTracker發(fā)現(xiàn)某個(gè)TaskTracker的當(dāng)前狀況為“不健康”,則會(huì)將其加入黑 名單,從此不再為它分配任務(wù)。

  2. 調(diào)整心跳配置
       調(diào)整心跳的間隔 因根據(jù)自己集群的規(guī)模適度的調(diào)整心跳間隔
       啟用帶外心跳   為了減少任務(wù)分配延遲,Hadoop引入了帶外心跳。帶外心跳不同于常規(guī)心跳,它是任務(wù)運(yùn)行結(jié)束或者任務(wù)運(yùn)行失敗時(shí)觸發(fā)的,能夠在出現(xiàn)空閑資源時(shí)第一時(shí)間通知JobTracker,以便它能夠迅速為空閑資源分配新的任務(wù)。

      除此之外,還包括磁盤(pán)塊配置、設(shè)置合理的RPC Handler和HTTP線程數(shù)目、慎用黑名單機(jī)制、啟用批量任務(wù)調(diào)度、選擇合適的壓縮算法、啟用預(yù)讀取機(jī)制等。
      注:當(dāng)一個(gè)集群的規(guī)模較小時(shí),如果一定數(shù)量的節(jié)點(diǎn)被頻繁的加入系統(tǒng)黑名單中,則會(huì)大大降低集群的吞吐率和計(jì)算能力。

“hadoop MapReduce的知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)站標(biāo)題:hadoopMapReduce的知識(shí)點(diǎn)有哪些
本文URL:http://weahome.cn/article/igcppd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部