Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè)匯總 實(shí)訓(xùn)1 基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備-實(shí)訓(xùn)16 Kafka發(fā)布訂閱消息系統(tǒng)實(shí)現(xiàn)+實(shí)訓(xùn)綜合案例_第1頁(yè)
Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè)匯總 實(shí)訓(xùn)1 基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備-實(shí)訓(xùn)16 Kafka發(fā)布訂閱消息系統(tǒng)實(shí)現(xiàn)+實(shí)訓(xùn)綜合案例_第2頁(yè)
Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè)匯總 實(shí)訓(xùn)1 基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備-實(shí)訓(xùn)16 Kafka發(fā)布訂閱消息系統(tǒng)實(shí)現(xiàn)+實(shí)訓(xùn)綜合案例_第3頁(yè)
Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè)匯總 實(shí)訓(xùn)1 基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備-實(shí)訓(xùn)16 Kafka發(fā)布訂閱消息系統(tǒng)實(shí)現(xiàn)+實(shí)訓(xùn)綜合案例_第4頁(yè)
Hadoop生態(tài)系統(tǒng)及開(kāi)發(fā) 實(shí)訓(xùn)手冊(cè)匯總 實(shí)訓(xùn)1 基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備-實(shí)訓(xùn)16 Kafka發(fā)布訂閱消息系統(tǒng)實(shí)現(xiàn)+實(shí)訓(xùn)綜合案例_第5頁(yè)
已閱讀5頁(yè),還剩219頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)訓(xùn)2.1基礎(chǔ)實(shí)訓(xùn)環(huán)境準(zhǔn)備1.實(shí)訓(xùn)目的通過(guò)本實(shí)訓(xùn)對(duì)大數(shù)據(jù)實(shí)訓(xùn)環(huán)境配置做一個(gè)前期準(zhǔn)備操作,了解各個(gè)節(jié)點(diǎn)之間的基礎(chǔ)通信原理。2.實(shí)訓(xùn)內(nèi)容該實(shí)訓(xùn)主要針對(duì)集群配置做前期的域名映射、SSH免密登陸工作,對(duì)SSH安全通信協(xié)議以及通信方式有所了解,對(duì)大數(shù)據(jù)服務(wù)組件之間安全通信有所了解。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參加實(shí)訓(xùn)內(nèi)容中的實(shí)訓(xùn)過(guò)程。4.準(zhǔn)備知識(shí)本實(shí)訓(xùn)任務(wù)可以配套大數(shù)據(jù)實(shí)訓(xùn)平臺(tái),由平臺(tái)分發(fā)三臺(tái)裸機(jī)服務(wù)器。如果沒(méi)有使用大數(shù)據(jù)實(shí)訓(xùn)平臺(tái),則首先需要先你的電腦上安裝好VMware或者VirtualBox等相類似的軟件,然后裝一臺(tái)Centos7虛擬機(jī),然后克隆三臺(tái)出來(lái),并配置好ip地址,可自行查閱相關(guān)資料,或者查看本書(shū)后面的附錄頁(yè)。同學(xué)們需要提前學(xué)習(xí)一些簡(jiǎn)單的Linux基礎(chǔ)知識(shí)、網(wǎng)絡(luò)基礎(chǔ)知識(shí)、云計(jì)算基礎(chǔ)知識(shí),如果是學(xué)會(huì)配置虛擬機(jī)之間的網(wǎng)絡(luò)等等,如基礎(chǔ)比較薄弱,可以在老師的指導(dǎo)下進(jìn)行學(xué)習(xí)。由于涉及面比較廣,建議同學(xué)之間加多交流,打下良好基礎(chǔ),為后面的學(xué)習(xí)做準(zhǔn)備。5.實(shí)訓(xùn)步驟(1)搭建集群服務(wù)器老師按照平臺(tái)操作手冊(cè),分發(fā)給學(xué)生初始裸機(jī)環(huán)境。一共是三臺(tái)服務(wù)器,一臺(tái)是主節(jié)點(diǎn),兩臺(tái)是從節(jié)點(diǎn)。角色、ip地址、用戶名、密碼等信息初始化情況如圖2-3所示。角色ip地址cpu內(nèi)存用戶名密碼master312核1.5groothadoopslave1322核1groothadoopslave2332核1groothadoop圖2-3所提供的服務(wù)器基本情況(2)MobaXterm的使用如果想要操作服務(wù)器,一般都會(huì)使用第三方工具進(jìn)行連接操作,第三方工具如MobaXterm、XShell、SecureCRT等等,工具的使用大同小異,此處使用目前比較主流的MobaXterm,由于MobaXterm具有綠色版本,所以不需要安裝,直接雙擊即可打開(kāi)使用頁(yè)面,如圖所示2-4所示。圖2-4MobaXterm軟件首頁(yè)(3)新建會(huì)話①點(diǎn)擊頁(yè)面中部的“Newsession”即可打開(kāi)新建回話頁(yè)面,此時(shí)默認(rèn)選擇是“SSH”類型,不需要選擇,直接輸入遠(yuǎn)程主機(jī)的ip地址(此時(shí)輸入master的ip地址),然后勾選“指定用戶名”,輸入用戶名(此時(shí)為root用戶),其余保持默認(rèn)不變,如圖2-5所示。圖2-5設(shè)置會(huì)話接著,點(diǎn)擊窗口下方的“OK”按鈕。此時(shí)會(huì)提示輸入root用戶密碼,如圖2-6所示。圖2-6提示輸入密碼輸入密碼后,會(huì)提示是否保存密碼,點(diǎn)擊“Yes”,如圖2-7所示。圖2-7保存密碼此后即可連接上master服務(wù)器,如圖2-8所示。圖2-8連接上服務(wù)器頁(yè)面點(diǎn)擊左上角菜單欄的“終端”,選擇“打開(kāi)新標(biāo)簽”,跟上面一樣的操作連接上slave1和slave2節(jié)點(diǎn),如下圖2-17所示。圖2-17各節(jié)點(diǎn)均需連接上連接好后,可以右擊會(huì)話,將會(huì)話名稱分別改為master、slave1、slave2,以方便辨識(shí)。修改master主機(jī)名(如果主機(jī)名已經(jīng)修改好,可忽略此操作)命令格式:hostnamectlset-hostname主機(jī)名hostnamectlset-hostnamemaster

