年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料_第1頁
年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料_第2頁
年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料_第3頁
年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料_第4頁
年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)

工業(yè)物聯(lián)網(wǎng)白皮書(2021)年工業(yè)物聯(lián)網(wǎng)白皮書(完整版)資料(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)目前,物聯(lián)網(wǎng)進入與傳統(tǒng)產(chǎn)業(yè)深度融合發(fā)展的嶄新階段,工業(yè)制造領(lǐng)域的轉(zhuǎn)型升級成為工業(yè)物聯(lián)網(wǎng)發(fā)展的重要驅(qū)動力,世界各國紛紛發(fā)布相關(guān)的戰(zhàn)略舉措,搶占新一輪發(fā)展戰(zhàn)略機遇。值此工業(yè)物聯(lián)網(wǎng)的關(guān)鍵發(fā)展時期,《工業(yè)物聯(lián)網(wǎng)白皮書(2021)》重點圍繞工業(yè)物聯(lián)網(wǎng)的發(fā)展背景、內(nèi)涵本質(zhì)、技術(shù)現(xiàn)狀、標準現(xiàn)狀以及產(chǎn)業(yè)應(yīng)用等方面展開論述。

《工業(yè)物聯(lián)網(wǎng)白皮書(2021)》對工業(yè)物聯(lián)網(wǎng)的定位是:工業(yè)物聯(lián)網(wǎng)是支撐智能制造的一套使能技術(shù)體系。依據(jù)物聯(lián)網(wǎng)的相關(guān)定義及在工業(yè)制造領(lǐng)域中應(yīng)用現(xiàn)狀的深入研究,本白皮書嘗試地給出工業(yè)物聯(lián)網(wǎng)的定義:工業(yè)物聯(lián)網(wǎng)是通過工業(yè)資源的網(wǎng)絡(luò)互連、數(shù)據(jù)互通和系統(tǒng)互操作,實現(xiàn)制造原料的靈活配置、制造過程的按需執(zhí)行、制造工藝的合理優(yōu)化和制造環(huán)境的快速適應(yīng),達到資源的高效利用,從而構(gòu)建服務(wù)驅(qū)動型的新工業(yè)生態(tài)體系。工業(yè)物聯(lián)網(wǎng)表現(xiàn)出六大典型特征:智能感知、泛在連通、精準控制、數(shù)字建模、實時分析和迭代優(yōu)化。

《工業(yè)物聯(lián)網(wǎng)白皮書(2021)》目錄

一、工業(yè)物聯(lián)網(wǎng)的發(fā)展背景

(一)工業(yè)物聯(lián)網(wǎng)的發(fā)展現(xiàn)狀

(二)工業(yè)物聯(lián)網(wǎng)的發(fā)展需求

工業(yè)物聯(lián)網(wǎng)的發(fā)展意義

二、工業(yè)物聯(lián)網(wǎng)的內(nèi)涵

(一)工業(yè)物聯(lián)網(wǎng)的本質(zhì)

(二)工業(yè)物聯(lián)網(wǎng)的階段

(三)工業(yè)物聯(lián)網(wǎng)的價值

三、工業(yè)物聯(lián)網(wǎng)的技術(shù)現(xiàn)狀

(一)工業(yè)物聯(lián)網(wǎng)的參考體系架構(gòu)

(二)工業(yè)物聯(lián)網(wǎng)的技術(shù)體系

(三)工業(yè)物聯(lián)網(wǎng)的技術(shù)趨勢

四、工業(yè)物聯(lián)網(wǎng)的產(chǎn)業(yè)現(xiàn)狀

(一)工業(yè)物聯(lián)網(wǎng)的終端產(chǎn)業(yè)現(xiàn)狀

(二)工業(yè)物聯(lián)網(wǎng)的平臺產(chǎn)業(yè)現(xiàn)狀

五、工業(yè)物聯(lián)網(wǎng)的標準現(xiàn)狀

(一)國內(nèi)外已開展的物聯(lián)網(wǎng)標準化工作

(二)國內(nèi)外已開展的工業(yè)物聯(lián)網(wǎng)標準化工作

(三)有待解決的工業(yè)物聯(lián)網(wǎng)標準化問題

六、工業(yè)物聯(lián)網(wǎng)的應(yīng)用

(一)服務(wù)模式創(chuàng)新:基于機床物聯(lián)網(wǎng)的租賃應(yīng)用

(二)金融領(lǐng)域創(chuàng)新:基于工業(yè)物聯(lián)網(wǎng)的新保險模式

(三)生產(chǎn)工藝優(yōu)化:實現(xiàn)對軋輥磨削的全程自動控制

(四)智能物流應(yīng)用:基于工業(yè)物聯(lián)網(wǎng)的物流自動化

