版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實訓(xùn)2.1基礎(chǔ)實訓(xùn)環(huán)境準(zhǔn)備1.實訓(xùn)目的通過本實訓(xùn)對大數(shù)據(jù)實訓(xùn)環(huán)境配置做一個前期準(zhǔn)備操作,了解各個節(jié)點之間的基礎(chǔ)通信原理。2.實訓(xùn)內(nèi)容該實訓(xùn)主要針對集群配置做前期的域名映射、SSH免密登陸工作,對SSH安全通信協(xié)議以及通信方式有所了解,對大數(shù)據(jù)服務(wù)組件之間安全通信有所了解。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參加實訓(xùn)內(nèi)容中的實訓(xùn)過程。4.準(zhǔn)備知識本實訓(xùn)任務(wù)可以配套大數(shù)據(jù)實訓(xùn)平臺,由平臺分發(fā)三臺裸機(jī)服務(wù)器。如果沒有使用大數(shù)據(jù)實訓(xùn)平臺,則首先需要先你的電腦上安裝好VMware或者VirtualBox等相類似的軟件,然后裝一臺Centos7虛擬機(jī),然后克隆三臺出來,并配置好ip地址,可自行查閱相關(guān)資料,或者查看本書后面的附錄頁。同學(xué)們需要提前學(xué)習(xí)一些簡單的Linux基礎(chǔ)知識、網(wǎng)絡(luò)基礎(chǔ)知識、云計算基礎(chǔ)知識,如果是學(xué)會配置虛擬機(jī)之間的網(wǎng)絡(luò)等等,如基礎(chǔ)比較薄弱,可以在老師的指導(dǎo)下進(jìn)行學(xué)習(xí)。由于涉及面比較廣,建議同學(xué)之間加多交流,打下良好基礎(chǔ),為后面的學(xué)習(xí)做準(zhǔn)備。5.實訓(xùn)步驟(1)搭建集群服務(wù)器老師按照平臺操作手冊,分發(fā)給學(xué)生初始裸機(jī)環(huán)境。一共是三臺服務(wù)器,一臺是主節(jié)點,兩臺是從節(jié)點。角色、ip地址、用戶名、密碼等信息初始化情況如圖2-3所示。角色ip地址cpu內(nèi)存用戶名密碼master312核1.5groothadoopslave1322核1groothadoopslave2332核1groothadoop圖2-3所提供的服務(wù)器基本情況(2)MobaXterm的使用如果想要操作服務(wù)器,一般都會使用第三方工具進(jìn)行連接操作,第三方工具如MobaXterm、XShell、SecureCRT等等,工具的使用大同小異,此處使用目前比較主流的MobaXterm,由于MobaXterm具有綠色版本,所以不需要安裝,直接雙擊即可打開使用頁面,如圖所示2-4所示。圖2-4MobaXterm軟件首頁(3)新建會話①點擊頁面中部的“Newsession”即可打開新建回話頁面,此時默認(rèn)選擇是“SSH”類型,不需要選擇,直接輸入遠(yuǎn)程主機(jī)的ip地址(此時輸入master的ip地址),然后勾選“指定用戶名”,輸入用戶名(此時為root用戶),其余保持默認(rèn)不變,如圖2-5所示。圖2-5設(shè)置會話接著,點擊窗口下方的“OK”按鈕。此時會提示輸入root用戶密碼,如圖2-6所示。圖2-6提示輸入密碼輸入密碼后,會提示是否保存密碼,點擊“Yes”,如圖2-7所示。圖2-7保存密碼此后即可連接上master服務(wù)器,如圖2-8所示。圖2-8連接上服務(wù)器頁面點擊左上角菜單欄的“終端”,選擇“打開新標(biāo)簽”,跟上面一樣的操作連接上slave1和slave2節(jié)點,如下圖2-17所示。圖2-17各節(jié)點均需連接上連接好后,可以右擊會話,將會話名稱分別改為master、slave1、slave2,以方便辨識。修改master主機(jī)名(如果主機(jī)名已經(jīng)修改好,可忽略此操作)命令格式:hostnamectlset-hostname主機(jī)名hostnamectlset-hostnamemaster
bash結(jié)果如圖所示:圖2-17修改主機(jī)名slave1、slave2的主機(jī)名也分別修改好。添加域名映射①先安裝好加強(qiáng)版vi編輯器,使編輯頁面更加美觀在三臺節(jié)點上執(zhí)行:yuminstall-yvim提示以下頁面則表示安裝成功,如圖2-所示:②使用vim命令編輯/etc/hosts文件在三臺節(jié)點上執(zhí)行:vim/etc/hosts然后添加三臺主機(jī)ip地址和主機(jī)名映射關(guān)系,內(nèi)容為:31master32slave133slave2如圖2-18所示。圖2-18配置域名映射配置好之后可以通過主機(jī)名來代替ip進(jìn)行一系列的操作。③保存退出后,使用cat命令查看配置的文件是否配置好:cat/etc/hosts如果查看到/etc/hosts文件里面有映射關(guān)系,則表示配置好了。如下圖2-19所示。圖2-19校驗域名映射④同理,在slave1、slave2上也要配置好域名映射,域名映射的內(nèi)容是一樣的。(5)配置三臺服務(wù)器的SSH免密碼登錄①生成服務(wù)器的密鑰。在master上執(zhí)行:ssh-keygen②輸入之后連續(xù)按三次回車,則可以生成服務(wù)器的密鑰,如圖2-20所示。圖2-20生成服務(wù)器密鑰③在slave1、slave2上也要執(zhí)行上面兩步來生成密鑰。(6)配置公鑰到authorized_keys文件(slave1、slave2節(jié)點)①將master的公鑰id_rsa.pub寫入到authorized_keys文件。在master上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keysls執(zhí)行結(jié)果如圖2-21所示。圖2-21寫入公鑰到authorized_keys文件②將slave1的公鑰id_rsa.pub寫入到authorized_keys1文件,此處是authorized_keys1文件,因為等下要拷貝到master節(jié)點,所要需要做一下區(qū)分,使用其他文件名也可以。在slave1上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keys1執(zhí)行結(jié)果如圖2-22所示。圖2-22寫入公鑰到authorized_keys1文件③將slave2的公鑰id_rsa.pub寫入到authorized_keys2文件。在slave1上執(zhí)行:cd~/.sshcatid_rsa.pub>>authorized_keys2執(zhí)行結(jié)果如圖2-23所示。圖2-23寫入公鑰到authorized_keys2文件④將authorized_keys1文件拷貝到master節(jié)點,此處注意ip地址需要修改成自己的master節(jié)點的ip地址,所以也可以使用master節(jié)點的主機(jī)名代替。在slave1上執(zhí)行:scpauthorized_keys1root@master:~/.ssh/執(zhí)行結(jié)果如圖2-24所示。圖2-24拷貝slave1公鑰到master⑤將authorized_keys2文件拷貝到master節(jié)點。在slave2上執(zhí)行:scpauthorized_keys2root@master:~/.ssh/執(zhí)行結(jié)果如圖2-25所示。圖2-25拷貝slave2公鑰到master⑥此時,master上其實已經(jīng)有了slave1和slave2的公鑰。需要對公鑰進(jìn)行整合,然后再分發(fā)到slave1和slave2,這樣才能實現(xiàn)各節(jié)點間能夠進(jìn)行免密碼登錄。 在master上執(zhí)行:catauthorized_keys1>>authorized_keyscatauthorized_keys2>>authorized_keys執(zhí)行步驟如圖2-26所示。圖2-26匯集三臺服務(wù)器的公鑰⑦查看authorized_keys文件是否已經(jīng)有各節(jié)點的公鑰。在master上執(zhí)行:catauthorized_keys執(zhí)行結(jié)果如圖2-27所示。圖2-27查看匯集結(jié)果⑧將master的authorized_keys文件拷貝到slave1、slave2節(jié)點的/root/.ssh/目錄下,以達(dá)到互相可以免密碼訪問的目的。在master上執(zhí)行:scpauthorized_keysroot@slave1:~/.ssh/scpauthorized_keysroot@slave2:~/.ssh/執(zhí)行步驟如圖2-28所示。圖2-28分發(fā)公鑰到slave1、slave2⑨測試免密碼登陸校驗的命令為(ssh后面有一個空格):命令格式:ssh主機(jī)名ssh登錄進(jìn)去后,務(wù)必記得使用exit命令退出再測試其他節(jié)點。可以發(fā)現(xiàn),從master節(jié)點ssh到master、slave1、slave2均不用輸入密碼(如出現(xiàn)需要輸入yes/no,輸入yes即可,下次再重新執(zhí)行就不會再出現(xiàn)),表示免密碼登錄是成功的。校驗結(jié)果如圖2-29所示。圖2-29校驗master是否能夠免密碼登錄slave1和slave2⑩測試slave1和slave2能否免密碼登錄到master,如果沒有問題,也是可以免密碼登錄的,此處不再截圖。6.實訓(xùn)總結(jié)前期的基礎(chǔ)配置準(zhǔn)備工作,為之后的環(huán)境搭建做好充分的準(zhǔn)備。該實訓(xùn)主要通過SSH免密碼登陸配置,使學(xué)生對實操節(jié)點之間的這種SSH通信方式有所感知。本實訓(xùn)課程對于初學(xué)者而言,最難的是沒有接觸過Linux操作,如果接觸過的話上手會很快。其實也可以不使用XShell工具,但是為了剛好地操作,此處使用了遠(yuǎn)端登錄工具,直接在Windows上就可以操作集群,如果沒有使用工具,則應(yīng)該直接進(jìn)去操作集群。免密碼登錄是大數(shù)據(jù)集群的大前提,如果沒有進(jìn)行免密碼,節(jié)點之間是無法進(jìn)行友好通信的,而域名映射,是為了替代ip,方便集群的管理與相關(guān)配置的遷移等等。學(xué)習(xí)的時候,需要理解好實訓(xùn)的目的。每個人的用戶名及ip都會有所不同,本書的用戶名和ip需要特別留意,后期會一直使用,先記住以便不在學(xué)習(xí)中混淆。如果是自己搭建的虛擬機(jī),可以取一個短的名字和設(shè)置一個便于記憶的ip,以便學(xué)習(xí)。最后,總結(jié)一下同學(xué)們在操作過程中比較容易遇到的錯誤:①如果是自己搭建的環(huán)境,可能會沒有scp命令,此時可以自己安裝一下。②需要特別注意的是,生成的公鑰文件其實只有一行內(nèi)容,在實操的時候,不要將authorized_keys里面的內(nèi)容復(fù)制出來,然后再編輯,最好是跟著實訓(xùn)步驟一步一步復(fù)制,否則很容易出錯,比如文件格式發(fā)生改變、會自動換行等。配置好后,每臺服務(wù)器authorized_keys文件里面的內(nèi)容,其實是一樣的。③最后測試是否配置成功時,記得測試完后,需要執(zhí)行exit命令進(jìn)行退出。否則,很可能會影響你后面的操作,比如你在master上用ssh登錄上了其他節(jié)點,忘記退出了,你之后的操作其實是在操作其他節(jié)點的,而你卻沒發(fā)現(xiàn),以為還是在操作master,所以務(wù)必記得使用exit命令。實訓(xùn)2.2HDFS的安裝部署與配置1.實訓(xùn)目的通過本實訓(xùn)理解HDFS的架構(gòu)以及安裝與部署;學(xué)會啟動HDFS集群,懂得上傳文件到HDFS。2.實訓(xùn)內(nèi)容該實訓(xùn)主要是進(jìn)行HDFS集群的相關(guān)操作,包括HDFS的安裝部署和配置,并且懂得查看HDFS的WebUI界面和上傳文件到HDFS。但在部署之前需要安裝好HDFS的運行前提環(huán)境JDK,然后再在master上部署NameNode服務(wù),在slave上部署DataNode服務(wù)。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(1)HDFS內(nèi)容回顧①分布式文件系統(tǒng)分布式文件系統(tǒng)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機(jī)網(wǎng)絡(luò)與節(jié)點相連。該系統(tǒng)架構(gòu)于網(wǎng)絡(luò)之上,勢必會引入網(wǎng)絡(luò)編程的復(fù)雜性,因此分布式文件系統(tǒng)比普通磁盤文件系統(tǒng)更為復(fù)雜。②HDFS架構(gòu)HDFS為大數(shù)據(jù)平臺其它所有組件提供了基本的存儲功能。它具有高容錯、高可靠、可擴(kuò)展、高吞吐率等特征,為大數(shù)據(jù)存儲和處理提供了強(qiáng)大的底層存儲架構(gòu)。HDFS是一個主從結(jié)構(gòu)的分布式文件系統(tǒng),具有分布式存儲的特點,HDFS集群擁有一個NameNode和多個DataNode,NameNode管理文件系統(tǒng)的元數(shù)據(jù),DataNode存儲實際的數(shù)據(jù)。從用戶的角度來看,其與傳統(tǒng)的文件系統(tǒng)類似,可通過目錄路徑對其上的文件執(zhí)行增刪改查操作。由于是分布式存儲,所以HDFS集群除了擁有一個NameNode,還有多個DataNode,NameNode管理著文件系統(tǒng)的元數(shù)據(jù),DataNode存儲實際的數(shù)據(jù)。HDFS開放文件系統(tǒng)的命名空間以便用戶以文件形式存儲數(shù)據(jù),秉承“一次寫入、多次讀取”的原則??蛻舳送ㄟ^NameNode和DataNode的交互訪問文件系統(tǒng),聯(lián)系NameNode以獲取文件的元數(shù)據(jù),而真正的文件I/O操作是直接和DataNode進(jìn)行交互的。(2)HDFS基本命令HDFS的基本命令與Linux的命令非常相似,可以結(jié)合Linux的命名進(jìn)行對比學(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.實訓(xùn)操作(1)安裝包準(zhǔn)備①下載好的JDK和Hadoop的安裝包,可以直接使用MobaXterm工具上傳安裝包到各個節(jié)點。點擊MobaXterm軟件左側(cè)的sftp可以進(jìn)入傳輸文件頁面,點擊下方的“跟隨終端文件夾”可以讓顯示的內(nèi)容跟隨操作的路徑。如圖2-30所示。圖2-30切換到上傳文件頁面②將需要上傳的軟件拖拉到MobaXterm窗口空白處,如圖2-所示。圖2-30上傳JDK與Hadoop安裝包到master等待軟件上傳完后,繼續(xù)往下操作。JDK安裝配置三臺節(jié)點均操作①將JDK移動到指定文件夾放置好,如圖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)境變量(本次實訓(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)前會話生效,如圖2-34所示。source/etc/profile圖2-34使配置環(huán)境生效④校驗是否設(shè)置成功,可以查看到JDK的版本號,如圖2-35所示。java-version注意:三臺節(jié)點均需要安裝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安裝位置,如果不同,請根據(jù)實際情況更改。指定HDFS主節(jié)點編輯文件為“/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集群存儲的副本系數(shù)、Namenode元數(shù)據(jù)和DataNode數(shù)據(jù)的存儲位置、,修改編輯文件: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ù)存儲位置</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/software/hadoop-3.3.4/dfs/data</value><description>DataNode數(shù)據(jù)存儲位置</description> </property> <property> <name>dfs.replication</name> <value>2</value><description>塊存儲的副本系數(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>開啟webhdfs服務(wù)</description></property>指定HDFS從節(jié)點編輯worker文件,路徑為“/opt/software/hadoop-3.3.4/etc/hadoop/workers”文件夾里,將slave節(jié)點的文件名加入此文件中,本實訓(xùn)的slave節(jié)點為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。本實訓(xùn)使用附錄中提供的腳本實現(xiàn)拷貝操作,可以查看后面的附錄內(nèi)容。~/shell/scp_call.sh/opt/software/hadoop-3.3.4/拷貝結(jié)束后,slave1和slave2節(jié)點將會有相應(yīng)的文件目錄。如圖2-、圖2-所示。圖2-39查看slave1節(jié)點文件夾圖2-39查看slave2節(jié)點文件夾(5)啟動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同時,Hadoop3.3.4版本對用戶做了限制,所以還需要添加定義用戶的變量。exportHDFS_NAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=root最終配置結(jié)果如圖2-所示:最后還需要使環(huán)境變量在當(dāng)前會話生效。source/etc/profile為了方便操作,可以拷貝master上的環(huán)境變量文件到slave1、slave2節(jié)點。在master節(jié)點執(zhí)行:~/shell/scp_call.sh/etc/profile拷貝完成后,需要在slave1、slave2節(jié)點上執(zhí)行source操作。②格式化HDFS首次使用HDFS需要先進(jìn)行格式化,可以在/opt/software/hadoop-3.3.4/bin目錄執(zhí)行格式化命令。在master節(jié)點執(zhí)行:hdfsnamenode-format如果沒有發(fā)生意外,則會提示格式化成功,并且NameNode元數(shù)據(jù)的存儲位置是hdfs-site.xml配置文件中指定的位置。如圖2-40所示。圖2-40格式化HDFS成功標(biāo)識③啟動HDFS在master節(jié)點執(zhí)行,如圖2-41所示。start-dfs.sh圖2-41啟動HDFS④通過查看進(jìn)程的方式驗證HDFS啟動成功分別在master、slave1、slave2三臺機(jī)器上執(zhí)行jps命令,查看HDFS服務(wù)是否已經(jīng)啟動。若啟動成功,在master上會看到相應(yīng)的NameNode、SecondaryNameNode進(jìn)程信息。如圖2-42所示。圖2-42查看master進(jìn)程在slave1、slave2上會看到相應(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)腳本請查看附錄的jps_all.sh內(nèi)容。(6)通過Shell指令上傳文件到HDFS①新建一個測試文件在master節(jié)點上執(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頁面在瀏覽器中打開master的ip地址加端口:31:9870格式:master的ip:9870。如圖2-46所示。圖2-46查看WebUI界面點擊WebUI界面上方菜單欄的“Utilities”,選擇“Browsethefilesystem”,可以看到上傳到HDFS集群根路徑的data.txt文件。如圖2-47所示。圖2-47查看HDFS的文件接著,可以按照圖2-所示的步驟,查看具體data.txt的內(nèi)容。具體操作步驟為:先點擊①,會彈出窗口,再點擊②,則會提示③的內(nèi)容。④設(shè)置Windows電腦與三臺節(jié)點的映射關(guān)系為了方便后期操作,可以配置Windows電腦與三臺節(jié)點的映射關(guān)系,以達(dá)到直接通過主機(jī)名和端口號達(dá)到訪問效果。配置文件路徑為:C:\Windows\System32\drivers\etc\hosts修改此文件,將映射關(guān)系添加上:31master32slave133slave2此時在瀏覽器地址欄輸入地址:http://master:9870。則一樣可以訪問NameNode的WebUI頁面。6.實訓(xùn)總結(jié)本實訓(xùn)通過安裝部署HDFS集群以及創(chuàng)建相關(guān)目錄、上傳相關(guān)的數(shù)據(jù)文件到HDFS等操作,對HDFS分布式文件系統(tǒng)的基礎(chǔ)配置及操作有了一定的認(rèn)識??傆[整一個操作流程,下面總結(jié)一下大家在操作過程中比較容易遇到的錯誤:①需要特別注意的是JDK是安裝在三臺服務(wù)器上的。②最后配置好Hadoop的時候,每一臺服務(wù)器上的Hadoop目錄里的內(nèi)容其實是一樣的,因為是從master節(jié)點復(fù)制到另外兩臺slaves上的,所以如果在操作過程中,如果發(fā)現(xiàn)master上的配置文件有配置錯,那么一定要記得將master上的正確文件也同步到slaves節(jié)點上去。③如果在操作的時候,發(fā)現(xiàn)格式化后發(fā)現(xiàn)自己配置錯了,需要重新配置,記得將配置文件core-site.xml里的hadoop.tmp.dir配置項所配置的目錄以及hdfs-site.xml里配置的NameNode元數(shù)據(jù)存儲目錄和DataNode數(shù)據(jù)存儲目錄全部刪除掉,再重新格式化,否則會報錯,如遇其他方法,請自行上網(wǎng)查閱資料了解。實訓(xùn)2.3HDFS的讀寫API操作1.實訓(xùn)目的通過本實訓(xùn)使學(xué)生學(xué)會在本地(Windows環(huán)境)編寫Java代碼,學(xué)會用離線工程編寫HDFS的讀寫操作,并且學(xué)會打包工程上傳到服務(wù)器執(zhí)行。2.實訓(xùn)內(nèi)容該實訓(xùn)需要每位學(xué)生在已搭建HDFS開發(fā)環(huán)境上編寫了HDFS寫、讀程序代碼;并打包項目,在集群環(huán)境上執(zhí)行該程序。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(1)IDEA編輯器介紹IDEA全稱是IntelliJIDEA,是Java語言開發(fā)的集成環(huán)境(也可用于其他語言),IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具之一,特別是在智能代碼助手、代碼自動提示、重構(gòu)、SFTP、FTP、J2EE支持、代碼審查、Ant、JUnit、CVS整合、創(chuàng)新的GUI設(shè)計等方面,發(fā)揮著巨大的作用。IDEA是JetBrains公司的產(chǎn)品,這家公司總部位于捷克共和國的首都布拉格,開發(fā)人員以嚴(yán)謹(jǐn)著稱的東歐程序員為主。IDEA的版本分為商業(yè)版本與開源版本,對比如圖2-50所示。圖2-50IDEA編輯器版本對比(2)Java實現(xiàn)文件讀寫在操作HDFS的讀寫操作之前,我們最好有一點Java基礎(chǔ),比如說Java是怎么實現(xiàn)Java的文件讀寫的。下面列舉幾種Java的讀寫文件方式,供大家自行搜索資料學(xué)習(xí)。方式一:InputStream、OutputStream方式二(緩存字節(jié)流):BufferedInputStream、BufferedOutputStream使用方式與字節(jié)流差不多,但是效率比后者更高(推薦使用)。方式三:InputStreamReader、OutputStreamWriter方式四:BufferedReader、BufferedWriter方式五:Reader、PrintWriter建議使用第二種方式BufferedInputStream、BufferedOutputStream。5.實訓(xùn)步驟(1)前提工作①需要提前安裝好Windows系統(tǒng)上的JDK,本實訓(xùn)教程安裝的版本為:jdk-11.0.6。②需要將Hadoop的安裝包解壓在Windows系統(tǒng)上的某一路徑。③需要安裝好IDEA編輯器,本次實訓(xùn)使用的版本為:ideaIC-2022.2.3。(2)新建Java項目①打開IDEA后,新建一個項目,點擊“NewProject”,如圖2-51所示。圖2-51項目類型選擇在彈出的窗口中,完成以下配置,如圖2-52所示。項目名稱:hadoop-projectJDK:選擇自己Windows上安裝的JDK圖2-52完成相應(yīng)配置然后點擊窗口下方的“Create”,接著會新建好項目。(3)項目配置①右擊“src”,選擇“New”,點擊“Package”,建一個包,名為:“com.bigdata”,如圖2-53所示。圖2-53新建包②然后編輯項目結(jié)構(gòu),點擊“File”,點擊“ProjectStructure”按鈕,如圖2-54所示。圖2-54編輯項目結(jié)構(gòu)③點擊“Libraries”,引入編寫HDFS程序相關(guān)的jar包依賴。具體操作:點擊“Libraries”→“+”→“Java”,然后找到解壓后的Hadoop安裝包,導(dǎo)入一個是公共依賴包,如圖2-57所示。圖2-57導(dǎo)入HDFS公共依賴包導(dǎo)入HDFS其他的相關(guān)依賴包,如圖5-58所示。圖2-58導(dǎo)入HDFS相關(guān)依賴包(4)編寫HDFS代碼在com.bigdata包里新建一個WriteFile類,編寫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();}}注意:請按照實際情況修改master的主機(jī)名?。?)編寫HDFS讀操作代碼在com.bigdata包里新建一個ReadFile類,編寫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ù)器①點擊“ProjectStructure”→“Artifacts”→“+”→“JAR”→“Frommoduleswithdependencies...”,如圖2-59所示。圖2-59添加JAR②點擊之后會彈出設(shè)置界面,如圖2-60所示。圖2-60jar包配置因為我們有幾個main方法,所以我們可以不選擇“MainClass”,直接點擊“OK”即可。③因為服務(wù)器上已經(jīng)有了相應(yīng)的jar包,所以需要排除掉再打包。點擊“Artifacts”→“hadoop-project:jar”→“OutputLayout”,勾選相應(yīng)的jar包,點擊“-”進(jìn)行移除。如圖2-61所示。圖2-61刪除多余的JAR包然后一直點擊“OK”即可。(7)打包操作①打包之前,有一點需要特別注意,如果你的服務(wù)器上的JDK版本是8,而在Windows的版本為jdk11的話,需要設(shè)置一下打包的項目語言級別才能兼容。點擊“ProjectStructure”→“Project”,在“LanguageLevel”選擇服務(wù)器上相應(yīng)的語言級別,JDK8對應(yīng)的是8級別,如圖2-62所示。圖2-62選擇對應(yīng)的語言級別②點擊菜單欄的“Build”→“BuildArtifacts...”,在彈出的選項中,選擇“Build”即可。如圖2-64所示。圖2-64構(gòu)建jar包④稍等一會,執(zhí)行完后就可以看到out目錄生成了一個jar包,如圖2-65所示。圖2-65查看生成的jar包(8)上傳服務(wù)器并執(zhí)行①使用MobaXterm工具上傳jar包到master節(jié)點的/root/jars文件夾(沒有此目錄則新建創(chuàng)建)。如圖2-所示。圖2-查看jar包上傳結(jié)果②啟動HDFS(如果啟動則無需進(jìn)行)start-dfs.sh③執(zhí)行jar包(在jar包所在的路徑下,此處路徑為:/root/jars)
先執(zhí)行HDFS的寫操作代碼(如HDFS上已有/test.txt文件會報錯,請先刪除或者更換代碼里的文件名):hadoopjarhadoop-project.jarcom.bigdata.WriteFile查看是否寫內(nèi)容進(jìn)去,查看結(jié)果如圖2-67所示。hdfsdfs-cat/test.txt圖2-67查看寫文件結(jié)果展示執(zhí)行完后發(fā)現(xiàn)已經(jīng)可以查看到有寫入了數(shù)據(jù),然后執(zhí)行讀取HDFS數(shù)據(jù)的代碼,讀取結(jié)果如圖6-68所示。hadoopjarhadoop-project.jarcom.bigdata.ReadFile圖2-68執(zhí)行讀文件結(jié)果展示可以看到有結(jié)果輸出。6.實訓(xùn)總結(jié)本次實訓(xùn)主要是在IDEA上編寫HDFS讀、寫操作程序代碼,并打包在集群環(huán)境上執(zhí)行;學(xué)生通過本次實訓(xùn)的學(xué)習(xí),可以加深對HDFS的讀寫邏輯以及編程原理的認(rèn)識。本實訓(xùn)不用聯(lián)網(wǎng)也可以執(zhí)行HDFS的讀寫操作,此外,一樣也可以執(zhí)行Spark、機(jī)器學(xué)習(xí)等案例。本實訓(xùn)非常關(guān)鍵,因為網(wǎng)絡(luò)不好或者是簡單的項目,這種傳統(tǒng)的方式也是非常簡單方便的??傆[整一個操作流程,下面總結(jié)一下同學(xué)們在操作過程中比較容易遇到的錯誤:同學(xué)們可能分不清Windows、Client、服務(wù)器、HDFS集群的相關(guān)概念,此處做一個簡單的說明以便同學(xué)們理解,后面還會遇到很多相關(guān)的概念,所以務(wù)必要理清思路。Windows:指的是你的個人電腦或者學(xué)校里的實訓(xùn)室的電腦,是提供給你學(xué)習(xí)的,此電腦上應(yīng)該安裝好了JDK,而且也應(yīng)該先安裝好代碼編輯工具,本次實訓(xùn)使用的編輯工具是IDEA。如果是使用Eclipse或者其他編輯工具,也是可以的。服務(wù)器:服務(wù)器在工作上一般指的是物理服務(wù)器或者云服務(wù)器。因為在學(xué)習(xí)的時候,如果使用此類服務(wù)器,需要投入的資金成本會很高,所以學(xué)習(xí)的時候,可以選擇其他服務(wù)器。比如說在個人電腦上安裝多臺虛擬機(jī),通過VMWare等軟件,安裝好一臺虛擬機(jī),然后復(fù)制多兩臺或者更多臺出來,那這些虛擬機(jī)就是所說的服務(wù)器,也可以稱之為節(jié)點或者機(jī)器。如果是使用大數(shù)據(jù)學(xué)習(xí)平臺的話,平臺會默認(rèn)分發(fā)三臺服務(wù)器給每位學(xué)生。HDFS集群:指的是安裝在服務(wù)器上的軟件。在三臺服務(wù)器上都安裝了Centos操作系統(tǒng),然后在系統(tǒng)之上,又部署好了HDFS,組成了一個集群。類似于三臺電腦,都安裝了Windows系統(tǒng),然后又在此三臺電腦上又安裝上了通訊軟件。Client:此處指的是所提交作業(yè)的那臺服務(wù)器,本次實訓(xùn)過程中,將寫好的代碼進(jìn)行打成jar包,然后再上傳到master機(jī)器上,最后執(zhí)行jar包,在哪里執(zhí)行jar包,哪里就充當(dāng)著Client的角色。實訓(xùn)3.1部署YARN集群1.實訓(xùn)目的通過本實訓(xùn)熟悉如何構(gòu)建YARN分布式集群,并能夠使用YARN集群提交一些簡單的任務(wù),理解YARN在Hadoop生態(tài)中的作用與意義。2.實訓(xùn)內(nèi)容構(gòu)建YARN集群,并使用YARN集群提交簡單的任務(wù),觀察任務(wù)提交之后YARN的執(zhí)行過程。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識需要有計算機(jī)基礎(chǔ)及Linux基礎(chǔ)能力,可參考教材后面的Linux附件資料。5.實訓(xùn)步驟(1)在master機(jī)器上進(jìn)行YARN配置①編輯YARN的配置文件修改文件為“/opt/software/hadoop-3.3.4/etc/hadoop/yarn-site.xml”在master節(jié)點執(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)聽的端口</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>表示這個NodeManager管理的內(nèi)存大小</description></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value><description>表示這個NodeManager管理的cpu個數(shù)</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>為MapReduce應(yīng)用打開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ù)時報錯。②拷貝配置文件到slave1、slave2~/shell/scp_call.shyarn-site.xml(2)啟動HDFS和YARN在master節(jié)點執(zhí)行(如已啟動則無需啟動)。操作效果如圖2-所示。start-dfs.shstart-yarn.sh圖3-4啟動HDFS和YARN圖示(3)驗證YARN啟動成功查看各節(jié)點的進(jìn)程情況圖3-4查看各節(jié)點的進(jìn)程(4)查看YARN的WebUI界面在瀏覽器中打開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é)點執(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è)運行在YARN上,同時對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ù)接下來提交Hadoop內(nèi)置的估算π值的任務(wù)。在master節(jié)點執(zhí)行:hadoopjar$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jarpi510命令最后兩個兩個參數(shù)的含義:第一個參數(shù)是指要運行map的次數(shù),這里是5次;第二個參數(shù)是指每個map任務(wù),取樣的個數(shù);而兩數(shù)相乘即為總的取樣數(shù)。執(zhí)行過程如圖3-5所示。圖3-5提交PI任務(wù)過程(6)實訓(xùn)結(jié)果①提交PI任務(wù)之后WebUI界面上看到的信息。如圖3-6、圖3-7所示。圖3-6提交PIMR任務(wù)圖3-7計算結(jié)果6.實訓(xùn)總結(jié)通過本實訓(xùn)構(gòu)建YARN集群,并且使用YARN集群提交任務(wù),觀察結(jié)果;使學(xué)生了解YARN框架,以及YARN運行流程,理解YARN作為Hadoop生態(tài)中的資源管理器的意義。大家在實訓(xùn)結(jié)束后,應(yīng)自行查閱資料了解YARN的相關(guān)配置含義,并且熟悉WebUI界面的組成與作用。實訓(xùn)3.2單詞計數(shù)1.實訓(xùn)目的基于MapReduce編程思想,編寫WordCount程序。2.實訓(xùn)內(nèi)容理解MapReduce編程思想,掌握編寫MapReduce版本W(wǎng)ordCount,了解該程序的執(zhí)行流程,結(jié)合執(zhí)行過程與結(jié)果,理解MapReduce的原理。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。小組成員需要具備HDFS分布式存儲基礎(chǔ)相關(guān)知識,并確保具備前面的實訓(xùn)環(huán)境。4.準(zhǔn)備知識(1)MapReduce編程編寫在Hadoop中依賴YARN框架執(zhí)行的MapReduce程序,大部分情況下只需要編寫相應(yīng)的Map處理和Reduce處理過程的業(yè)務(wù)程序即可,因為大部分的代碼,Hadoop已經(jīng)幫我們寫好了。所以編寫一個MapReduce程序并不復(fù)雜,關(guān)鍵點在于掌握分布式的編程思想和方法,主要將計算過程分為以下五個步驟:①迭代。遍歷輸入數(shù)據(jù),并將之解析成<Key,Value>鍵值對。②將輸入的<Key,Value>鍵值對映射(map)成新的<Key,Value>鍵值對。③依據(jù)Key對中間數(shù)據(jù)進(jìn)行分組。④以組為單位對數(shù)據(jù)進(jìn)行Reduce。⑤迭代。將最終產(chǎn)生的<Key,Value>鍵值對保存到輸出文件中。(2)JavaAPI解析①InputFormat:用于描述輸入數(shù)據(jù)的格式,常用為TextInputFormat,其提供如下兩個功能:數(shù)據(jù)切分:按照某種策略將輸入數(shù)據(jù)切分成若干個數(shù)據(jù)塊,以便確定MapTask個數(shù)以及對應(yīng)的數(shù)據(jù)分片。為Map任務(wù)提供數(shù)據(jù):給定某個數(shù)據(jù)分片,能將其解析成一個個的<Key,Value>鍵值對。②OutputFormat:用于描述輸出數(shù)據(jù)的格式,它能夠?qū)⒂脩籼峁┑?lt;Key,Value>鍵值對寫入特定格式的文件中。③Mapper/Reducer:封裝了應(yīng)用程序的數(shù)據(jù)處理邏輯。④Writable:Hadoop自定義的序列化接口,實現(xiàn)該類的接口可以用作MapReduce過程中的Value數(shù)據(jù)使用。⑤WritableComparable:在Writable基礎(chǔ)上繼承了Comparable接口,實現(xiàn)該類的接口可以用作MapReduce過程中的Key數(shù)據(jù)使用。因為Key包含了比較和排序的操作。5.實訓(xùn)步驟本實訓(xùn)包含四大步驟:準(zhǔn)備運行環(huán)境、準(zhǔn)備統(tǒng)計數(shù)據(jù)、編寫MapReduce程序、打包并運行代碼。查看運行結(jié)果這幾個步驟,詳細(xì)如下:(1)準(zhǔn)備運行環(huán)境啟動三臺節(jié)點,然后在master中啟動HDFS和YARN:start-dfs.shstart-yarn.sh(2)準(zhǔn)備統(tǒng)計數(shù)據(jù)新建待統(tǒng)計文件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)引入編寫MapReduce程序相關(guān)的jar包本次實訓(xùn)繼續(xù)使用實訓(xùn)2.3的環(huán)境,但編寫MapReduce程序需要引入相關(guān)的jar包,此時繼續(xù)引入hadoop-mapreduce-client-core.jar包。如圖3-所示。圖3-導(dǎo)入MapReduce依賴包(4)編寫MapReduce程序編寫MapReduce程序主要是編寫Map類和Reduce類,其中Map過程需要繼承org.apache.hadoop.mapreduce包中Mapper類,并重寫其map方法;Reduce過程需要繼承org.apache.hadoop.mapreduce包中Reducer類,并重寫其reduce方法。在com.bigdata包(沒有則新建)下新建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方法,劃分一行文本,讀一個單詞寫出一個<單詞,1>publicvoidmap(ObjectKey,Textvalue,Contextcontext)throwsIOException,InterruptedException{StringTokenizeritr=newStringTokenizer(value.toString());while(itr.hasMoreTokens()){word.set(itr.nextToken());context.write(word,one);//寫出<單詞,1>}}}//定義reduce類,對相同的單詞,把它們<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>,將兩個1相加}result.set(sum);context.write(Key,result);//寫出這個單詞,和這個單詞出現(xiàn)次數(shù)<單詞,單詞出現(xiàn)次數(shù)>}} publicstaticvoidmain(String[]args)throwsException{//主方法,函數(shù)入口 //TODOAuto-generatedmethodstub Configurationconf=newConfiguration();//實例化配置文件類Jobjob=newJob(conf,"WordCount");//實例化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);//指定開啟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個數(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)打包并運行代碼打包后的文件名為hadoop-project.jar,上傳到master節(jié)點的/root/jars目錄。主類WordCount位于包com.bigdata下,則可使用如下命令向YARN集群提交本應(yīng)用。yarnjarhadoop-project.jarcom.bigdata.WordCount/word.txt/wc_output1其中“yarn”為命令,“jar”為命令參數(shù),后面緊跟打包后的代碼地址,“com.bigdata”為包名,“WordCount”為主類名,第一個參數(shù)“/word.txt”為輸入文件在HDFS中的位置,第二個參數(shù)“/wc_output”為輸出文件在HDFS中的位置,第三個參數(shù)“1”表示需要統(tǒng)計成Reduce文件的個數(shù)。注意:“/word.txt”、“/wc_output”、“1”之間都有一個空格。同時需要啟動HDFS和YARN。(6)實訓(xùn)結(jié)果程序運行成功控制臺上的顯示內(nèi)容如圖3-15、圖3-16所示。圖3-15向YARN集群提交應(yīng)用圖3-16程序運行結(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.實訓(xùn)總結(jié)實訓(xùn)基于MapReduce編程思想,編寫MRJava版本的WordCount程序,并且在集群上執(zhí)行;通過分析執(zhí)行過程,對MapReduce編程思想、JavaAPI調(diào)用有所認(rèn)知和學(xué)習(xí)。本實訓(xùn)需要注意的地方有下面三點:(1)本實訓(xùn)是進(jìn)行分布式計算,統(tǒng)計的是HDFS集群上的數(shù)據(jù),所以應(yīng)該先安裝好HDFS集群,然后再將數(shù)據(jù)放到HDFS上。(2)使用的計算引擎為MapReduce,資源調(diào)度框架為YARN,所以均需要配置好,如有遺忘,請翻閱上次實訓(xùn)任務(wù)。(3)執(zhí)行作業(yè)的時候,請注意查看源碼,需要傳入的是多少個參數(shù),不要漏參數(shù)。此外,自己可以嘗試一下故意少寫一個參數(shù),然后查看報錯信息和日志,學(xué)會去分析錯誤,然后解決錯誤。實訓(xùn)4.1HBase安裝與配置1.實訓(xùn)目的通過本實訓(xùn)任務(wù),理解Zookeeper的概念、掌握Zookeeper完全分布式環(huán)境搭建、認(rèn)識HBase的基本架構(gòu)、理解HBase的原理、完成HBase的安裝與部署。2.實訓(xùn)內(nèi)容安裝和配置Zookeeper,學(xué)會分布式Zookeeper的安裝;安裝HBase,配置部署HBase,WebUI查看HBase。3.實訓(xùn)要求以小組為單元進(jìn)行實訓(xùn),每小組5人,小組自協(xié)商選一位組長,由組長安排和分配實訓(xùn)任務(wù),具體參考實訓(xùn)操作環(huán)節(jié)。4.準(zhǔn)備知識(1)Zookeeper的使用場景①HA機(jī)制(高可用機(jī)制)適合于HDFS、HBase等的HA,如在前面HBase的master、backup_master,兩臺節(jié)點都去ZK里面創(chuàng)建持久節(jié)點,當(dāng)一個節(jié)點創(chuàng)建成功,另外一個就會創(chuàng)建失敗。另外一種是創(chuàng)建臨時順序節(jié)點,比如說第一個連接的叫znode1、第二個連接的就會叫znode2、第三個連接的就會叫znode3,連接的節(jié)點會按照名詞排序,此時我們定義節(jié)點最小的為master,當(dāng)如果節(jié)點最小的節(jié)點(znode1)宕機(jī),則znode2就是最小,此時,這個znode2所連接的服務(wù)器就切換成master角色了。②配置文件同步分布式系統(tǒng)中會有很多臺服務(wù)器,服務(wù)器的配置文件要一直,如果其中某個配置發(fā)生了變化,那么每一臺也應(yīng)該改一樣,操作起來十分繁瑣,此時我們可以使用Zookeeper來同步配置。利用Zookeeper監(jiān)控此配置文件,如果發(fā)生了變化,則執(zhí)行另外的同步配置的代碼即可。③分布式鎖使用Zookeeper可以解決分布式環(huán)境下多個程序?qū)σ粋€共享資源的競爭的關(guān)系,防止同一資源在同一時刻被多個程序更改,實現(xiàn)過程一樣可以使用與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ù)庫一樣,RowKey是用來檢索記錄的主鍵。訪問HBasetable中的行,只有3種方式:①通過單個RowKey訪問②通過RowKey的range③全表掃描RowKey行鍵(RowKey)可以是任意字符串(最大長度是64KB,實際應(yīng)用中長度一般為10-100bytes),在HBase內(nèi)部,RowKey保存為字節(jié)數(shù)組。存儲時,數(shù)據(jù)按照RowKey的字典序(byteorder)排序存儲。設(shè)計Key時,要充分排序存儲這個特性,將經(jīng)常一起讀取的行存儲放到一起。注意:字典序?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作左填充。行的一次讀寫是原子操作(不論一次讀寫多少列)。這個設(shè)計決策能夠使用戶很容易的理解程序在對同一個行進(jìn)行并發(fā)更新操作時的行為。(4)列族HBase表中的每個列,都?xì)w屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如”courses:history”,”courses:math”都屬于”courses”這個列族。訪問控制、磁盤和內(nèi)存的使用統(tǒng)計都是在列族層面進(jìn)行的。實際應(yīng)用中,列族上的控制權(quán)限能幫助我們管理不同類型的應(yīng)用:我們允許一些應(yīng)用可以添加新的基本數(shù)據(jù)、一些應(yīng)用可以讀取基本數(shù)據(jù)并創(chuàng)建繼承的列族、一些應(yīng)用則只允許瀏覽數(shù)據(jù)(甚至可能因為隱私的原因不能瀏覽所有數(shù)據(jù))。(5)時間戳HBase中通過row和columns確定的為一個存貯單元稱為cell。每個cell都保存著同一份數(shù)據(jù)的多個版本。版本通過時間戳來索引。時間戳的類型是64位整型。時間戳可以由HBase(在數(shù)據(jù)寫入時自動)賦值,此時時間戳是精確到毫秒的當(dāng)前系統(tǒng)時間。時間戳也可以由客戶顯式賦值。如果應(yīng)用程序要避免數(shù)據(jù)版本沖突,就必須自己生成具有唯一性的時間戳。每個cell中,不同版本的數(shù)據(jù)按照時間倒序排序,即最新的數(shù)據(jù)排
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年徐州從業(yè)資格證貨運考試答案
- 2025年婁底貨運從業(yè)資格證考試內(nèi)容
- 2025年貨運從業(yè)資格證模擬考試0題
- 2025年吉安運輸從業(yè)資格證考試試題庫
- 第二章運動與能量練習(xí)2023-2024學(xué)年教科版物理八年級上冊
- 軟件公司員工手冊
- 智能控制規(guī)劃服務(wù)承諾書
- 實驗室安全防護(hù)設(shè)施配置與維護(hù)
- 商業(yè)活動臨時化妝師聘用書
- 商標(biāo)使用許可合同范本
- 核算崗年終工作總結(jié)
- 《學(xué)寫文學(xué)短評》統(tǒng)編版高一語文必修上冊
- 科研學(xué)術(shù)保密規(guī)范培訓(xùn)
- 《海陸變遷》示范課教學(xué)設(shè)計【湘教版七年級地理上冊】
- 《海上鋼琴師》課件
- 與青春期和解
- 部編版語文六年級上冊詞句段運用練習(xí)
- 2023年照明設(shè)計總監(jiān)年終總結(jié)及下一年計劃
- 2022年北京市西城區(qū)中考英語二模試卷(附答案詳解)
- 小品聰明的小明小明同學(xué)臺詞
- 2023年電大行政組織學(xué)試卷期末考試試題及答案
評論
0/150
提交評論