bash結(jié)果如圖所示:圖2-17修改主機(jī)名slave1、slave2的主機(jī)名也分別修改好。添加域名映射①先安裝好加強(qiáng)版vi編輯器,使編輯頁(yè)面更加美觀在三臺(tái)節(jié)點(diǎn)上執(zhí)行:yuminstall-yvim提示以下頁(yè)面則表示安裝成功,如圖2-所示:②使用vim命令編輯/etc/hosts文件在三臺(tái)節(jié)點(diǎn)上執(zhí)行:vim/etc/hosts然后添加三臺(tái)主機(jī)ip地址和主機(jī)名映射關(guān)系,內(nèi)容為:31master32slave133slave2如圖2-18所示。圖2-18配置域名映射配置好之后可以通過(guò)主機(jī)名來(lái)代替ip進(jìn)行一系列的操作。③保存退出后,使用cat命令查看配置的文件是否配置好:cat/etc/hosts如果查看到/etc/hosts文件里面有映射關(guān)系,則表示配置好了。如下圖2-19所示。圖2-19校驗(yàn)域名映射④同理,在slave1、slave2上也要配置好域名映射,域名映射的內(nèi)容是一樣的。(5)配置三臺(tái)服務(wù)器的SSH免密碼登錄①生成服務(wù)器的密鑰。在master上執(zhí)行:ssh-keygen②輸入之后連續(xù)按三次回車,則可以生成服務(wù)器的密鑰,如圖2-20所示。圖2-20生成服務(wù)器密鑰③在slave1、slave2上也要執(zhí)行上面兩步來(lái)生成密鑰。(6)配置公鑰到authorized_keys文件(slave1、slave2節(jié)點(diǎn))①將master的公鑰id_rsa.pub寫(xiě)入到authorized_keys文件。在master上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keysls執(zhí)行結(jié)果如圖2-21所示。圖2-21寫(xiě)入公鑰到authorized_keys文件②將slave1的公鑰id_rsa.pub寫(xiě)入到authorized_keys1文件,此處是authorized_keys1文件,因?yàn)榈认乱截惖絤aster節(jié)點(diǎn),所要需要做一下區(qū)分,使用其他文件名也可以。在slave1上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keys1執(zhí)行結(jié)果如圖2-22所示。圖2-22寫(xiě)入公鑰到authorized_keys1文件③將slave2的公鑰id_rsa.pub寫(xiě)入到authorized_keys2文件。在slave1上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keys2執(zhí)行結(jié)果如圖2-23所示。圖2-23寫(xiě)入公鑰到authorized_keys2文件④將authorized_keys1文件拷貝到master節(jié)點(diǎn),此處注意ip地址需要修改成自己的master節(jié)點(diǎn)的ip地址,所以也可以使用master節(jié)點(diǎn)的主機(jī)名代替。在slave1上執(zhí)行:scpauthorized_keys1root@master:~/.ssh/執(zhí)行結(jié)果如圖2-24所示。圖2-24拷貝slave1公鑰到master⑤將authorized_keys2文件拷貝到master節(jié)點(diǎn)。在slave2上執(zhí)行:scpauthorized_keys2root@master:~/.ssh/執(zhí)行結(jié)果如圖2-25所示。圖2-25拷貝slave2公鑰到master⑥此時(shí),master上其實(shí)已經(jīng)有了slave1和slave2的公鑰。需要對(duì)公鑰進(jìn)行整合,然后再分發(fā)到slave1和slave2,這樣才能實(shí)現(xiàn)各節(jié)點(diǎn)間能夠進(jìn)行免密碼登錄。 在master上執(zhí)行:catauthorized_keys1>>authorized_keyscatauthorized_keys2>>authorized_keys執(zhí)行步驟如圖2-26所示。圖2-26匯集三臺(tái)服務(wù)器的公鑰⑦查看authorized_keys文件是否已經(jīng)有各節(jié)點(diǎn)的公鑰。在master上執(zhí)行:catauthorized_keys執(zhí)行結(jié)果如圖2-27所示。圖2-27查看匯集結(jié)果⑧將master的authorized_keys文件拷貝到slave1、slave2節(jié)點(diǎn)的/root/.ssh/目錄下,以達(dá)到互相可以免密碼訪問(wèn)的目的。在master上執(zhí)行:scpauthorized_keysroot@slave1:~/.ssh/scpauthorized_keysroot@slave2:~/.ssh/執(zhí)行步驟如圖2-28所示。圖2-28分發(fā)公鑰到slave1、slave2⑨測(cè)試免密碼登陸校驗(yàn)的命令為(ssh后面有一個(gè)空格):命令格式:ssh主機(jī)名ssh登錄進(jìn)去后,務(wù)必記得使用exit命令退出再測(cè)試其他節(jié)點(diǎn)??梢园l(fā)現(xiàn),從master節(jié)點(diǎn)ssh到master、slave1、slave2均不用輸入密碼(如出現(xiàn)需要輸入yes/no,輸入yes即可,下次再重新執(zhí)行就不會(huì)再出現(xiàn)),表示免密碼登錄是成功的。校驗(yàn)結(jié)果如圖2-29所示。圖2-29校驗(yàn)master是否能夠免密碼登錄slave1和slave2⑩測(cè)試slave1和slave2能否免密碼登錄到master,如果沒(méi)有問(wèn)題,也是可以免密碼登錄的,此處不再截圖。6.實(shí)訓(xùn)總結(jié)前期的基礎(chǔ)配置準(zhǔn)備工作,為之后的環(huán)境搭建做好充分的準(zhǔn)備。該實(shí)訓(xùn)主要通過(guò)SSH免密碼登陸配置,使學(xué)生對(duì)實(shí)操節(jié)點(diǎn)之間的這種SSH通信方式有所感知。本實(shí)訓(xùn)課程對(duì)于初學(xué)者而言,最難的是沒(méi)有接觸過(guò)Linux操作,如果接觸過(guò)的話上手會(huì)很快。其實(shí)也可以不使用XShell工具,但是為了剛好地操作,此處使用了遠(yuǎn)端登錄工具,直接在Windows上就可以操作集群,如果沒(méi)有使用工具,則應(yīng)該直接進(jìn)去操作集群。免密碼登錄是大數(shù)據(jù)集群的大前提,如果沒(méi)有進(jìn)行免密碼,節(jié)點(diǎn)之間是無(wú)法進(jìn)行友好通信的,而域名映射,是為了替代ip,方便集群的管理與相關(guān)配置的遷移等等。學(xué)習(xí)的時(shí)候,需要理解好實(shí)訓(xùn)的目的。每個(gè)人的用戶名及ip都會(huì)有所不同,本書(shū)的用戶名和ip需要特別留意,后期會(huì)一直使用,先記住以便不在學(xué)習(xí)中混淆。如果是自己搭建的虛擬機(jī),可以取一個(gè)短的名字和設(shè)置一個(gè)便于記憶的ip,以便學(xué)習(xí)。最后,總結(jié)一下同學(xué)們?cè)诓僮鬟^(guò)程中比較容易遇到的錯(cuò)誤:①如果是自己搭建的環(huán)境,可能會(huì)沒(méi)有scp命令,此時(shí)可以自己安裝一下。②需要特別注意的是,生成的公鑰文件其實(shí)只有一行內(nèi)容,在實(shí)操的時(shí)候,不要將authorized_keys里面的內(nèi)容復(fù)制出來(lái),然后再編輯,最好是跟著實(shí)訓(xùn)步驟一步一步復(fù)制,否則很容易出錯(cuò),比如文件格式發(fā)生改變、會(huì)自動(dòng)換行等。配置好后,每臺(tái)服務(wù)器authorized_keys文件里面的內(nèi)容,其實(shí)是一樣的。③最后測(cè)試是否配置成功時(shí),記得測(cè)試完后,需要執(zhí)行exit命令進(jìn)行退出。否則,很可能會(huì)影響你后面的操作,比如你在master上用ssh登錄上了其他節(jié)點(diǎn),忘記退出了,你之后的操作其實(shí)是在操作其他節(jié)點(diǎn)的,而你卻沒(méi)發(fā)現(xiàn),以為還是在操作master,所以務(wù)必記得使用exit命令。實(shí)訓(xùn)2.2HDFS的安裝部署與配置1.實(shí)訓(xùn)目的通過(guò)本實(shí)訓(xùn)理解HDFS的架構(gòu)以及安裝與部署;學(xué)會(huì)啟動(dòng)HDFS集群,懂得上傳文件到HDFS。2.實(shí)訓(xùn)內(nèi)容該實(shí)訓(xùn)主要是進(jìn)行HDFS集群的相關(guān)操作,包括HDFS的安裝部署和配置,并且懂得查看HDFS的WebUI界面和上傳文件到HDFS。但在部署之前需要安裝好HDFS的運(yùn)行前提環(huán)境JDK,然后再在master上部署NameNode服務(wù),在slave上部署DataNode服務(wù)。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(shí)(1)HDFS內(nèi)容回顧①分布式文件系統(tǒng)分布式文件系統(tǒng)是指文件系統(tǒng)管理的物理存儲(chǔ)資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連。該系統(tǒng)架構(gòu)于網(wǎng)絡(luò)之上,勢(shì)必會(huì)引入網(wǎng)絡(luò)編程的復(fù)雜性,因此分布式文件系統(tǒng)比普通磁盤(pán)文件系統(tǒng)更為復(fù)雜。②HDFS架構(gòu)HDFS為大數(shù)據(jù)平臺(tái)其它所有組件提供了基本的存儲(chǔ)功能。它具有高容錯(cuò)、高可靠、可擴(kuò)展、高吞吐率等特征,為大數(shù)據(jù)存儲(chǔ)和處理提供了強(qiáng)大的底層存儲(chǔ)架構(gòu)。HDFS是一個(gè)主從結(jié)構(gòu)的分布式文件系統(tǒng),具有分布式存儲(chǔ)的特點(diǎn),HDFS集群擁有一個(gè)NameNode和多個(gè)DataNode,NameNode管理文件系統(tǒng)的元數(shù)據(jù),DataNode存儲(chǔ)實(shí)際的數(shù)據(jù)。從用戶的角度來(lái)看,其與傳統(tǒng)的文件系統(tǒng)類似,可通過(guò)目錄路徑對(duì)其上的文件執(zhí)行增刪改查操作。由于是分布式存儲(chǔ),所以HDFS集群除了擁有一個(gè)NameNode,還有多個(gè)DataNode,NameNode管理著文件系統(tǒng)的元數(shù)據(jù),DataNode存儲(chǔ)實(shí)際的數(shù)據(jù)。HDFS開(kāi)放文件系統(tǒng)的命名空間以便用戶以文件形式存儲(chǔ)數(shù)據(jù),秉承“一次寫(xiě)入、多次讀取”的原則。客戶端通過(guò)NameNode和DataNode的交互訪問(wèn)文件系統(tǒng),聯(lián)系NameNode以獲取文件的元數(shù)據(jù),而真正的文件I/O操作是直接和DataNode進(jìn)行交互的。(2)HDFS基本命令HDFS的基本命令與Linux的命令非常相似,可以結(jié)合Linux的命名進(jìn)行對(duì)比學(xué)習(xí)。HDFS基本命令格式如下(cmd為具體的操作,args為參數(shù)):hdfsdfs-cmdargs部分HDFS命令示例如下:hdfsdfs-mkdir/user/trunk#建立目錄/user/trunkhdfsdfs-ls/user#查看/user目錄下的目錄和文件hdfsdfs-lsr/user#遞歸查看/user目錄下的目錄和文件hdfsdfs-puttest.txt/user/trunk#上傳test.txt文件至/user/trunkhdfsdfs-get/user/trunk/test.txt#獲取/user/trunk/test.txt文件hdfsdfs-cat/user/trunk/test.txt#查看/user/trunk/test.txt文件內(nèi)容hdfsdfs-tail/user/trunk/test.txt#查看/user/trunk/test.txt文件的最后1000行hdfsdfs-rm/user/trunk/test.txt#刪除/user/trunk/test.txt文件hdfsdfs-helpls#查看ls命令的幫助文檔5.實(shí)訓(xùn)操作(1)安裝包準(zhǔn)備①下載好的JDK和Hadoop的安裝包,可以直接使用MobaXterm工具上傳安裝包到各個(gè)節(jié)點(diǎn)。點(diǎn)擊MobaXterm軟件左側(cè)的sftp可以進(jìn)入傳輸文件頁(yè)面,點(diǎn)擊下方的“跟隨終端文件夾”可以讓顯示的內(nèi)容跟隨操作的路徑。如圖2-30所示。圖2-30切換到上傳文件頁(yè)面②將需要上傳的軟件拖拉到MobaXterm窗口空白處,如圖2-所示。圖2-30上傳JDK與Hadoop安裝包到master等待軟件上傳完后,繼續(xù)往下操作。JDK安裝配置三臺(tái)節(jié)點(diǎn)均操作①將JDK移動(dòng)到指定文件夾放置好,如圖2-31所示。mkdirpackagemvhadoop-3.3.4.tar.gzjdk-8u161-linux-x64.tar.gzpackage/cdpackage/ll②創(chuàng)建/opt/software文件夾放置需要安裝的軟件,然后解壓JDKmkdir/opt/softwaretar-zxvfjdk-8u161-linux-x64.tar.gz-C/opt/software/解壓好后,如圖2-所示。③需要配置環(huán)境變量(本次實(shí)訓(xùn)在/etc/profile文件中配置),如圖2-33所示。vim/etc/profileexportJAVA_HOME=/opt/software/jdk1.8.0_161exportPATH=$PATH:$JAVA_HOME/bin圖2-33配置環(huán)境變量注意:添加配置的位置是文件最后一行。③配置好后,需要使環(huán)境變量在當(dāng)前會(huì)話生效,如圖2-34所示。source/etc/profile圖2-34使配置環(huán)境生效④校驗(yàn)是否設(shè)置成功,可以查看到JDK的版本號(hào),如圖2-35所示。java-version注意:三臺(tái)節(jié)點(diǎn)均需要安裝JDK。(3)HDFS相關(guān)配置①解壓Hadoop包文件至/opt/software目錄,然后查看是否解壓成功。如圖2-36所示。tar-zxvfhadoop-3.3.4.tar.gz-C/opt/software/圖2-36查看是否解壓成功②修改HDFS配置文件設(shè)置JDK安裝目錄編輯文件“/opt/software/hadoop-3.3.4/etc/hadoop/hadoop-env.sh”cd/opt/software/hadoop-3.3.4/etc/hadoopvimhadoop-env.sh找到如下一行:#exportJAVA_HOME=在其下方添加內(nèi)容:exportJAVA_HOME=/opt/software/jdk1.8.0_161操作結(jié)果如圖2-37所示。圖2-37設(shè)置JAVA_HOME此處的“/opt/software/jdk1.8.0_161”即是JDK安裝位置,如果不同,請(qǐng)根據(jù)實(shí)際情況更改。指定HDFS主節(jié)點(diǎn)編輯文件為“/opt/software/hadoop-3.3.4/etc/hadoop/core-site.xml”,修改編輯文件:vimcore-site.xml將如下內(nèi)容添加到最后兩行的<configuration></configuration>標(biāo)簽之間: <property> <name>hadoop.tmp.dir</name> <value>/opt/software/hadoop/tmp</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property>位置如圖2-38所示。圖2-38配置core-site.xml指定HDFS相關(guān)配置編輯文件為“/opt/software/hadoop-3.3.4/etc/hadoop/hdfs-site.xml”,將指定HDFS集群存儲(chǔ)的副本系數(shù)、Namenode元數(shù)據(jù)和DataNode數(shù)據(jù)的存儲(chǔ)位置、,修改編輯文件:vimhdfs-site.xml將如下內(nèi)容添加到最后兩行的<configuration></configuration>標(biāo)簽之間: <property> <name>.dir</name> <value>/opt/software/hadoop-3.3.4/dfs/name</value><description>Namenode元數(shù)據(jù)存儲(chǔ)位置</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/software/hadoop-3.3.4/dfs/data</value><description>DataNode數(shù)據(jù)存儲(chǔ)位置</description> </property> <property> <name>dfs.replication</name> <value>2</value><description>塊存儲(chǔ)的副本系數(shù)</description> </property> <property> <name>node.secondary.http-address</name> <value>master:9868</value><description>SecondaryNameNode地址</description> </property><property><name>dfs.webhdfs.enabled</name><value>true</value><description>開(kāi)啟webhdfs服務(wù)</description></property>指定HDFS從節(jié)點(diǎn)編輯worker文件,路徑為“/opt/software/hadoop-3.3.4/etc/hadoop/workers”文件夾里,將slave節(jié)點(diǎn)的文件名加入此文件中,本實(shí)訓(xùn)的slave節(jié)點(diǎn)為slave1和slave2,所以添加的內(nèi)容為slave1和slave2:vimworkersslave1slave2注意:①原本文件中默認(rèn)有l(wèi)ocalhost,記得刪除掉。②此文件中不要包含多余的空行或者空格。最終配置內(nèi)容如圖2-39所示。圖2-39查看workers文件內(nèi)容(4)拷貝master上的配置文件到slave1、slave2在master機(jī)上執(zhí)行下列命令,將配置好的hadoop文件目錄拷貝至slave1、slave2。本實(shí)訓(xùn)使用附錄中提供的腳本實(shí)現(xiàn)拷貝操作,可以查看后面的附錄內(nèi)容。~/shell/scp_call.sh/opt/software/hadoop-3.3.4/拷貝結(jié)束后,slave1和slave2節(jié)點(diǎn)將會(huì)有相應(yīng)的文件目錄。如圖2-、圖2-所示。圖2-39查看slave1節(jié)點(diǎn)文件夾圖2-39查看slave2節(jié)點(diǎn)文件夾(5)啟動(dòng)HDFS①配置環(huán)境變量為了方便方便后面操作,可以先將Hadoop主目錄下的bin和sbin目錄配上環(huán)境變量。vim/etc/profileexportHADOOP_HOME=/opt/software/hadoop-3.3.4exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin同時(shí),Hadoop3.3.4版本對(duì)用戶做了限制,所以還需要添加定義用戶的變量。exportHDFS_NAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=root最終配置結(jié)果如圖2-所示:最后還需要使環(huán)境變量在當(dāng)前會(huì)話生效。source/etc/profile為了方便操作,可以拷貝master上的環(huán)境變量文件到slave1、slave2節(jié)點(diǎn)。在master節(jié)點(diǎn)執(zhí)行:~/shell/scp_call.sh/etc/profile拷貝完成后,需要在slave1、slave2節(jié)點(diǎn)上執(zhí)行source操作。②格式化HDFS首次使用HDFS需要先進(jìn)行格式化,可以在/opt/software/hadoop-3.3.4/bin目錄執(zhí)行格式化命令。在master節(jié)點(diǎn)執(zhí)行:hdfsnamenode-format如果沒(méi)有發(fā)生意外,則會(huì)提示格式化成功,并且NameNode元數(shù)據(jù)的存儲(chǔ)位置是hdfs-site.xml配置文件中指定的位置。如圖2-40所示。圖2-40格式化HDFS成功標(biāo)識(shí)③啟動(dòng)HDFS在master節(jié)點(diǎn)執(zhí)行,如圖2-41所示。start-dfs.sh圖2-41啟動(dòng)HDFS④通過(guò)查看進(jìn)程的方式驗(yàn)證HDFS啟動(dòng)成功分別在master、slave1、slave2三臺(tái)機(jī)器上執(zhí)行jps命令,查看HDFS服務(wù)是否已經(jīng)啟動(dòng)。若啟動(dòng)成功,在master上會(huì)看到相應(yīng)的NameNode、SecondaryNameNode進(jìn)程信息。如圖2-42所示。圖2-42查看master進(jìn)程在slave1、slave2上會(huì)看到相應(yīng)的DataNode進(jìn)程信息。如圖2-43、圖2-44所示。圖2-43查看slave1進(jìn)程圖2-44查看slave2進(jìn)程此操作也可以使用提供的腳本文件進(jìn)行查看,結(jié)果如圖2-所示。~/shell/jps_all.sh圖2-44使用腳本查看進(jìn)程相關(guān)腳本請(qǐng)查看附錄的jps_all.sh內(nèi)容。(6)通過(guò)Shell指令上傳文件到HDFS①新建一個(gè)測(cè)試文件在master節(jié)點(diǎn)上執(zhí)行,效果如圖2-所示:mkdir/root/datascd/root/datasecho123>>data.txt②上傳data.txt文件到HDFS集群,如圖2-45所示:hdfsdfs-put/root/datas/data.txt/hdfsdfs-ls/圖2-45上傳文件到HDFS③查看WebUI頁(yè)面在瀏覽器中打開(kāi)master的ip地址加端口:31:9870格式:master的ip:9870。如圖2-46所示。圖2-46查看WebUI界面點(diǎn)擊WebUI界面上方菜單欄的“Utilities”,選擇“Browsethefilesystem”,可以看到上傳到HDFS集群根路徑的data.txt文件。如圖2-47所示。圖2-47查看HDFS的文件接著,可以按照?qǐng)D2-所示的步驟,查看具體data.txt的內(nèi)容。具體操作步驟為:先點(diǎn)擊①,會(huì)彈出窗口,再點(diǎn)擊②,則會(huì)提示③的內(nèi)容。④設(shè)置Windows電腦與三臺(tái)節(jié)點(diǎn)的映射關(guān)系為了方便后期操作,可以配置Windows電腦與三臺(tái)節(jié)點(diǎn)的映射關(guān)系,以達(dá)到直接通過(guò)主機(jī)名和端口號(hào)達(dá)到訪問(wèn)效果。配置文件路徑為:C:\Windows\System32\drivers\etc\hosts修改此文件,將映射關(guān)系添加上:31master32slave133slave2此時(shí)在瀏覽器地址欄輸入地址:http://master:9870。則一樣可以訪問(wèn)NameNode的WebUI頁(yè)面。6.實(shí)訓(xùn)總結(jié)本實(shí)訓(xùn)通過(guò)安裝部署HDFS集群以及創(chuàng)建相關(guān)目錄、上傳相關(guān)的數(shù)據(jù)文件到HDFS等操作,對(duì)HDFS分布式文件系統(tǒng)的基礎(chǔ)配置及操作有了一定的認(rèn)識(shí)??傆[整一個(gè)操作流程,下面總結(jié)一下大家在操作過(guò)程中比較容易遇到的錯(cuò)誤:①需要特別注意的是JDK是安裝在三臺(tái)服務(wù)器上的。②最后配置好Hadoop的時(shí)候,每一臺(tái)服務(wù)器上的Hadoop目錄里的內(nèi)容其實(shí)是一樣的,因?yàn)槭菑膍aster節(jié)點(diǎn)復(fù)制到另外兩臺(tái)slaves上的,所以如果在操作過(guò)程中,如果發(fā)現(xiàn)master上的配置文件有配置錯(cuò),那么一定要記得將master上的正確文件也同步到slaves節(jié)點(diǎn)上去。③如果在操作的時(shí)候,發(fā)現(xiàn)格式化后發(fā)現(xiàn)自己配置錯(cuò)了,需要重新配置,記得將配置文件core-site.xml里的hadoop.tmp.dir配置項(xiàng)所配置的目錄以及hdfs-site.xml里配置的NameNode元數(shù)據(jù)存儲(chǔ)目錄和DataNode數(shù)據(jù)存儲(chǔ)目錄全部刪除掉,再重新格式化,否則會(huì)報(bào)錯(cuò),如遇其他方法,請(qǐng)自行上網(wǎng)查閱資料了解。實(shí)訓(xùn)2.3HDFS的讀寫(xiě)API操作1.實(shí)訓(xùn)目的通過(guò)本實(shí)訓(xùn)使學(xué)生學(xué)會(huì)在本地(Windows環(huán)境)編寫(xiě)Java代碼,學(xué)會(huì)用離線工程編寫(xiě)HDFS的讀寫(xiě)操作,并且學(xué)會(huì)打包工程上傳到服務(wù)器執(zhí)行。2.實(shí)訓(xùn)內(nèi)容該實(shí)訓(xùn)需要每位學(xué)生在已搭建HDFS開(kāi)發(fā)環(huán)境上編寫(xiě)了HDFS寫(xiě)、讀程序代碼;并打包項(xiàng)目,在集群環(huán)境上執(zhí)行該程序。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(shí)(1)IDEA編輯器介紹IDEA全稱是IntelliJIDEA,是Java語(yǔ)言開(kāi)發(fā)的集成環(huán)境(也可用于其他語(yǔ)言),IntelliJ在業(yè)界被公認(rèn)為最好的java開(kāi)發(fā)工具之一,特別是在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、SFTP、FTP、J2EE支持、代碼審查、Ant、JUnit、CVS整合、創(chuàng)新的GUI設(shè)計(jì)等方面,發(fā)揮著巨大的作用。IDEA是JetBrains公司的產(chǎn)品,這家公司總部位于捷克共和國(guó)的首都布拉格,開(kāi)發(fā)人員以嚴(yán)謹(jǐn)著稱的東歐程序員為主。IDEA的版本分為商業(yè)版本與開(kāi)源版本,對(duì)比如圖2-50所示。圖2-50IDEA編輯器版本對(duì)比(2)Java實(shí)現(xiàn)文件讀寫(xiě)在操作HDFS的讀寫(xiě)操作之前,我們最好有一點(diǎn)Java基礎(chǔ),比如說(shuō)Java是怎么實(shí)現(xiàn)Java的文件讀寫(xiě)的。下面列舉幾種Java的讀寫(xiě)文件方式,供大家自行搜索資料學(xué)習(xí)。方式一:InputStream、OutputStream方式二(緩存字節(jié)流):BufferedInputStream、BufferedOutputStream使用方式與字節(jié)流差不多,但是效率比后者更高(推薦使用)。方式三:InputStreamReader、OutputStreamWriter方式四:BufferedReader、BufferedWriter方式五:Reader、PrintWriter建議使用第二種方式BufferedInputStream、BufferedOutputStream。5.實(shí)訓(xùn)步驟(1)前提工作①需要提前安裝好Windows系統(tǒng)上的JDK,本實(shí)訓(xùn)教程安裝的版本為:jdk-11.0.6。②需要將Hadoop的安裝包解壓在Windows系統(tǒng)上的某一路徑。③需要安裝好IDEA編輯器,本次實(shí)訓(xùn)使用的版本為:ideaIC-2022.2.3。(2)新建Java項(xiàng)目①打開(kāi)IDEA后,新建一個(gè)項(xiàng)目,點(diǎn)擊“NewProject”,如圖2-51所示。圖2-51項(xiàng)目類型選擇在彈出的窗口中,完成以下配置,如圖2-52所示。項(xiàng)目名稱:hadoop-projectJDK:選擇自己Windows上安裝的JDK圖2-52完成相應(yīng)配置然后點(diǎn)擊窗口下方的“Create”,接著會(huì)新建好項(xiàng)目。(3)項(xiàng)目配置①右擊“src”,選擇“New”,點(diǎn)擊“Package”,建一個(gè)包,名為:“com.bigdata”,如圖2-53所示。圖2-53新建包②然后編輯項(xiàng)目結(jié)構(gòu),點(diǎn)擊“File”,點(diǎn)擊“ProjectStructure”按鈕,如圖2-54所示。圖2-54編輯項(xiàng)目結(jié)構(gòu)③點(diǎn)擊“Libraries”,引入編寫(xiě)HDFS程序相關(guān)的jar包依賴。具體操作:點(diǎn)擊“Libraries”→“+”→“Java”,然后找到解壓后的Hadoop安裝包,導(dǎo)入一個(gè)是公共依賴包,如圖2-57所示。圖2-57導(dǎo)入HDFS公共依賴包導(dǎo)入HDFS其他的相關(guān)依賴包,如圖5-58所示。圖2-58導(dǎo)入HDFS相關(guān)依賴包(4)編寫(xiě)HDFS代碼在com.bigdata包里新建一個(gè)WriteFile類,編寫(xiě)WriteFile類代碼,代碼如下:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.IOException;import.URI;publicclassWriteFile{publicstaticvoidmain(String[]args)throwsIOException{Stringcontent="Hello,bigdata!";Stringdest="hdfs://master:8020/test.txt";Configurationconfiguration=newConfiguration();FileSystemfileSystem=FileSystem.get(URI.create(dest),configuration);FSDataOutputStreamout=fileSystem.create(newPath(dest));out.write(content.getBytes("UTF-8"));out.close();}}注意:請(qǐng)按照實(shí)際情況修改master的主機(jī)名!(5)編寫(xiě)HDFS讀操作代碼在com.bigdata包里新建一個(gè)ReadFile類,編寫(xiě)ReadFile類,代碼如下:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.*;import.URI;publicclassReadFile{publicstaticvoidmain(String[]args)throwsIOException{Stringdest="hdfs://master:8020/test.txt";Configurationconfiguration=newConfiguration();FileSystemfileSystem=FileSystem.get(URI.create(dest),configuration);FSDataInputStreamin=fileSystem.open(newPath(dest));BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(in));Stringline=null;while((line=bufferedReader.readLine())!=null){System.out.println(line);}in.close();}}(6)打包代碼到服務(wù)器①點(diǎn)擊“ProjectStructure”→“Artifacts”→“+”→“JAR”→“Frommoduleswithdependencies...”,如圖2-59所示。圖2-59添加JAR②點(diǎn)擊之后會(huì)彈出設(shè)置界面,如圖2-60所示。圖2-60jar包配置因?yàn)槲覀冇袔讉€(gè)main方法,所以我們可以不選擇“MainClass”,直接點(diǎn)擊“OK”即可。③因?yàn)榉?wù)器上已經(jīng)有了相應(yīng)的jar包,所以需要排除掉再打包。點(diǎn)擊“Artifacts”→“hadoop-project:jar”→“OutputLayout”,勾選相應(yīng)的jar包,點(diǎn)擊“-”進(jìn)行移除。如圖2-61所示。圖2-61刪除多余的JAR包然后一直點(diǎn)擊“OK”即可。(7)打包操作①打包之前,有一點(diǎn)需要特別注意,如果你的服務(wù)器上的JDK版本是8,而在Windows的版本為jdk11的話,需要設(shè)置一下打包的項(xiàng)目語(yǔ)言級(jí)別才能兼容。點(diǎn)擊“ProjectStructure”→“Project”,在“LanguageLevel”選擇服務(wù)器上相應(yīng)的語(yǔ)言級(jí)別,JDK8對(duì)應(yīng)的是8級(jí)別,如圖2-62所示。圖2-62選擇對(duì)應(yīng)的語(yǔ)言級(jí)別②點(diǎn)擊菜單欄的“Build”→“BuildArtifacts...”,在彈出的選項(xiàng)中,選擇“Build”即可。如圖2-64所示。圖2-64構(gòu)建jar包④稍等一會(huì),執(zhí)行完后就可以看到out目錄生成了一個(gè)jar包,如圖2-65所示。圖2-65查看生成的jar包(8)上傳服務(wù)器并執(zhí)行①使用MobaXterm工具上傳jar包到master節(jié)點(diǎn)的/root/jars文件夾(沒(méi)有此目錄則新建創(chuàng)建)。如圖2-所示。圖2-查看jar包上傳結(jié)果②啟動(dòng)HDFS(如果啟動(dòng)則無(wú)需進(jìn)行)start-dfs.sh③執(zhí)行jar包(在jar包所在的路徑下,此處路徑為:/root/jars)