《物聯(lián)網(wǎng)數(shù)據(jù)處理》實驗指導(dǎo)書實驗一:熟悉常用的Linux操作(2學(xué)時)一、實驗?zāi)康呐c要求1、熟悉安裝和配置Linux。2、熟悉常用的Linux操作。6、總結(jié)在調(diào)試過程中的錯誤。二、實驗類型驗證型三、實驗原理及說明通過實際操作,使學(xué)生對Linux的使用有一個更深刻的理解;熟悉Linux的開發(fā)環(huán)境及程序結(jié)構(gòu)。四、實驗儀器安裝操作系統(tǒng):Linux五、實驗內(nèi)容和步驟熟悉常用的Linux操作請按要求上機實踐如下linux基本命令。cd命令:切換目錄(1)切換到目錄/usr/local(2)去到目前的上層目錄(3)回到自己的主文件夾ls命令:查看文件與目錄(4)查看目錄/usr下所有的文件mkdir命令:新建新目錄(5)進入/tmp目錄,創(chuàng)建一個名為a的目錄,并查看有多少目錄存在(6)創(chuàng)建目錄a1/a2/a3/a4rmdir命令:刪除空的目錄(7)將上例創(chuàng)建的目錄a(/tmp下面)刪除(8)刪除目錄a1/a2/a3/a4,查看有多少目錄存在cp命令:復(fù)制文件或目錄(9)將主文件夾下的.bashrc復(fù)制到/usr下,命名為bashrc1(10)在/tmp下新建目錄test,再復(fù)制這個目錄內(nèi)容到/usrmv命令:移動文件與目錄,或更名(11)將上例文件bashrc1移動到目錄/usr/test(12)將上例test目錄重命名為test2rm命令:移除文件或目錄(13)將上例復(fù)制的bashrc1文件刪除(14)rm-rf將上例的test2目錄刪除cat命令:查看文件內(nèi)容(15)查看主文件夾下的.bashrc文件內(nèi)容tac命令:反向列示(16)反向查看主文件夾下.bashrc文件內(nèi)容more命令:一頁一頁翻動查看(17)翻頁查看主文件夾下.bashrc文件內(nèi)容head命令:取出前面幾行(18)查看主文件夾下.bashrc文件內(nèi)容前20行(19)查看主文件夾下.bashrc文件內(nèi)容,后面50行不顯示,只顯示前面幾行tail命令:取出后面幾行(20)查看主文件夾下.bashrc文件內(nèi)容最后20行(21)查看主文件夾下.bashrc文件內(nèi)容,只列出50行以后的數(shù)據(jù)touch命令:修改文件時間或創(chuàng)建新文件(22)在/tmp下創(chuàng)建一個空文件hello并查看時間(23)修改hello文件,將日期調(diào)整為5天前chown命令:修改文件所有者權(quán)限(24)將hello文件所有者改為root帳號,并查看屬性find命令:文件查找(25)找出主文件夾下文件名為.bashrc的文件tar命令:壓縮命令(27)解壓縮到/tmp目錄grep命令:查找字符串(28)從~/.bashrc文件中查找字符串'examples'(29)配置Java環(huán)境變量,在~/.bashrc中設(shè)置(30)查看JAVA_HOME變量的值六、注意事項命令的名稱。七、預(yù)習與思考題1、Linux操作系統(tǒng)的安裝和使用2、常用的命令