先執(zhí)行HDFS的寫(xiě)操作代碼(如HDFS上已有/test.txt文件會(huì)報(bào)錯(cuò),請(qǐng)先刪除或者更換代碼里的文件名):hadoopjarhadoop-project.jarcom.bigdata.WriteFile查看是否寫(xiě)內(nèi)容進(jìn)去,查看結(jié)果如圖2-67所示。hdfsdfs-cat/test.txt圖2-67查看寫(xiě)文件結(jié)果展示執(zhí)行完后發(fā)現(xiàn)已經(jīng)可以查看到有寫(xiě)入了數(shù)據(jù),然后執(zhí)行讀取HDFS數(shù)據(jù)的代碼,讀取結(jié)果如圖6-68所示。hadoopjarhadoop-project.jarcom.bigdata.ReadFile圖2-68執(zhí)行讀文件結(jié)果展示可以看到有結(jié)果輸出。6.實(shí)訓(xùn)總結(jié)本次實(shí)訓(xùn)主要是在IDEA上編寫(xiě)HDFS讀、寫(xiě)操作程序代碼,并打包在集群環(huán)境上執(zhí)行;學(xué)生通過(guò)本次實(shí)訓(xùn)的學(xué)習(xí),可以加深對(duì)HDFS的讀寫(xiě)邏輯以及編程原理的認(rèn)識(shí)。本實(shí)訓(xùn)不用聯(lián)網(wǎng)也可以執(zhí)行HDFS的讀寫(xiě)操作,此外,一樣也可以執(zhí)行Spark、機(jī)器學(xué)習(xí)等案例。本實(shí)訓(xùn)非常關(guān)鍵,因?yàn)榫W(wǎng)絡(luò)不好或者是簡(jiǎn)單的項(xiàng)目,這種傳統(tǒng)的方式也是非常簡(jiǎn)單方便的??傆[整一個(gè)操作流程,下面總結(jié)一下同學(xué)們?cè)诓僮鬟^(guò)程中比較容易遇到的錯(cuò)誤:同學(xué)們可能分不清Windows、Client、服務(wù)器、HDFS集群的相關(guān)概念,此處做一個(gè)簡(jiǎn)單的說(shuō)明以便同學(xué)們理解,后面還會(huì)遇到很多相關(guān)的概念,所以務(wù)必要理清思路。Windows:指的是你的個(gè)人電腦或者學(xué)校里的實(shí)訓(xùn)室的電腦,是提供給你學(xué)習(xí)的,此電腦上應(yīng)該安裝好了JDK,而且也應(yīng)該先安裝好代碼編輯工具,本次實(shí)訓(xùn)使用的編輯工具是IDEA。如果是使用Eclipse或者其他編輯工具,也是可以的。服務(wù)器:服務(wù)器在工作上一般指的是物理服務(wù)器或者云服務(wù)器。因?yàn)樵趯W(xué)習(xí)的時(shí)候,如果使用此類服務(wù)器,需要投入的資金成本會(huì)很高,所以學(xué)習(xí)的時(shí)候,可以選擇其他服務(wù)器。比如說(shuō)在個(gè)人電腦上安裝多臺(tái)虛擬機(jī),通過(guò)VMWare等軟件,安裝好一臺(tái)虛擬機(jī),然后復(fù)制多兩臺(tái)或者更多臺(tái)出來(lái),那這些虛擬機(jī)就是所說(shuō)的服務(wù)器,也可以稱之為節(jié)點(diǎn)或者機(jī)器。如果是使用大數(shù)據(jù)學(xué)習(xí)平臺(tái)的話,平臺(tái)會(huì)默認(rèn)分發(fā)三臺(tái)服務(wù)器給每位學(xué)生。HDFS集群:指的是安裝在服務(wù)器上的軟件。在三臺(tái)服務(wù)器上都安裝了Centos操作系統(tǒng),然后在系統(tǒng)之上,又部署好了HDFS,組成了一個(gè)集群。類似于三臺(tái)電腦,都安裝了Windows系統(tǒng),然后又在此三臺(tái)電腦上又安裝上了通訊軟件。Client:此處指的是所提交作業(yè)的那臺(tái)服務(wù)器,本次實(shí)訓(xùn)過(guò)程中,將寫(xiě)好的代碼進(jìn)行打成jar包,然后再上傳到master機(jī)器上,最后執(zhí)行jar包,在哪里執(zhí)行jar包,哪里就充當(dāng)著Client的角色。實(shí)訓(xùn)3.1部署YARN集群1.實(shí)訓(xùn)目的通過(guò)本實(shí)訓(xùn)熟悉如何構(gòu)建YARN分布式集群,并能夠使用YARN集群提交一些簡(jiǎn)單的任務(wù),理解YARN在Hadoop生態(tài)中的作用與意義。2.實(shí)訓(xùn)內(nèi)容構(gòu)建YARN集群,并使用YARN集群提交簡(jiǎn)單的任務(wù),觀察任務(wù)提交之后YARN的執(zhí)行過(guò)程。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(shí)需要有計(jì)算機(jī)基礎(chǔ)及Linux基礎(chǔ)能力,可參考教材后面的Linux附件資料。5.實(shí)訓(xùn)步驟(1)在master機(jī)器上進(jìn)行YARN配置①編輯YARN的配置文件修改文件為“/opt/software/hadoop-3.3.4/etc/hadoop/yarn-site.xml”在master節(jié)點(diǎn)執(zhí)行:cd/opt/software/hadoop-3.3.4/etc/hadoopvimyarn-site.xml將如下內(nèi)容添加到最后兩行的<configuration></configuration>標(biāo)簽之間: <property><name>yarn.resourcemanager.hostname</name><value>master</value><description>表示ResourceManager服務(wù)器</description></property><property><name>yarn.resourcemanager.address</name><value>master:8032</value><description>表示ResourceManager監(jiān)聽(tīng)的端口</description></property><property><name>yarn.nodemanager.local-dirs</name><value>/opt/software/hadoop-3.3.4/yarn/local-dir1,/opt/software/hadoop-3.3.4/yarn/local-dir2</value><description>表示NodeManager中間數(shù)據(jù)存放的地方</description></property><property><name>yarn.nodemanager.resource.memory-mb</name><value>1024</value><description>表示這個(gè)NodeManager管理的內(nèi)存大小</description></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value><description>表示這個(gè)NodeManager管理的cpu個(gè)數(shù)</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>為MapReduce應(yīng)用打開(kāi)shuffle服務(wù)</description></property><property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>4</value><description>配置虛擬內(nèi)存與物理內(nèi)存比例,默認(rèn)值是2.1</description></property>yarn-site.xml是YARN守護(hù)進(jìn)程的配置文件,將虛擬內(nèi)存與物理內(nèi)存的比例調(diào)整成4倍,避免執(zhí)行任務(wù)時(shí)報(bào)錯(cuò)。②拷貝配置文件到slave1、slave2~/shell/scp_call.shyarn-site.xml(2)啟動(dòng)HDFS和YARN在master節(jié)點(diǎn)執(zhí)行(如已啟動(dòng)則無(wú)需啟動(dòng))。操作效果如圖2-所示。start-dfs.shstart-yarn.sh圖3-4啟動(dòng)HDFS和YARN圖示(3)驗(yàn)證YARN啟動(dòng)成功查看各節(jié)點(diǎn)的進(jìn)程情況圖3-4查看各節(jié)點(diǎn)的進(jìn)程(4)查看YARN的WebUI界面在瀏覽器中打開(kāi)master的ip地址加端口:31:8088格式:master的ip:8088。如圖2-46所示。圖3-4查看YARN的WebUI界面(5)提交MapReduce任務(wù)①編輯MapReduce配置文件修改文件為“/opt/software/hadoop-3.3.4/etc/hadoop/mapred-site.xml”在master節(jié)點(diǎn)執(zhí)行:vimmapred-site.xml編輯此文件,在此文件的configuration標(biāo)簽間中加入以下內(nèi)容:<property><name></name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property><property><name>yarn.app.mapreduce.am.resource.mb</name><value>1024</value></property><property><name>yarn.app.mapreduce.am.resource.cpu-vcores</name><value>1</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property>此配置指定了MapReduce作業(yè)運(yùn)行在YARN上,同時(shí)對(duì)JobHistoryserver進(jìn)行配置,方便查看相關(guān)日志;MapReduce作業(yè)需要的內(nèi)存和虛擬cpu數(shù);并且配置了MapReduce作業(yè)相關(guān)的環(huán)境變量。②拷貝配置文件到slave1、slave2~/shell/scp_call.shmapred-site.xml③提交MapReduce任務(wù)接下來(lái)提交Hadoop內(nèi)置的估算π值的任務(wù)。在master節(jié)點(diǎn)執(zhí)行:hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jarpi510命令最后兩個(gè)兩個(gè)參數(shù)的含義:第一個(gè)參數(shù)是指要運(yùn)行map的次數(shù),這里是5次;第二個(gè)參數(shù)是指每個(gè)map任務(wù),取樣的個(gè)數(shù);而兩數(shù)相乘即為總的取樣數(shù)。執(zhí)行過(guò)程如圖3-5所示。圖3-5提交PI任務(wù)過(guò)程(6)實(shí)訓(xùn)結(jié)果①提交PI任務(wù)之后WebUI界面上看到的信息。如圖3-6、圖3-7所示。圖3-6提交PIMR任務(wù)圖3-7計(jì)算結(jié)果6.實(shí)訓(xùn)總結(jié)通過(guò)本實(shí)訓(xùn)構(gòu)建YARN集群,并且使用YARN集群提交任務(wù),觀察結(jié)果;使學(xué)生了解YARN框架,以及YARN運(yùn)行流程,理解YARN作為Hadoop生態(tài)中的資源管理器的意義。大家在實(shí)訓(xùn)結(jié)束后,應(yīng)自行查閱資料了解YARN的相關(guān)配置含義,并且熟悉WebUI界面的組成與作用。實(shí)訓(xùn)3.2單詞計(jì)數(shù)1.實(shí)訓(xùn)目的基于MapReduce編程思想,編寫(xiě)WordCount程序。2.實(shí)訓(xùn)內(nèi)容理解MapReduce編程思想,掌握編寫(xiě)MapReduce版本W(wǎng)ordCount,了解該程序的執(zhí)行流程,結(jié)合執(zhí)行過(guò)程與結(jié)果,理解MapReduce的原理。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。小組成員需要具備HDFS分布式存儲(chǔ)基礎(chǔ)相關(guān)知識(shí),并確保具備前面的實(shí)訓(xùn)環(huán)境。4.準(zhǔn)備知識(shí)(1)MapReduce編程編寫(xiě)在Hadoop中依賴YARN框架執(zhí)行的MapReduce程序,大部分情況下只需要編寫(xiě)相應(yīng)的Map處理和Reduce處理過(guò)程的業(yè)務(wù)程序即可,因?yàn)榇蟛糠值拇a,Hadoop已經(jīng)幫我們寫(xiě)好了。所以編寫(xiě)一個(gè)MapReduce程序并不復(fù)雜,關(guān)鍵點(diǎn)在于掌握分布式的編程思想和方法,主要將計(jì)算過(guò)程分為以下五個(gè)步驟:①迭代。遍歷輸入數(shù)據(jù),并將之解析成<Key,Value>鍵值對(duì)。②將輸入的<Key,Value>鍵值對(duì)映射(map)成新的<Key,Value>鍵值對(duì)。③依據(jù)Key對(duì)中間數(shù)據(jù)進(jìn)行分組。④以組為單位對(duì)數(shù)據(jù)進(jìn)行Reduce。⑤迭代。將最終產(chǎn)生的<Key,Value>鍵值對(duì)保存到輸出文件中。(2)JavaAPI解析①InputFormat:用于描述輸入數(shù)據(jù)的格式,常用為T(mén)extInputFormat,其提供如下兩個(gè)功能:數(shù)據(jù)切分:按照某種策略將輸入數(shù)據(jù)切分成若干個(gè)數(shù)據(jù)塊,以便確定MapTask個(gè)數(shù)以及對(duì)應(yīng)的數(shù)據(jù)分片。為Map任務(wù)提供數(shù)據(jù):給定某個(gè)數(shù)據(jù)分片,能將其解析成一個(gè)個(gè)的<Key,Value>鍵值對(duì)。②OutputFormat:用于描述輸出數(shù)據(jù)的格式,它能夠?qū)⒂脩籼峁┑?lt;Key,Value>鍵值對(duì)寫(xiě)入特定格式的文件中。③Mapper/Reducer:封裝了應(yīng)用程序的數(shù)據(jù)處理邏輯。④Writable:Hadoop自定義的序列化接口,實(shí)現(xiàn)該類的接口可以用作MapReduce過(guò)程中的Value數(shù)據(jù)使用。⑤WritableComparable:在Writable基礎(chǔ)上繼承了Comparable接口,實(shí)現(xiàn)該類的接口可以用作MapReduce過(guò)程中的Key數(shù)據(jù)使用。因?yàn)镵ey包含了比較和排序的操作。5.實(shí)訓(xùn)步驟本實(shí)訓(xùn)包含四大步驟:準(zhǔn)備運(yùn)行環(huán)境、準(zhǔn)備統(tǒng)計(jì)數(shù)據(jù)、編寫(xiě)MapReduce程序、打包并運(yùn)行代碼。查看運(yùn)行結(jié)果這幾個(gè)步驟,詳細(xì)如下:(1)準(zhǔn)備運(yùn)行環(huán)境啟動(dòng)三臺(tái)節(jié)點(diǎn),然后在master中啟動(dòng)HDFS和YARN:start-dfs.shstart-yarn.sh(2)準(zhǔn)備統(tǒng)計(jì)數(shù)據(jù)新建待統(tǒng)計(jì)文件word.txt,并上傳數(shù)據(jù)到HDFS上vim/root/datas/word.txt內(nèi)容如下:hellohdfshadoophivehellomapreducehellosparksparkaibigdata將word.txt文件上傳到HDFS集群hdfsdfs-put/root/datas/word.txt/查看是否上傳成功,如圖3-所示則表示上傳成功。圖3-查看上傳結(jié)果(3)引入編寫(xiě)MapReduce程序相關(guān)的jar包本次實(shí)訓(xùn)繼續(xù)使用實(shí)訓(xùn)2.3的環(huán)境,但編寫(xiě)MapReduce程序需要引入相關(guān)的jar包,此時(shí)繼續(xù)引入hadoop-mapreduce-client-core.jar包。如圖3-所示。圖3-導(dǎo)入MapReduce依賴包(4)編寫(xiě)MapReduce程序編寫(xiě)MapReduce程序主要是編寫(xiě)Map類和Reduce類,其中Map過(guò)程需要繼承org.apache.hadoop.mapreduce包中Mapper類,并重寫(xiě)其map方法;Reduce過(guò)程需要繼承org.apache.hadoop.mapreduce包中Reducer類,并重寫(xiě)其reduce方法。在com.bigdata包(沒(méi)有則新建)下新建WordCount類,添加以下代碼:packagecom.bigdata;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;importorg.apache.hadoop.mapreduce.lib.partition.HashPartitioner;importjava.io.IOException;importjava.util.StringTokenizer;publicclassWordCount{publicstaticclassTokenizerMapperextendsMapper<Object,Text,Text,IntWritable>{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();//map方法,劃分一行文本,讀一個(gè)單詞寫(xiě)出一個(gè)<單詞,1>publicvoidmap(ObjectKey,Textvalue,Contextcontext)throwsIOException,InterruptedException{StringTokenizeritr=newStringTokenizer(value.toString());while(itr.hasMoreTokens()){word.set(itr.nextToken());context.write(word,one);//寫(xiě)出<單詞,1>}}}//定義reduce類,對(duì)相同的單詞,把它們<K,VList>中的VList值全部相加publicstaticclassIntSumReducerextendsReducer<Text,IntWritable,Text,IntWritable>{privateIntWritableresult=newIntWritable();publicvoidreduce(TextKey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException{intsum=0;for(IntWritableval:values){sum+=val.get();//相當(dāng)于<Hello,1><Hello,1>,將兩個(gè)1相加}result.set(sum);context.write(Key,result);//寫(xiě)出這個(gè)單詞,和這個(gè)單詞出現(xiàn)次數(shù)<單詞,單詞出現(xiàn)次數(shù)>}} publicstaticvoidmain(String[]args)throwsException{//主方法,函數(shù)入口 //TODOAuto-generatedmethodstub Configurationconf=newConfiguration();//實(shí)例化配置文件類Jobjob=newJob(conf,"WordCount");//實(shí)例化Job類job.setInputFormatClass(TextInputFormat.class);//指定使用默認(rèn)輸入格式類TextInputFormat.setInputPaths(job,args[0]);//設(shè)置待處理文件的位置job.setJarByClass(WordCount.class);//設(shè)置主類名job.setMapperClass(TokenizerMapper.class);//指定使用上述自定義Map類job.setCombinerClass(IntSumReducer.class);//指定開(kāi)啟Combiner函數(shù)job.setMapOutputKeyClass(Text.class);//指定Map類輸出的<K,V>,K類型job.setMapOutputValueClass(IntWritable.class);//指定Map類輸出的<K,V>,V類型job.setPartitionerClass(HashPartitioner.class);//指定使用默認(rèn)的HashPartitioner類job.setReducerClass(IntSumReducer.class);//指定使用上述自定義Reduce類job.setNumReduceTasks(Integer.parseInt(args[2]));//指定Reduce個(gè)數(shù)job.setOutputKeyClass(Text.class);//指定Reduce類輸出的<K,V>,K類型job.setOutputValueClass(Text.class);//指定Reduce類輸出的<K,V>,V類型job.setOutputFormatClass(TextOutputFormat.class);//指定使用默認(rèn)輸出格式類TextOutputFormat.setOutputPath(job,newPath(args[1]));//設(shè)置輸出結(jié)果文件位置System.exit(job.waitForCompletion(true)?0:1);//提交任務(wù)并監(jiān)控任務(wù)狀態(tài) }}(5)打包并運(yùn)行代碼打包后的文件名為hadoop-project.jar,上傳到master節(jié)點(diǎn)的/root/jars目錄。主類WordCount位于包c(diǎn)om.bigdata下,則可使用如下命令向YARN集群提交本應(yīng)用。yarnjarhadoop-project.jarcom.bigdata.WordCount/word.txt/wc_output1其中“yarn”為命令,“jar”為命令參數(shù),后面緊跟打包后的代碼地址,“com.bigdata”為包名,“WordCount”為主類名,第一個(gè)參數(shù)“/word.txt”為輸入文件在HDFS中的位置,第二個(gè)參數(shù)“/wc_output”為輸出文件在HDFS中的位置,第三個(gè)參數(shù)“1”表示需要統(tǒng)計(jì)成Reduce文件的個(gè)數(shù)。注意:“/word.txt”、“/wc_output”、“1”之間都有一個(gè)空格。同時(shí)需要啟動(dòng)HDFS和YARN。(6)實(shí)訓(xùn)結(jié)果程序運(yùn)行成功控制臺(tái)上的顯示內(nèi)容如圖3-15、圖3-16所示。圖3-15向YARN集群提交應(yīng)用圖3-16程序運(yùn)行結(jié)果在HDFS上查看結(jié)果,如圖3-17、圖3-18所示。hdfsdfs-ls/wc_output圖3-17查看/wc_output目錄下的目錄和文件hdfsdfs-cat/wc_output/part-r-00000圖3-18HDFS上顯示結(jié)果6.實(shí)訓(xùn)總結(jié)實(shí)訓(xùn)基于MapReduce編程思想,編寫(xiě)MRJava版本的WordCount程序,并且在集群上執(zhí)行;通過(guò)分析執(zhí)行過(guò)程,對(duì)MapReduce編程思想、JavaAPI調(diào)用有所認(rèn)知和學(xué)習(xí)。本實(shí)訓(xùn)需要注意的地方有下面三點(diǎn):(1)本實(shí)訓(xùn)是進(jìn)行分布式計(jì)算,統(tǒng)計(jì)的是HDFS集群上的數(shù)據(jù),所以應(yīng)該先安裝好HDFS集群,然后再將數(shù)據(jù)放到HDFS上。(2)使用的計(jì)算引擎為MapReduce,資源調(diào)度框架為YARN,所以均需要配置好,如有遺忘,請(qǐng)翻閱上次實(shí)訓(xùn)任務(wù)。(3)執(zhí)行作業(yè)的時(shí)候,請(qǐng)注意查看源碼,需要傳入的是多少個(gè)參數(shù),不要漏參數(shù)。此外,自己可以嘗試一下故意少寫(xiě)一個(gè)參數(shù),然后查看報(bào)錯(cuò)信息和日志,學(xué)會(huì)去分析錯(cuò)誤,然后解決錯(cuò)誤。實(shí)訓(xùn)4.1HBase安裝與配置1.實(shí)訓(xùn)目的通過(guò)本實(shí)訓(xùn)任務(wù),理解Zookeeper的概念、掌握Z(yǔ)ookeeper完全分布式環(huán)境搭建、認(rèn)識(shí)HBase的基本架構(gòu)、理解HBase的原理、完成HBase的安裝與部署。2.實(shí)訓(xùn)內(nèi)容安裝和配置Zookeeper,學(xué)會(huì)分布式Zookeeper的安裝;安裝HBase,配置部署HBase,WebUI查看HBase。3.實(shí)訓(xùn)要求以小組為單元進(jìn)行實(shí)訓(xùn),每小組5人,小組自協(xié)商選一位組長(zhǎng),由組長(zhǎng)安排和分配實(shí)訓(xùn)任務(wù),具體參考實(shí)訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(shí)(1)Zookeeper的使用場(chǎng)景①HA機(jī)制(高可用機(jī)制)適合于HDFS、HBase等的HA,如在前面HBase的master、backup_master,兩臺(tái)節(jié)點(diǎn)都去ZK里面創(chuàng)建持久節(jié)點(diǎn),當(dāng)一個(gè)節(jié)點(diǎn)創(chuàng)建成功,另外一個(gè)就會(huì)創(chuàng)建失敗。另外一種是創(chuàng)建臨時(shí)順序節(jié)點(diǎn),比如說(shuō)第一個(gè)連接的叫znode1、第二個(gè)連接的就會(huì)叫znode2、第三個(gè)連接的就會(huì)叫znode3,連接的節(jié)點(diǎn)會(huì)按照名詞排序,此時(shí)我們定義節(jié)點(diǎn)最小的為master,當(dāng)如果節(jié)點(diǎn)最小的節(jié)點(diǎn)(znode1)宕機(jī),則znode2就是最小,此時(shí),這個(gè)znode2所連接的服務(wù)器就切換成master角色了。②配置文件同步分布式系統(tǒng)中會(huì)有很多臺(tái)服務(wù)器,服務(wù)器的配置文件要一直,如果其中某個(gè)配置發(fā)生了變化,那么每一臺(tái)也應(yīng)該改一樣,操作起來(lái)十分繁瑣,此時(shí)我們可以使用Zookeeper來(lái)同步配置。利用Zookeeper監(jiān)控此配置文件,如果發(fā)生了變化,則執(zhí)行另外的同步配置的代碼即可。③分布式鎖使用Zookeeper可以解決分布式環(huán)境下多個(gè)程序?qū)σ粋€(gè)共享資源的競(jìng)爭(zhēng)的關(guān)系,防止同一資源在同一時(shí)刻被多個(gè)程序更改,實(shí)現(xiàn)過(guò)程一樣可以使用與HA相類似的操作。(2)HBase HBase的數(shù)據(jù)模型如表4-4所示。表4-4HBase的數(shù)據(jù)模型RowKeyTimeStampCF1CF2CF3“RK000001”T1CF2:q1=val3CF3:q2=val2T2CF1:q3=val4T3CF2:q4=val5(3)RowKey與其它Nosql數(shù)據(jù)庫(kù)一樣,RowKey是用來(lái)檢索記錄的主鍵。訪問(wèn)HBasetable中的行,只有3種方式:①通過(guò)單個(gè)RowKey訪問(wèn)②通過(guò)RowKey的range③全表掃描RowKey行鍵(RowKey)可以是任意字符串(最大長(zhǎng)度是64KB,實(shí)際應(yīng)用中長(zhǎng)度一般為10-100bytes),在HBase內(nèi)部,RowKey保存為字節(jié)數(shù)組。存儲(chǔ)時(shí),數(shù)據(jù)按照RowKey的字典序(byteorder)排序存儲(chǔ)。設(shè)計(jì)Key時(shí),要充分排序存儲(chǔ)這個(gè)特性,將經(jīng)常一起讀取的行存儲(chǔ)放到一起。注意:字典序?qū)nt排序的結(jié)果是: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作左填充。行的一次讀寫(xiě)是原子操作(不論一次讀寫(xiě)多少列)。這個(gè)設(shè)計(jì)決策能夠使用戶很容易的理解程序在對(duì)同一個(gè)行進(jìn)行并發(fā)更新操作時(shí)的行為。(4)列族HBase表中的每個(gè)列,都?xì)w屬與某個(gè)列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如”courses:history”,”courses:math”都屬于”courses”這個(gè)列族。訪問(wèn)控制、磁盤(pán)和內(nèi)存的使用統(tǒng)計(jì)都是在列族層面進(jìn)行的。實(shí)際應(yīng)用中,列族上的控制權(quán)限能幫助我們管理不同類型的應(yīng)用:我們?cè)试S一些應(yīng)用可以添加新的基本數(shù)據(jù)、一些應(yīng)用可以讀取基本數(shù)據(jù)并創(chuàng)建繼承的列族、一些應(yīng)用則只允許瀏覽數(shù)據(jù)(甚至可能因?yàn)殡[私的原因不能瀏覽所有數(shù)據(jù))。(5)時(shí)間戳HBase中通過(guò)row和columns確定的為一個(gè)存貯單元稱為cell。每個(gè)cell都保存著同一份數(shù)據(jù)的多個(gè)版本。版本通過(guò)時(shí)間戳來(lái)索引。時(shí)間戳的類型是64位整型。時(shí)間戳可以由HBase(在數(shù)據(jù)寫(xiě)入時(shí)自動(dòng))賦值,此時(shí)時(shí)間戳是精確到毫秒的當(dāng)前系統(tǒng)時(shí)間。時(shí)間戳也可以由客戶顯式賦值。如果應(yīng)用程序要避免數(shù)據(jù)版本沖突,就必須自己生成具有唯一性的時(shí)間戳。每個(gè)cell中,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,即最新的數(shù)據(jù)排

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論