實驗二:安裝Hadoop開發(fā)環(huán)境(2學(xué)時)一、實驗?zāi)康呐c要求1.掌握Linux虛擬機安裝方法或者雙操作系統(tǒng)安裝方法。Hadoop在Linux操作系統(tǒng)上運行可以發(fā)揮最佳性能,鑒于目前很多讀者可能正在使用Windows操作系統(tǒng),因此,為了完成本書的后續(xù)實驗,這里有必要通過本實驗讓讀者掌握在Windows操作系統(tǒng)上搭建Linux虛擬機的方法,以及安裝雙操作系統(tǒng)的方法(同時安裝Windows和Linux系統(tǒng),電腦開機時,可以選擇登錄哪個系統(tǒng))。2.掌握Hadoop的偽分布式安裝方法。很多讀者并不具備集群環(huán)境,需要在一臺機器上模擬一個小的集群,因此,需要通過本實驗讓讀者掌握在單機上進行Hadoop的偽分布式安裝方法。二、實驗類型綜合型三、實驗原理及說明通過實際操作,使學(xué)生對Hadoop的使用有一個更深刻的理解;熟悉Hadoop的開發(fā)環(huán)境及程序結(jié)構(gòu)。四、實驗儀器操作系統(tǒng):Windows系統(tǒng)或者Ubuntu(推薦)。虛擬機軟件:推薦使用的開源虛擬機軟件為VirtualBox。VirtualBox是一款功能強大的免費虛擬機軟件,它不僅具有豐富的特色,而且性能也很優(yōu)異,簡單易用,可虛擬的系統(tǒng)包括Windows、MacOSX、Linux、OpenBSD、Solaris、IBMOS2甚至Android4.0系統(tǒng)等操作系統(tǒng)。讀者可以在Windows系統(tǒng)上安裝VirtualBox軟件,然后在VirtualBox上安裝并且運行Linux操作系統(tǒng)。本次實驗?zāi)J的Linux發(fā)行版為Ubuntu14.04。五、實驗內(nèi)容和步驟共享文件夾設(shè)置virtualbox中ubuntu和windows共享文件夾設(shè)置先關(guān)閉ubuntu,在virtualbox“設(shè)置”中找到“共享文件夾”,點擊進入,點擊右邊添加目錄按鈕,添加windows中要共享的目錄,取一個名。比如我在D盤建一個名為share的文件夾,如下圖:重啟ubuntu,在ubuntu系統(tǒng)最上端“設(shè)備”中找到“共享文件夾”,點擊進入,點擊右邊添加目錄按鈕,添加第二步操作的共享目錄,如進入虛擬Ubuntu,在命令行終端下輸入:sudomkdir/mnt/sharedsudomount-tvboxsfshare/mnt/shared其中"share"是之前創(chuàng)建的共享文件夾的名字。OK,現(xiàn)在Ubuntu和主機可以互傳文件了。要想自動掛載的話,可以在/etc/fstab中添加一項share/mnt/sharedvboxsfrw,gid=100,uid=1000,auto00Java安裝第一步獲取安裝包。到oracle官方去下載jdk安裝包,選擇版本時注意選擇自己的系統(tǒng)的版本。第二步:解壓安裝cd/usr/lib/jvm第三步:修改環(huán)境變量vi~/.bashrc添加:exportJAVA_HOME=/usr/lib/jvm/java-7-sunexportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexportPATH=${JAVA_HOME}/bin:$PATH保存退出,輸入以下命令使之立即生效。source~/.bashrc第四步:配置默認JDK版本由于ubuntu中可能會有默認的JDK,如openjdk,所以,為了將我們安裝的JDK設(shè)置為默認JDK版本,還要進行如下工作。執(zhí)行代碼:sudoupdate-alternatives--install/usr/bin/javajava/usr/lib/jvm/java-7-sun/bin/java300sudoupdate-alternatives--install/usr/bin/javacjavac/usr/lib/jvm/java-7-sun/bin/javac300sudoupdate-alternatives--install/usr/bin/jarjar/usr/lib/jvm/java-7-sun/bin/jar300sudoupdate-alternatives--install/usr/bin/javahjavah/usr/lib/jvm/java-7-sun/bin/javah300sudoupdate-alternatives--install/usr/bin/javapjavap/usr/lib/jvm/java-7-sun/bin/javap300執(zhí)行代碼:sudoupdate-alternatives--configjava系統(tǒng)會列出各種JDK版本,如下所示:baidu@baidu:~$sudoupdate-alternatives--configjava有3個候選項可用于替換java(提供/usr/bin/java)。選擇路徑優(yōu)先級狀態(tài)*0/usr/lib/jvm/java-6-openjdk/jre/bin/java1061自動模式1/usr/lib/jvm/java-6-openjdk/jre/bin/java1061手動模式2/usr/lib/jvm/java-6-sun/jre/bin/java63手動模式3/usr/lib/jvm/java-7-sun/bin/java300手動模式要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:3update-alternatives:使用/usr/lib/jvm/java-7-sun/bin/java來提供/usr/bin/java(java),于手動模式中。第五步:測試baidu@baidu:~$java-versionJavaHotSpot(TM)ServerVM(build21.0-b17,mixedmode)Hadoop安裝1、創(chuàng)建hadoop用戶安裝Ubuntu的時候不是用的“hadoop”用戶,那么需要增加一個名為hadoop的用戶。首先按ctrl+alt+t打開終端窗口,輸入如下命令創(chuàng)建新用戶:sudouseradd-mhadoop-s/bin/bash接著使用如下命令設(shè)置密碼,可簡單設(shè)置為hadoop,按提示輸入兩次密碼:sudopasswdhadoop可為hadoop用戶增加管理員權(quán)限,方便部署,避免一些對新手來說比較棘手的權(quán)限問題:sudoadduserhadoopsudo最后注銷當前用戶(點擊屏幕右上角的齒輪,選擇注銷),返回登陸界面。在登陸界面中選擇剛創(chuàng)建的hadoop用戶進行登陸。2.安裝SSH、配置SSH無密碼登陸集群、單節(jié)點模式都需要用到SSH登陸(類似于遠程登陸,你可以登錄某臺Linux主機,并且在上面運行命令),Ubuntu默認已安裝了SSHclient,此外還需要安裝SSHserver:安裝后,可以使用如下命令登陸本機:sshlocalhost利用ssh-keygen生成密鑰,并將密鑰加入到授權(quán)中:$exit#退出剛才的sshlocalhost$cd~/.ssh/#若沒有該目錄,請先執(zhí)行一次sshlocalhost$ssh-keygen-trsa#會有提示,都按回車就可以$cat./id_rsa.pub>>./authorized_keys#加入授權(quán)$cd/usr/local/$sudochown-Rhadoop./hadoop#修改文件權(quán)限$cd/usr/local/hadoop$./bin/hadoopversion六、注意事項七、預(yù)習與思考題1、在Linux環(huán)境下完成偽分布式環(huán)境的搭建,并運行Hadoop自帶的WordCount實例檢測是否運行正常。

實驗三:熟悉Hadoop平臺(2學(xué)時)一、實驗?zāi)康呐c要求1、理解Hadoop平臺運行原理。2、熟悉Hadoop的操作二、實驗類型設(shè)計型三、實驗原理及說明通過實際操作,使學(xué)生對Hadoop的使用有一個更深刻的理解;熟悉Hadoop的開發(fā)環(huán)境及程序結(jié)構(gòu)。四、實驗儀器安裝Ubuntu系統(tǒng)的計算機若干臺五、實驗內(nèi)容和步驟1.Hadoop單機配置(非分布式)Hadoop默認模式為非分布式模式(本地模式),無需進行其他配置即可運行。非分布式即單Java進程,方便進行調(diào)試。Hadoop附帶了豐富的例子(運行.可以看到所有例子),包括wordcount、terasort、join、grep等。在此我們選擇運行g(shù)rep例子,我們將input文件夾中的所有文件作為輸入,篩選當中符合正則表達式dfs[a-z.]+的單詞并統(tǒng)計出現(xiàn)的次數(shù),最后輸出結(jié)果到output文件夾中。執(zhí)行成功后如下所示,輸出了作業(yè)的相關(guān)信息,輸出的結(jié)果是符合正則的單詞dfsadmin出現(xiàn)了1次注意,Hadoop默認不會覆蓋結(jié)果文件,因此再次運行上面實例會提示出錯,需要先將./output刪除。2.Hadoop偽分布式配置Hadoop可以在單節(jié)點上以偽分布式的方式運行,Hadoop進程以分離的Java進程來運行,節(jié)點既作為NameNode也作為DataNode,同時,讀取的是HDFS中的文件。Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,偽分布式需要修改2個配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每個配置以聲明property的name和value的方式來實現(xiàn)。修改配置文件core-site.xml(通過gedit編輯會比較方便:gedit./etc/hadoop/core-site.xml),將當中的修改為下面配置:同樣的,修改配置文件hdfs-site.xml:Hadoop配置文件說明Hadoop的運行方式是由配置文件決定的(運行Hadoop時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要刪除core-site.xml中的配置項。配置完成后,執(zhí)行NameNode的格式化:成功的話,會看到“successfullyformatted”和“Exittingwithstatus0”的提示,若為“Exittingwithstatus1”則是出錯。如果在這一步時提示Error:JAVA_HOMEisnotsetandcouldnotbefound.的錯誤,則說明之前設(shè)置JAVA_HOME環(huán)境變量那邊就沒設(shè)置好,請先設(shè)置好JAVA_HOME變量,否則后面的過程都是進行不下去的。接著開啟NameNode和DataNode守護進程。若出現(xiàn)如下SSH提示,輸入yes即可。啟動時可能會出現(xiàn)如下WARN提示:WARNutil.NativeCodeLoader:Unabletoloadnative-hadooplibraryforyourplatform…usingbuiltin-javaclasseswhereapplicableWARN提示可以忽略,并不會影響正常使用。啟動Hadoop時提示Couldnotresolvehostname如果啟動Hadoop時遇到輸出非常多“ssh:Couldnotresolvehostnamexxx”的異常情況,如下圖所示:這個并不是ssh的問題,可通過設(shè)置Hadoop環(huán)境變量來解決。首先按鍵盤的ctrl+c中斷啟動,然后在~/.bashrc中,增加如下兩行內(nèi)容(設(shè)置過程與JAVA_HOME變量一樣,其中HADOOP_HOME為Hadoop的安裝目錄):保存后,務(wù)必執(zhí)行source~/.bashrc使變量設(shè)置生效,然后再次執(zhí)行./sbin/start-dfs.sh啟動Hadoop。啟動完成后,可以通過命令jps來判斷是否成功啟動,若成功啟動則會列出如下進程:“NameNode”、”DataNode”和“SecondaryNameNode”(如果SecondaryNameNode沒有啟動,請運行sbin/stop-dfs.sh關(guān)閉進程,然后再次嘗試啟動嘗試)。如果沒有NameNode或DataNode,那就是配置不成功,請仔細檢查之前步驟,或通過查看啟動日志排查原因。成功啟動后,可以訪問Web界面://localhost:50070查看NameNode和Datanode信息,還可以在線查看HDFS中的文件。六、注意事項熟悉Hadoop的配置文件。七、預(yù)習與思考題單機版與偽分布式的配置。

實驗四:Hadoop初級實踐(2學(xué)時)一、實驗?zāi)康呐c要求1、理解Hadoop平臺運行原理。2、熟悉wordcount程序。二、實驗類型設(shè)計型三、實驗原理及說明通過實際操作,使學(xué)生對Hadoop的使用有一個更深刻的理解;熟悉Hadoop的開發(fā)環(huán)境及程序結(jié)構(gòu)。四、實驗儀器安裝Ubuntu系統(tǒng)的計算機若干臺五、實驗內(nèi)容和步驟單詞計數(shù)是最簡單也是最能體現(xiàn)MapReduce思想的程序之一,可以稱為MapReduce版"HelloWorld",該程序的完整代碼可以在Hadoop安裝包的"src/examples"目錄下找到。單詞計數(shù)主要完成功能是:統(tǒng)計一系列文本文件中每個單詞出現(xiàn)的次數(shù),如下圖所示。以"hadoop"用戶登錄Hadoop服務(wù)器。1.創(chuàng)建本地的示例數(shù)據(jù)文件:并在這個目錄下創(chuàng)建2個文件分別命名為【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。分別在這2個文件中輸入下列示例語句:2.在HDFS上創(chuàng)建輸入文件夾調(diào)出終端,輸入下面指令:$cd/usr/local/hadoop$./bin/hadoopfs-mkdirhdfsInput執(zhí)行這個命令時可能會提示類似安全的問題,如果提示了,請使用$./bin/hadoopdfsadmin-safemodeleave來退出安全模式。當分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中的內(nèi)容不允許修改也不允許刪除,直到安全模式結(jié)束。安全模式主要是為了系統(tǒng)啟動的時候檢查各個DataNode上數(shù)據(jù)塊的有效性,同時根據(jù)策略必要的復(fù)制或者刪除部分數(shù)據(jù)塊。運行期通過命令也可以進入安全模式。3.上傳本地file中文件到集群的hdfsInput目錄下在終端依次輸入下面指令:$./bin/hadoopfs-putfile/myTest*.txthdfsInput4.運行例子:在終端輸入下面指令:$./bin/hadoop$./bin/hadoopjarhadoop-examples-*.jarwordcounthdfsInputhdfsOutput應(yīng)該出現(xiàn)下面結(jié)果:Hadoop命令會啟動一個JVM來運行這個MapReduce程序,并自動獲得Hadoop的配置,同時把類的路徑(及其依賴關(guān)系)加入到Hadoop的庫中。以上就是HadoopJob的運行記錄,從這里可以看到,這個Job被賦予了一個ID號:job_2_0002,而且得知輸入文件有兩個(Totalinputpathstoprocess:2),同時還可以了解map的輸入輸出記錄(record數(shù)及字節(jié)數(shù)),以及reduce輸入輸出記錄。查看HDFS上hdfsOutput目錄內(nèi)容:在終端輸入下面指令:bin/hadoopfs-lshdfsOutput從上圖中知道生成了三個文件,我們的結(jié)果在"part-r-00000"中。使用下面指令查看結(jié)果輸出文件內(nèi)容bin/hadoopfs-catoutput/part-r-00000輸出目錄日志以及輸入目錄中的文件是永久存在的,如果不刪除的話,如果出現(xiàn)結(jié)果不一致,請參考這個因素。六、注意事項熟悉Hadoop常用的命令。七、預(yù)習與思考題Hadoop的執(zhí)行過程。

實驗五:熟悉常用的HDFS操作(2學(xué)時)一、實驗?zāi)康呐c要求1、理解Hadoop平臺運行原理。2、熟悉HDFS系統(tǒng)二、實驗類型設(shè)計型三、實驗原理及說明通過實際操作,使學(xué)生對Hadoop的使用有一個更深刻的理解;熟悉Hadoop的開發(fā)環(huán)境及程序結(jié)構(gòu)。四、實驗儀器安裝Ubuntu系統(tǒng)的計算機若干臺五、實驗內(nèi)容和步驟1.編寫簡單shell腳步使用gedit等任意文本編輯工具,都可以編寫shell腳本。使用“gedittest.sh”在當前目錄下,創(chuàng)建一個測試shell腳本。shell腳本的后綴習慣性寫成“.sh”。2shell腳本的開始需要聲明此腳本使用什么程序解析執(zhí)行,首行為“#!/bin/sh

”,標明使用bash解析器解析當前shell腳本。3完成所有語言都有的入門級顯示效果,使用shell腳本打印helloworld,第二行為“echo‘HelloWorld!’”。4由于新建的shell腳本沒有執(zhí)行權(quán)限,首先使用“chmod755test.sh”對shell腳本添加執(zhí)行權(quán)限。5使用“./test.sh”命令執(zhí)行新建的shell腳本。6看看自己編寫第一個shell腳本執(zhí)行的結(jié)果吧。利用Hadoop提供的Shell命令完成相同任務(wù):向HDFS中上傳任意文本文件,如果指定的文件在HDFS中已經(jīng)存在,由用戶指定是追加到原有文件末尾還是覆蓋原有的文件;先到Hadoop主文件夾cd/usr/local/hadoop啟動Hadoop服務(wù)sbin/start-dfs.shsbin/start-yarn.sh創(chuàng)建兩個任意文本文件用于實驗echo"helloworld">local.txtecho"hellohadoop">text.txt檢查文件是否存在hadoopfs-test-etext.txtecho$?上傳本地文件到HDFS系統(tǒng)(上傳之后再執(zhí)行一遍上一步,如果是第一次做HDFS操作第一次做這一步會出錯,可以直接做一次hadoopfs-appendToFilelocal.txttext.txt就能解決)hadoopfs-puttext.txt追加到文件末尾的指令hadoopfs-appendToFilelocal.txttext.txt查看HDFS文件的內(nèi)容hadoopfs-cattext.txt覆蓋原有文件的指令(覆蓋之后再執(zhí)行一遍上一步)hadoopfs-copyFromLocal-flocal.txttext.txt以上步驟也可以用如下Shell腳步實現(xiàn)if$(hadoopfs-test-etext.txt);then$(hadoopfs-appendToFilelocal.txttext.txt);else$(hadoopfs-copyFromLocal-flocal.txttext.txt);fi從HDFS中下載指定文件,如果本地文件與要下載的文件名稱相同,則自動對下載的文件重命名;Shell命令實現(xiàn):if$(hadoopfs-test-e/usr/local/hadoop/text.txt);then$(hadoopfs-copyToLocaltext.txt./text.txt);else$(hadoopfs-copyToLocaltext.txt./text2.txt);fi將HDFS中指定文件的內(nèi)容輸出到終端中;hadoopfs-cattext.txt顯示HDFS中指定的文件的讀寫權(quán)限、大小、創(chuàng)建時間、路徑等信息;hadoopfs-ls-htext.txt給定HDFS中某一個目錄,輸出該目錄下的所有文件的讀寫權(quán)限、大小、創(chuàng)建時間、路徑等信息,如果該文件是目錄,則遞歸輸出該目錄下所有文件相關(guān)信息;hadoopfs-ls-R-h/user/tiny提供一個HDFS內(nèi)的文件的路徑,對該文件進行創(chuàng)建和刪除操作。如果文件所在目錄不存在,則自動創(chuàng)建目錄;Shell命令實現(xiàn):if$(hadoopfs-test-ddir1/dir2);then$(hadoopfs-touchzdir1/dir2/filename);else$(hadoopfs-mkdir-pdir1/dir2&&hdfsdfs-touchzdir1/dir2/filename);fi刪除操作hadoopfs-rmdir1/dir2/filename提供一個HDFS的目錄的路徑,對該目錄進行創(chuàng)建和刪除操作。創(chuàng)建目錄時,如果目錄文件所在目錄不存在則自動創(chuàng)建相應(yīng)目錄;刪除目錄時,由用戶指定當該目錄不為空時是否還刪除該目錄;創(chuàng)建目錄

hadoopfs-mkdir-pdir1/dir2刪除目錄(如果目錄非空則會提示notempty,不執(zhí)行刪除)

hadoopfs-rmdirdir1/dir2強制刪除目錄

hadoopfs-rm-rdir1/dir2向HDFS中指定的文件追加內(nèi)容,由用戶指定內(nèi)容追加到原有文件的開頭或結(jié)尾;追加到文件末尾hadoopfs-appendToFilelocal.txttext.txt追加到文件開頭hadoopfs-gettext.txtcattext.txt>>local.txthadoopfs-copyFromLocal-ftext.txttext.txt刪除HDFS中指定的文件;hadoopfs-rmtext.txt刪除HDFS中指定的目錄,由用戶指定目錄中如果存在文件時是否刪除目錄;刪除目錄(如果目錄非空則會提示notempty,不執(zhí)行刪除)

hadoopfs-rmdirdir1/dir2強制刪除目錄

hadoopfs-rm-Rdir1/dir2在HDFS中,將文件從源路徑移動到目的路徑。hadoopfs-mvtext.txtinput編程實現(xiàn)一個類“MyFSDataInputStream”,該類繼承“”,要求如下:實現(xiàn)按行讀取HDFS中指定文件的方法“readLine()”,如果讀到文件末尾,則返回空,否則返回文件一行的文本。publicclassMyFSDataInputStreamextendsFSDataInputStream{publicMyFSDataInputStream(InputStreamin){super(in);//TODOAuto-generatedconstructorstub}publicstaticStringreadline(Configurationconf,StringremoteFilePath)throwsIOException{FileSystemfs=FileSystem.get(conf);PathremotePath=newPath(remoteFilePath);FSDataInputStreamin=fs.open(remotePath);BufferedReaderd=newBufferedReader(newInputStreamReader(in));Stringline=null;if((line=d.readLine())!=null){d.close();in.close();fs.close();returnline;}else{d.close();in.close();fs.close();returnnull;}}publicstaticvoidmain(String[]args){Configurationconf=newConfiguration();StringremoteFilePath="/user/tiny/text.txt";//HDFS路徑try{}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}4.查看Java幫助手冊或其它資料,用“”和“”編程完成輸出HDFS中指定文件的文本到終端中。publicclassFsUrl{static{URL.setURLStreamHandlerFactory(newFsUrlStreamHandlerFactory());}publicstaticvoidcat(StringremoteFilePath)throwsIOException{InputStreamin=null;try{in=newURL("hdfs","localhost",9000,remoteFilePath).openStream();IOUtils.copyBytes(in,System.out,4096,false);}finally{IOUtils.closeStream(in);}}/***主函數(shù)*/publicstaticvoidmain(String[]args){StringremoteFilePath="/user/tiny/text.txt";//HDFS路徑try{FsUrl.cat(remoteFilePath);}catch(Exceptione){e.printStackTrace();}}}六、注意事項熟悉HDFS常用的命令。七、預(yù)習與思考題HDFS的執(zhí)行過程。

實驗六:熟悉常用的HBase操作(2學(xué)時)一、實驗?zāi)康呐c要求1. 理解HBase在Hadoop體系結(jié)構(gòu)中的角色;2. 熟練使用HBase操作常用的Shell命令;3. 熟悉HBase操作常用的JavaAPI。二、實驗類型設(shè)計型三、實驗原理及說明通過實際操作,使學(xué)生對HBase的使用有一個更深刻的理解;熟悉HBase的開發(fā)環(huán)境。四、實驗儀器操作系統(tǒng):LinuxHadoop版本:2.6.0或以上版本HBase版本:JDK版本:1.6或以上版本JavaIDE:Eclipse五、實驗內(nèi)容和步驟把HBase壓縮包放到Home文件夾中右鍵打開終端,解壓HBase到/usr/local重命名方便后續(xù)操作獲取文件夾權(quán)限(tiny改為你的主機名)sudochown-Rtiny/usr/local/hbase/設(shè)置環(huán)境變量sudogedit/etc/profile在最后一行添加內(nèi)容:#sethbasepathexportPATH=$PATH:/usr/local/hbase/bin使環(huán)境變量生效source/etc/profile配置Hbase的配置文件進入/usr/local/hbase/conf/cd/usr/local/hbase/conf/配置hbase-env.shgedithbase-env.sh在最后一行添加內(nèi)容:配置hbase-site.xmlgedithbase-site.xml在<configuration>標簽中添加內(nèi)容:<property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property><property><value>true</value></property>啟動Hadoop進入Hadoop主文件夾cd/usr/local/hadoop/開啟Hadoop相關(guān)進程sbin/start-dfs.shsbin/start-yarn.sh啟動HBase進入HBase主文件夾cd/usr/local/hbase/開啟HBase相關(guān)進程bin/start-hbase.sh查看jps進入HbaseShell創(chuàng)建一個表以便實驗使用create'student','score'用Hadoop提供的HBaseShell命令完成相同任務(wù):列出HBase所有的表的相關(guān)信息,例如表名;以列表的形式顯示所有數(shù)據(jù)表

list查看表的結(jié)構(gòu)

describe'student'查詢表是否存在

exists'student'查詢表是否可用

is_enabled'student'在終端打印出指定的表的所有記錄數(shù)據(jù);scan'student'向已經(jīng)創(chuàng)建好的表添加和刪除指定的列族或列;put'student','s001','score:math','100'向student表,刪除指定列delete'student','s001','score:math'統(tǒng)計表的行數(shù)。count'student'現(xiàn)有以下關(guān)系型數(shù)據(jù)庫中的表和數(shù)據(jù),要求將其轉(zhuǎn)換為適合于HBase存儲的表并插入數(shù)據(jù):學(xué)生表(Student)學(xué)號(S_No)姓名(S_Name)性別(S_Sex)年齡(S_Age)Zhangsanmale23Maryfemale22Lisimale24課程表(Course)課程號(C_No)課程名(C_Name)學(xué)分(C_Credit)123001Math2.0123002ComputerScience5.0123003English3.0選課表(SC)學(xué)號(SC_Sno)課程號(SC_Cno)成績(SC_Score)123001861230036912300277123003991230019812300295同時,請編程完成以下指定功能:(1)createTable(StringtableName,String[]fields) 創(chuàng)建表,參數(shù)tableName為表的名稱,字符串數(shù)組fields為存儲記錄各個域名稱的數(shù)組。要求當HBase已經(jīng)存在名為tableName的表的時候,先刪除原有的表,然后再創(chuàng)建新的表。publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidcreateTable(StringtableName,String[]fields)throwsIOException{init();TableNametablename=TableName.valueOf(tableName);if(admin.tableExists(tablename)){admin.disableTable(tablename);admin.deleteTable(tablename);//刪除原來的表}HTableDescriptorhTableDescriptor=newHTableDescriptor(tablename);for(Stringstr:fields){HColumnDescriptorhColumnDescriptor=newHColumnDescriptor(str);hTableDescriptor.addFamily(hColumnDescriptor);}admin.createTable(hTableDescriptor);close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//關(guān)閉連接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){String[]fields={"Score"};try{HBase.createTable("person",fields);}catch(IOExceptione){e.printStackTrace();}}} (2)addRecord(StringtableName,Stringrow,String[]fields,String[]values) 向表tableName、行row(用S_Name表示)和字符串數(shù)組files指定的單元格中添加對應(yīng)的數(shù)據(jù)values。其中fields中每個元素如果對應(yīng)的列族下還有相應(yīng)的列限定符的話,用“columnFamily:column”表示。例如,同時向“Math”、“ComputerScience”、“English”三列添加成績時,字符串數(shù)組fields為{“Score:Math”,”Score;ComputerScience”,”Score:English”},數(shù)組values存儲這三門課的成績。publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidaddRecord(StringtableName,Stringrow,String[]fields,String[]values)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));for(inti=0;i!=fields.length;i++){Putput=newPut(row.getBytes());String[]cols=fields[i].split(":");put.addColumn(cols[0].getBytes(),cols[1].getBytes(),values[i].getBytes());table.put(put);}table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//關(guān)閉連接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){String[]fields={"Score:Math","Score:ComputerScience","Score:English"};String[]values={"99","80","100"};try{HBase.addRecord("person","Score",fields,values);}catch(IOExceptione){e.printStackTrace();}}} (3)scanColumn(StringtableName,Stringcolumn) 瀏覽表tableName某一列的數(shù)據(jù),如果某一行記錄中該列數(shù)據(jù)不存在,則返回null。要求當參數(shù)column為某一列族名稱時,如果底下有若干個列限定符,則要列出每個列限定符publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidscanColumn(StringtableName,Stringcolumn)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Scanscan=newScan();scan.addFamily(Bytes.toBytes(column));ResultScannerscanner=table.getScanner(scan);for(Resultresult=scanner.next();result!=null;result=scanner.next()){showCell(result);}table.close();close();}//格式化輸出publicstaticvoidshowCell(Resultresult){Cell[]cells=result.rawCells();for(Cellcell:cells){}}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//關(guān)閉連接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.scanColumn("person","Score");}catch(IOExceptione){e.printStackTrace();}}}該列的數(shù)據(jù)。 (4)modifyData(StringtableName,Stringrow,Stringcolumn) 修改表tableName,行row(可以用學(xué)生姓名S_Name表示),列column指定的單元格的數(shù)據(jù)。publicclassHBase{publicstaticlongts;publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoidmodifyData(StringtableName,Stringrow,Stringcolumn,Stringval)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Putput=newPut(row.getBytes());Scanscan=newScan();ResultScannerresultScanner=table.getScanner(scan);for(Resultr:resultScanner){for(Cellcell:r.getColumnCells(row.getBytes(),column.getBytes())){ts=cell.getTimestamp();}}put.addColumn(row.getBytes(),column.getBytes(),ts,val.getBytes());table.put(put);table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//關(guān)閉連接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.modifyData("person","Score","Math","100");}catch(IOExceptione){e.printStackTrace();}}}(5)deleteRow(StringtableName,Stringrow) 刪除表tableName中row指定的行的記錄。publicclassHBase{publicstaticConfigurationconfiguration;publicstaticConnectionconnection;publicstaticAdminadmin;publicstaticvoiddeleteRow(StringtableName,Stringrow)throwsIOException{init();Tabletable=connection.getTable(TableName.valueOf(tableName));Deletedelete=newDelete(row.getBytes());//刪除指定列族//delete.addFamily(Bytes.toBytes(colFamily));//刪除指定列//delete.addColumn(Bytes.toBytes(colFamily),Bytes.toBytes(col));table.delete(delete);table.close();close();}publicstaticvoidinit(){configuration=HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection=ConnectionFactory.createConnection(configuration);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}//關(guān)閉連接publicstaticvoidclose(){try{if(admin!=null){admin.close();}if(null!=connection){connection.close();}}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){try{HBase.deleteRow("person","Score");}catch(IOExceptione){e.printStackTrace();}}}六、注意事項HBase創(chuàng)建表,插入數(shù)據(jù)七、預(yù)習與思考題使用客戶端調(diào)用HBase

實驗七:NoSQL和關(guān)系數(shù)據(jù)庫的操作比較(2學(xué)時)一、實驗?zāi)康呐c要求1. 理解二種數(shù)據(jù)庫(MySQL,HBase)的概念以及不同點;2. 熟練使用二種數(shù)據(jù)庫操作常用的Shell命令;3. 熟悉二種數(shù)據(jù)庫操作常用的JavaAPI。二、實驗類型設(shè)計型三、實驗原理及說明通過實際操作,使學(xué)生對NoSQL的使用有一個更深刻的理解;熟悉NoSQL的開發(fā)環(huán)境及結(jié)構(gòu)。四、實驗儀器操作系統(tǒng):LinuxHadoop版本:或以上版本MySQL版本:5.6或以上版本HBase版本:或以上版本JDK版本:1.7或以上版本JavaIDE:Eclipse五、實驗內(nèi)容和步驟3.1MySQL數(shù)據(jù)庫操作Student學(xué)生表NameEnglishMathComputerzhangsan698677lisi5510088根據(jù)上面給出的表格,利用MySQL5.6設(shè)計出student學(xué)生表格;設(shè)計完后,用select語句輸出所有的相關(guān)信息,并給出截圖;查詢zhangsan的Computer成績,并給出截圖;修改lisi的Math成績,改為95.給出截圖.根據(jù)上面已經(jīng)設(shè)計出的student表,用MySQL的JAVA客戶端編程;添加數(shù)據(jù):English:45 Math:89 Computer:100scofield4589100獲取scofield的English成績信息3.2HBase數(shù)據(jù)庫操作Student學(xué)生表namescoreEnglishMathComputerzhangsan698677lisi5510088根據(jù)上面給出的表格,用HbaseShell模式設(shè)計student學(xué)生表格。設(shè)計完后,用scan指令瀏覽表的相關(guān)信息,給出截圖。查詢zhangsan的Computer成績,給出截圖。修改lisi的Math成績,改為95,給出截圖。根據(jù)上面已經(jīng)設(shè)計出的student,用HbaseAPI編程。添加數(shù)據(jù):English:45 Math:89 Computer:100scofield4589100獲取scofield的English成績信息六、注意事項NoSQL不是一個具體數(shù)據(jù)庫,而是一類數(shù)據(jù)庫的統(tǒng)稱七、預(yù)習與思考題鍵值數(shù)據(jù)庫、列族數(shù)據(jù)庫、文檔數(shù)據(jù)庫、圖形數(shù)據(jù)庫的區(qū)別

實驗八:MapReduce編程初級實踐(2學(xué)時)一、實驗?zāi)康呐c要求1.通過實驗掌握基本的MapReduce編程方法;2.掌握用MapReduce解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等。二、實驗類型綜合型三、實驗原理及說明已經(jīng)配置完成的Hadoop偽分布式環(huán)境。四、實驗儀器操作系統(tǒng):LinuxHadoop版本:或以上版本JDK版本:1.7或以上版本JavaIDE:Eclipse五、實驗內(nèi)容和步驟1.編程實現(xiàn)文件合并和去重操作對于兩個輸入文件,即文件A和文件B,請編寫MapReduce程序,對兩個文件進行合并,并剔除其中重復(fù)的內(nèi)容,得到一個新的輸出文件C。下面是輸入文件和輸出文件的一個樣例供參考。輸入文件A的樣例如下: 20210101x 20210102y 20210103x 20210104y 20210105z20210106x輸入文件B的樣例如下:20210101y20210102y20210103x20210104z20210105y根據(jù)輸入文件A和B合并得到的輸出文件C的樣例如下:20210101x20210101y20210102y20210103x20210104y20210104z20210105y 20210105z20210106x創(chuàng)建文件f1和f2將上面樣例內(nèi)容復(fù)制進去在HDFS建立input文件夾(執(zhí)行這步之前要開啟hadoop相關(guān)進程)上傳樣例到HDFS中的input文件夾接著打開eclipse創(chuàng)建MapReduce項目(具體實現(xiàn)步驟在HDFS實驗里已經(jīng)詳細給過)Eclipse的使用找到File菜單,選擇New->Project選擇Map/ReduceProject,然后Next輸入Projectname,然后Finish點開項目,找到src文件夾,右鍵選擇New->Class輸入Package和Name,然后Finish修改一下JRE寫好Java代碼(給的代碼里要修改HDFS和本地路徑),右鍵選擇RunAs->RunonHadoop,結(jié)果在HDFS系統(tǒng)中查看實驗代碼:packagecom.Merge;publicclassMerge{/***@paramargs*對A,B兩個文件進行合并,并剔除其中重復(fù)的內(nèi)容,得到一個新的輸出文件C*///重載map函數(shù),直接將輸入中的value復(fù)制到輸出數(shù)據(jù)的key上publicstaticclassMapextendsMapper<Object,Text,Text,Text>{privatestaticTexttext=newText();publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{text=value;context.write(text,newText(""));}}//重載reduce函數(shù),直接將輸入中的key復(fù)制到輸出數(shù)據(jù)的key上publicstaticclassReduceextendsReducer<Text,Text,Text,Text>{publicvoidreduce(Textkey,Iterable<Text>values,Contextcontext)throwsIOException,InterruptedException{context.write(key,newText(""));}}publicstaticvoidmain(String[]args)throwsException{Configurationconf=newConfiguration();String[]otherArgs=newString[]{"input","output"};/*直接設(shè)置輸入?yún)?shù)*/if(otherArgs.length!=2){System.exit(2);}Jobjob=Job.getInstance(conf,"Mergeandduplicateremoval");job.setJarByClass(Merge.class);job.setMapperClass(Map.class);job.setCombinerClass(Reduce.class);job.setReducerClass(Reduce.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job,newPath(otherArgs[0]));FileOutputFormat.setOutputPath(job,newPath(otherArgs[1]));System.exit(job.waitForCompletion(true)?0:1);}}六、注意事項Map函數(shù)和Reduce函數(shù)的編寫。七、預(yù)習與思考題如何利用MapReduce技術(shù)實現(xiàn)分布式計算。報告名稱:基于物聯(lián)網(wǎng)的智能家居控制系統(tǒng)設(shè)計方案

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論