Hadoop集群安裝配置
hadoop 集群安裝配置分為兩個(gè)部分,一個(gè)部分是 主節(jié)點(diǎn)(Master) 和 從節(jié)點(diǎn)(Slave),兩個(gè)部分需要完成的配置有一定的不同;總的來(lái)說(shuō),Master 所需要做的會(huì)比 Slave 會(huì)多一些。下面會(huì)演示兩個(gè)部分需要做的事情;由于各臺(tái)主機(jī)情況會(huì)有所不同,所以在報(bào)錯(cuò)的時(shí)候也會(huì)有一些的不一樣,所以該文章僅供參考。
環(huán)境
主機(jī)版本:Windows11
虛擬機(jī)版本:ubuntukylin-16.04-desktop-amd64
VMware 版本: VMware? Workstation 17 Pro
網(wǎng)卡:橋接模式
jdk 版本:jdk-8u162-linux-x64
hadoop 版本:hadoop-3.1.3
注:硬件版本是使用的兼容 VMware 12.X 的。
看下文之前,默認(rèn)是已經(jīng)配置好 IP 地址可以上網(wǎng),因?yàn)榇蠹沂褂玫木W(wǎng)絡(luò)適配器可能會(huì)有所不同,所以可能會(huì)出現(xiàn)一些對(duì) NAT 網(wǎng)絡(luò)使用者不友好的情況,再次提醒各位,該篇文章僅供參考。
節(jié)點(diǎn)配置
我們需要對(duì) Master 節(jié)點(diǎn)和 Slave 節(jié)點(diǎn)都進(jìn)行配置,因?yàn)楹芏鄸|西都是可以直接有 Master 來(lái)做的,所以呢,我們就先讓 Master 把能做的都做了先,然后盡量讓 Slave 能輕松一些。中心思想就是一個(gè) Master 配置完之后直接使用傳輸命令將配置好的軟件直接打包發(fā)送到 Slave 上,所以相對(duì)來(lái)說(shuō) Master 會(huì)做的更多一些,但是也會(huì)節(jié)省資源。
配置前提
因?yàn)榭紤]到很多人可能是做偽分布的,所以會(huì)出現(xiàn)多多少少的問(wèn)題,所以這里還是在給大家看一些簡(jiǎn)單的前提。
修改主機(jī)名
在修改主機(jī)名稱(chēng)之前,我們需要先查看另外一個(gè)文件的內(nèi)容,因?yàn)檫@個(gè)會(huì)對(duì)我們修改后有一定的影響。
我們首先是需要先打開(kāi) /etc/hosts 查看內(nèi)容,一般hosts文件中只能有一個(gè)127.0.0.1,其對(duì)應(yīng)主機(jī)名為localhost,如果有多余127.0.0.1映射,應(yīng)刪除,特別是不能存在“127.0.1.1 [主機(jī)名]”這樣的映射記錄。修改后需要重啟Linux系統(tǒng)。
sudo vim /etc/hosts
打開(kāi)后我們可以看到這里會(huì)有被紅色框框圈起來(lái)的地方,如果沒(méi)有可以不用管,如果有,請(qǐng)把它注釋掉或者直接刪除。我這里選擇的就是把它注釋掉。注釋之后效果就是如下圖這樣子了。
既然需要大家把它注釋掉肯定是因?yàn)樗幸恍﹦e的作用,最主要的作用就是為了避免我們使用命令的時(shí)候發(fā)生報(bào)錯(cuò)或者其他一些 warning,比如像下圖,無(wú)法解析主機(jī)的錯(cuò)誤,因?yàn)槲覀冃薷闹鳈C(jī)名稱(chēng)之后,他們之間的映射關(guān)系變了,但是之前的映射關(guān)系并沒(méi)有被覆蓋或者刪除,所以系統(tǒng)無(wú)法對(duì)修改后的主機(jī)名進(jìn)行映射,最終產(chǎn)生這樣的錯(cuò)誤。
sudo vim /etc/hostname
執(zhí)行上面命令后,就打開(kāi)了“/etc/hostname”這個(gè)文件,這個(gè)文件里面記錄了主機(jī)名,比如,假設(shè)安裝Ubuntu系統(tǒng)時(shí),設(shè)置的主機(jī)名是“hadoop01”,因此,打開(kāi)這個(gè)文件以后,里面就只有“hadoop01”這一行內(nèi)容,可以直接刪除,并修改為“Master”(注意是區(qū)分大小寫(xiě)的),然后,保存退出vim編輯器,這樣就完成了主機(jī)名的修改,需要重啟Linux系統(tǒng)才能看到主機(jī)名的變化。
Master
要注意觀察主機(jī)名修改前后的變化。在修改主機(jī)名之前,如果用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:
hadoop@hadoop01:~$
修改主機(jī)名并且重啟系統(tǒng)之后,用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:
hadoop@Master:~$
可以看出,這時(shí)就很容易辨認(rèn)出當(dāng)前是處于Master節(jié)點(diǎn)上進(jìn)行操作,不會(huì)和Slave節(jié)點(diǎn)產(chǎn)生混淆。
然后,在Master節(jié)點(diǎn)中執(zhí)行如下命令打開(kāi)并修改Master節(jié)點(diǎn)中的“/etc/hosts”文件:
sudo vim /etc/hosts
打開(kāi)文件后,我們?cè)谖募淖詈笮略鰞?nèi)容,假設(shè)我們現(xiàn)在使用的是三臺(tái)主機(jī)進(jìn)行連接,那么就有兩臺(tái)是 Slave 節(jié)點(diǎn),格式如下:
[Master的IP] Master
[Slave1的IP] Slave1
[Slave2的IP] Slave2
配置完成后,效果類(lèi)似下圖,但因?yàn)槲沂怯兴呐_(tái)主機(jī),所以我有三個(gè) SLave 節(jié)點(diǎn),至于有一行 Master 被注釋了,則是因?yàn)樾枰脴蚪泳W(wǎng)絡(luò),而且虛擬機(jī)會(huì)在機(jī)房電腦和我的筆記本上輾轉(zhuǎn),所以就會(huì)有兩個(gè)不一樣的,但因?yàn)樽⑨屃耍灾挥械谝粋€(gè)是生效的。
修改完成以后,請(qǐng)重新啟動(dòng)各節(jié)點(diǎn)的Linux系統(tǒng)。這樣就完成了 Master 節(jié)點(diǎn)和 Slave 節(jié)點(diǎn)的配置,然后,需要在各個(gè)節(jié)點(diǎn)上都執(zhí)行如下命令,測(cè)試是否相互ping得通,如果ping不通,后面就無(wú)法順利配置成功:
ping Master -c 3 # 只ping 3次就會(huì)停止,否則要按Ctrl+c中斷ping命令
ping Slave1 -c 3
這里只演示了兩個(gè),請(qǐng)大家根據(jù)自己的實(shí)際情況(有多少臺(tái)主機(jī))進(jìn)行修改,需要相互都可以 ping 通才算是可以連接上,關(guān)于各個(gè)主機(jī)之間的免密登陸,這里就不過(guò)多進(jìn)行贅述,就默認(rèn)都已經(jīng)可以免密登陸了。
Master 配置
在 Master 上是需要配置環(huán)境變量,然后是對(duì) Hadoop 進(jìn)行配置,配置文件總共有六個(gè),分別為 workers
、core-site.xml
、hdfs-site.xml
、mapred-site.xml
、yarn-site.xml
,具體的在下面會(huì)給大家進(jìn)行解釋?zhuān)稽c(diǎn)拙見(jiàn),若有不對(duì),可以在評(píng)論區(qū)指出。
配置PATH變量
如果還沒(méi)有配置PATH變量,那么需要在Master節(jié)點(diǎn)上進(jìn)行配置。 首先執(zhí)行命令“vim ~/.bashrc”,也就是使用vim編輯器打開(kāi)“ bashrc ”文件
sudo vim ~/.bashrc
然后,在該文件最上面的位置加入下面一行內(nèi)容:
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
配置完 jdk 和 hadoop 的環(huán)境變量之后,~/.bashrc 文件中就會(huì)有這么幾行內(nèi)容,路徑隨安裝的路徑會(huì)有所不同。
保存后執(zhí)行命令“source ~/.bashrc”,使配置生效。
source ~/.bashrc
配置集群/分布式環(huán)境
在配置集群/分布式模式時(shí),需要修改“/usr/local/hadoop/etc/hadoop”目錄下的配置文件,這里僅設(shè)置正常啟動(dòng)所必須的設(shè)置項(xiàng),包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5個(gè)文件,更多設(shè)置項(xiàng)可查看官方說(shuō)明。接下來(lái)我們配置文件都會(huì)默認(rèn)在 Hadoop 的安裝目錄下面。
cd /usr/local/hadoop/etc/hadoop # 進(jìn)入文件所在目錄文件夾
修改配置文件
(1)修改 workers 文件
需要把所有數(shù)據(jù)節(jié)點(diǎn)的主機(jī)名寫(xiě)入該文件,每行一個(gè),默認(rèn)為 localhost(即把本機(jī)作為數(shù)據(jù)節(jié)點(diǎn)),所以,在偽分布式配置時(shí),就采用了這種默認(rèn)的配置,使得節(jié)點(diǎn)既作為名稱(chēng)節(jié)點(diǎn)也作為數(shù)據(jù)節(jié)點(diǎn)。在進(jìn)行分布式配置時(shí),可以保留 localhost,讓 Master 節(jié)點(diǎn)同時(shí)充當(dāng)名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn),或者也可以刪掉localhost這行,讓 Master 節(jié)點(diǎn)僅作為名稱(chēng)節(jié)點(diǎn)使用。
vim workers
Master節(jié)點(diǎn)僅作為名稱(chēng)節(jié)點(diǎn)使用,因此將 workers 文件中原來(lái)的 localhost 刪除,添加如下內(nèi)容:
Slave1
Slave2
Slave3
因?yàn)槲沂撬呐_(tái)主機(jī)連在一起,然后我的選擇是 Master 作為 Namenode,其余 Slave 節(jié)點(diǎn)作為 Datanode,所以文件中我需要填寫(xiě)三個(gè)節(jié)點(diǎn)的主機(jī)名稱(chēng)。具體效果如下圖:
(2)修改配置文件 core-site.xml
Hadoop 的配置文件是 xml 格式,每個(gè)配置以聲明 <property>
的 <name>
和 <value
> 的方式來(lái)實(shí)現(xiàn)。通過(guò) gedit
編輯會(huì)比較方便
gedit ./etc/hadoop/core-site.xml
請(qǐng)把 core-site.xml 文件修改為如下內(nèi)容:
-
fs.defaultFS,值的格式是:
file:///文件:///
,這是默認(rèn)文件系統(tǒng)的名稱(chēng)。 一個(gè)URI,其方案和權(quán)限決定了文件系統(tǒng)的實(shí)現(xiàn)。 該 uri 的方案確定配置屬性(fs.SCHEME.impl)命名 FileSystem 實(shí)現(xiàn)類(lèi)。 uri 的權(quán)限用于 確定文件系統(tǒng)的主機(jī)、端口等。 -
hadoop.tmp.dir,值的格式是:
/tmp/hadoop-${user.name}
,是其他臨時(shí)目錄的基目錄。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:///usr/local/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
修改前:
修改后:
放出修改前后圖是為了讓大家能對(duì)比清楚需要修改的地方,以免大家改了不該改的。
(3)修改文件
對(duì)于 Hadoop 的分布式文件系統(tǒng) HDFS 而言,一般都是采用冗余存儲(chǔ),冗余因子通常為3,也就是說(shuō),一份數(shù)據(jù)保存三份副本。如果只使用了一個(gè)Slave節(jié)點(diǎn)作為數(shù)據(jù)節(jié)點(diǎn),即集群中只有一個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)只能保存一份,所以 ,dfs.replication
的值還是設(shè)置為 1。所以在修改的時(shí)候需要根據(jù)節(jié)點(diǎn)數(shù)量來(lái)決定。
vim hdfs-site.xml
修改的 hdfs-site.xml 具體內(nèi)容如下:
-
dfs.namenode.secondary.http-address,值的格式是:
0.0.0.0:9868
,輔助名稱(chēng)節(jié)點(diǎn) http 服務(wù)器地址和端口。 -
dfs.replication,因?yàn)槲矣腥齻€(gè) Datanode,所以這里我的值設(shè)置為
3
,默認(rèn)數(shù)據(jù)塊復(fù)制。 創(chuàng)建文件時(shí)可以指定實(shí)際的復(fù)制次數(shù)。 如果在創(chuàng)建時(shí)未指定復(fù)制,則使用默認(rèn)值。 -
dfs.namenode.name.dir,值的格式是:
file://${hadoop.tmp.dir}/dfs/name
,確定 DFS 名稱(chēng)節(jié)點(diǎn)在本地文件系統(tǒng)上的位置 應(yīng)該存儲(chǔ)名稱(chēng)表(fsimage)。 如果這是一個(gè)逗號(hào)分隔的列表 的目錄中,則名稱(chēng)表將復(fù)制到所有目錄,用于冗余。 -
dfs.datanode.data.dir,值的格式為:
file://${hadoop.tmp.dir}/dfs/data
,確定DFS數(shù)據(jù)節(jié)點(diǎn)在本地文件系統(tǒng)上的位置 應(yīng)該存儲(chǔ)其塊。 如果這是逗號(hào)分隔的 目錄列表,則數(shù)據(jù)將存儲(chǔ)在所有命名的 目錄,通常位于不同的設(shè)備上。應(yīng)標(biāo)記目錄 具有 HDFS 的相應(yīng)存儲(chǔ)類(lèi)型([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) 存儲(chǔ)策略。如果目錄是磁盤(pán),則默認(rèn)存儲(chǔ)類(lèi)型為DISK 沒(méi)有明確標(biāo)記的存儲(chǔ)類(lèi)型。不存在的目錄將 如果本地文件系統(tǒng)權(quán)限允許,則創(chuàng)建。
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
修改前:
修改后:
(4)修改文件 mapred-site.xml
/usr/local/hadoop/etc/hadoop
目錄下有一個(gè)mapred-site.xml.template
,需要修改文件名稱(chēng),把它重命名為 mapred-site.xml
,當(dāng)然,也可能沒(méi)有,我這里是沒(méi)有,不知道大家有沒(méi)有,就先記錄下來(lái)。
vim mapred-site.xml
把 mapred-site.xml
文件配置成如下內(nèi)容:
-
mapreduce.framework.name,值根據(jù)具體情況進(jìn)行調(diào)整,用于執(zhí)行 MapReduce 作業(yè)的運(yùn)行時(shí)框架。值可以是
local
,classic
的或yarn
之一。 -
mapreduce.jobhistory.address,值的格式為:
0.0.0.0:10020
,**MapReduce JobHistory Server IPC(進(jìn)程間通信)**主機(jī)和端口是標(biāo)識(shí)可以在網(wǎng)絡(luò)上訪問(wèn)MapReduce JobHistory Server
的詳細(xì)信息。IPC主機(jī)通常是運(yùn)行JobHistory Server
的計(jì)算機(jī)的 IP 地址或主機(jī)名。端口號(hào)是網(wǎng)絡(luò)用于將通信量定向到正確進(jìn)程的唯一標(biāo)識(shí)符。這些值是客戶端(如Hadoop Web UI)訪問(wèn)JobHistory Server
和查看有關(guān)已完成 MapReduce 作業(yè)的詳細(xì)信息所必需的。 默認(rèn)情況下,JobHistory Server
使用端口 10020 進(jìn)行 IPC 通信。如果 JobHistory 服務(wù)器在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行,則在配置客戶端或Web UI以與其通信時(shí),需要指定IPC主機(jī)和端口。例如,在Hadoop Web UI中,可以通過(guò)將mapreduce.jobhistory.address
配置屬性設(shè)置為來(lái)指定JobHistory Server IPC
主機(jī)和端口。<hostname>:<port>
. 您還可以在使用命令行 Hadoop 實(shí)用程序時(shí)指定這些值,例如mapred job -history <hostname>:<port>
。請(qǐng)注意,JobHistoryServerIPC
地址和端口配置可以在 Hadoop 配置目錄的mapred-site.xml
文件中找到。 如果需要更改這些值,則需要更新配置文件并重新啟動(dòng)JobHistory Server
,以使更改生效。 -
mapreduce.jobhistory.webapp.address,屬性值的格式為
<hostname>:<port>
。hostname
是指運(yùn)行 JobHistoryServer 的機(jī)器的主機(jī)名或IP地址,port
是 JobHistoryServer Web 應(yīng)用程序偵聽(tīng)傳入請(qǐng)求的端口號(hào)。例如,如果 JobHistoryServer 在計(jì)算“historyserver.example.com”
上運(yùn)行并偵聽(tīng)端口 19888,則可以將mapreduce.jobhistory.webapp.address
屬性設(shè)置為“historyserver.example.com:19888”
,以便從另一臺(tái)計(jì)算機(jī)上的 Web 瀏覽器訪問(wèn) Web 應(yīng)用程序。需要注意的是,JobHistoryServer Web 應(yīng)用程序需要其他幾個(gè) Hadoop 服務(wù)正常運(yùn)行才能正常工作。 這些服務(wù)包括 ResourceManager、HDFS NameNode 和 HDFS DataNodes。如果您在訪問(wèn) Web 應(yīng)用程序時(shí)遇到問(wèn)題,則值得檢查所有這些服務(wù)是否已啟動(dòng)并正在運(yùn)行,以及是否已設(shè)置正確的配置選項(xiàng)。 - yarn.app.mapreduce.am.env,是一個(gè)在YARN主節(jié)點(diǎn)應(yīng)用程序管理器環(huán)境下運(yùn)行的 MapReduce 作業(yè)的環(huán)境變量列表。該變量包含了一些配置參數(shù),如 Hadoop 的 classpath、JAVA_HOME等,可用于設(shè)置環(huán)境變量以方便在 MapReduce 任務(wù)運(yùn)行環(huán)境中使用。在配置 YARN MapReduce 環(huán)境時(shí),該參數(shù)非常有用。
-
mapreduce.map.env,這是一個(gè)環(huán)境變量,用于在 MapReduce 作業(yè)的 Map 任務(wù)中指定其他需要設(shè)置的環(huán)境變量。在 Map 任務(wù)運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)設(shè)置這個(gè)環(huán)境變量,并根據(jù)其值設(shè)置其他必要的環(huán)境變量。這個(gè)環(huán)境變量的值是一個(gè)以逗號(hào)分隔的鍵值對(duì)列表,每個(gè)鍵值對(duì)表示一個(gè)要設(shè)置的環(huán)境變量和其值。例如:
export mapreduce_map_env="JAVA_HOME=/usr/local/java,PATH=$PATH:/usr/local/bin"
這個(gè)例子指定了兩個(gè)環(huán)境變量,JAVA_HOME 和 PATH。其中 JAVA_HOME 被設(shè)置為 /usr/local/java,PATH被設(shè)置為原有的值加上: /usr/local/bin。在 Map 任務(wù)運(yùn)行時(shí),這些環(huán)境變量的值就會(huì)被設(shè)置為指定的值,方便應(yīng)用程序使用。-
mapreduce.reduce.env,是 Hadoop MapReduce 中的一個(gè)配置設(shè)置,它指定傳遞給 reduce 任務(wù)的環(huán)境變量列表。reduce 任務(wù)可以使用這些變量來(lái)自定義其行為或訪問(wèn)特定資源。例如,reduce 任務(wù)可能需要訪問(wèn)并非在集群的每個(gè)節(jié)點(diǎn)上都可用的數(shù)據(jù)庫(kù)或文件系統(tǒng)。 通過(guò)在 mapreduce.reduce.env 中設(shè)置適當(dāng)?shù)沫h(huán)境變量,reduce 任務(wù)可以輕松地訪問(wèn)這些資源。mapreduce.reduce.env 的語(yǔ)法如下:
mapreduce.reduce.env=<var1>=<value1>,<var2>=<value2>,...
<var1>,<var2>,...
是變量名,<value1>,<value2>...
是它們的相應(yīng)值。 可以指定多個(gè)變量,用逗號(hào)分隔它們。為Hadoop作業(yè)設(shè)置環(huán)境變量的推薦方法是使用 hadoop 命令的 -D 選項(xiàng)。 例如:hadoop jar myjob.jar -D mapreduce.reduce.env="VAR1=value1,VAR2=value2"...
這會(huì)將作業(yè)中所有 reduce 任務(wù)的環(huán)境變量 VAR 1 和 VAR 2 分別設(shè)置為 value 1 和 value 2。
-
mapreduce.reduce.env,是 Hadoop MapReduce 中的一個(gè)配置設(shè)置,它指定傳遞給 reduce 任務(wù)的環(huán)境變量列表。reduce 任務(wù)可以使用這些變量來(lái)自定義其行為或訪問(wèn)特定資源。例如,reduce 任務(wù)可能需要訪問(wèn)并非在集群的每個(gè)節(jié)點(diǎn)上都可用的數(shù)據(jù)庫(kù)或文件系統(tǒng)。 通過(guò)在 mapreduce.reduce.env 中設(shè)置適當(dāng)?shù)沫h(huán)境變量,reduce 任務(wù)可以輕松地訪問(wèn)這些資源。mapreduce.reduce.env 的語(yǔ)法如下:
<configuration>
<property>
<name>mapreduce.framework.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.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>
</configuration>
修改前:
修改后:
(5)修改文件 yarn-site.xml
yarn-site.xml 是 Apache Hadoop YARN 的配置文件,它代表 Yet Another Resource Negotiator。 YARN是一個(gè)跨計(jì)算機(jī)集群并行處理大量數(shù)據(jù)的分布式框架,包含一組定義YARN應(yīng)用程序行為的屬性。
vim yarn-site.xml
請(qǐng)把 yarn-site.xml 文件配置成如下內(nèi)容:
-
yarn.resourcemanager.hostname,值的格式為:
0.0.0.0
,這是一個(gè)在 Apache Hadoop YARN 群集上使用的配置屬性,用于定義 YARN 資源管理器的主機(jī)名或 IP 地址。該屬性是在 yarn-site.xml 文件中進(jìn)行配置的。資源管理器是一個(gè) YARN 服務(wù),其主要職責(zé)是管理群集中的資源,包括內(nèi)存、CPU、磁盤(pán)等等,并分配資源給正在運(yùn)行的應(yīng)用程序。在 YARN 群集中運(yùn)行應(yīng)用程序時(shí),它們會(huì)通過(guò) yarn.resourcemanager.hostname 所指定的主機(jī)名或 IP 地址與資源管理器進(jìn)行通信,以請(qǐng)求和接收資源分配。如果集群中只有一個(gè)資源管理器,那么在 YARN 客戶端上設(shè)置 yarn.resourcemanager.hostname 屬性一般不是必需的,因?yàn)榭蛻舳藭?huì)自動(dòng)查找它所在的主機(jī)上的資源管理器。但如果集群中有多個(gè)資源管理器,則需要在客戶端上顯式設(shè)置該屬性,以確定它將要連接哪一個(gè)資源管理器。 -
yarn.nodemanager.aux-services,是YARN(Yet Another Resource Negotiator)中 NodeManager 的一個(gè)重要配置參數(shù),它用來(lái)指定 NodeManager 啟動(dòng)的輔助服務(wù)。輔助服務(wù)是指在NodeManager之外運(yùn)行并為 MapReduce 應(yīng)用程序提供支持的服務(wù),例如 Hive、HBase等。通常情況下,輔助服務(wù)配置文件位于
$HADOOP_HOME/etc/hadoop/
目錄下的 yarn-site.xml 文件中。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改前:
修改后:有一行是注釋?zhuān)云鋵?shí)可以不用管它。
傳輸文件到 Slave 節(jié)點(diǎn)中
上述5個(gè)文件全部配置完成以后,需要把Master節(jié)點(diǎn)上的“/usr/local/hadoop”
文件夾復(fù)制到各個(gè)節(jié)點(diǎn)上。如果之前已經(jīng)運(yùn)行過(guò)偽分布式模式,建議在切換到集群模式之前首先刪除之前在偽分布式模式下生成的臨時(shí)文件。
因?yàn)槲覀円獙⒄麄€(gè) Hadoop 目錄打包,然后再發(fā)送到其他節(jié)點(diǎn)中,所以我們需要先離開(kāi) Hadoop 的安裝目錄,所以先用 cd /usr/local
到達(dá) Hadoop 安裝目錄的上一級(jí)目錄,然后刪除臨時(shí)文件,之后再打包壓縮發(fā)送到 Slave 節(jié)點(diǎn)上。注意:此時(shí)使用了 scp
命令之后是不需要輸入密碼的,如果需要輸入密碼,那就是 ssh 免密配置不成功,需要重新配置。
cd /usr/local
sudo rm -r ./hadoop/tmp # 刪除 Hadoop 臨時(shí)文件
sudo rm -r ./hadoop/logs/* # 刪除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先壓縮再?gòu)?fù)制
因?yàn)槲疫€沒(méi)有格式化 Namenode,并且沒(méi)有啟動(dòng) DFS 服務(wù),所以是沒(méi)有 tmp
和 logs
目錄文件的。
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop # 將壓縮包發(fā)送到 Slave1 節(jié)點(diǎn)的 home 目錄上
scp ./hadoop.master.tar.gz Slave2:/home/hadoop # 將壓縮包發(fā)送到 Slave2 節(jié)點(diǎn)的 home 目錄上
scp ./hadoop.master.tar.gz Slave3:/home/hadoop # 將壓縮包發(fā)送到 Slave3 節(jié)點(diǎn)的 home 目錄上
Slave 配置
修改主機(jī)名
在修改主機(jī)名稱(chēng)之前,我們需要先查看另外一個(gè)文件的內(nèi)容,因?yàn)檫@個(gè)會(huì)對(duì)我們修改后有一定的影響。
修改 /etc/hosts 文件
我們首先是需要先打開(kāi)這個(gè)文件查看內(nèi)容,一般hosts文件中只能有一個(gè)127.0.0.1,其對(duì)應(yīng)主機(jī)名為localhost,如果有多余127.0.0.1映射,應(yīng)刪除,特別是不能存在“127.0.1.1 [主機(jī)名]”這樣的映射記錄。修改后需要重啟Linux系統(tǒng)。
sudo vim /etc/hosts
打開(kāi)后我們可以看到這里會(huì)有被紅色框框圈起來(lái)的地方,如果沒(méi)有可以不用管,如果有,請(qǐng)把它注釋掉或者直接刪除。我這里選擇的就是把它注釋掉。注釋之后效果就是如下圖這樣子了。
接著修改 /etc/hostname
文件
sudo vim /etc/hostname
執(zhí)行上面命令后,就打開(kāi)了“/etc/hostname”這個(gè)文件,這個(gè)文件里面記錄了主機(jī)名,比如,假設(shè)安裝Ubuntu系統(tǒng)時(shí),設(shè)置的主機(jī)名是“hadoop01”,因此,打開(kāi)這個(gè)文件以后,里面就只有“hadoop01”這一行內(nèi)容,可以直接刪除,并修改為“Master”(注意是區(qū)分大小寫(xiě)的),然后,保存退出vim編輯器,這樣就完成了主機(jī)名的修改,需要重啟Linux系統(tǒng)才能看到主機(jī)名的變化。
Slave1
要注意觀察主機(jī)名修改前后的變化。在修改主機(jī)名之前,如果用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:
hadoop@hadoop02:~$
修改主機(jī)名并且重啟系統(tǒng)之后,用hadoop登錄Linux系統(tǒng),打開(kāi)終端,進(jìn)入Shell命令提示符狀態(tài),會(huì)顯示如下內(nèi)容:
hadoop@Slave1:~$
修改完成以后,請(qǐng)重啟節(jié)點(diǎn)的Linux系統(tǒng)。這樣就完成了 Slave 節(jié)點(diǎn)的配置,然后,需要在各個(gè)節(jié)點(diǎn)上都執(zhí)行如下命令,測(cè)試是否相互ping得通,如果ping不通,后面就無(wú)法順利配置成功:
ping Master -c 3 # 只ping 3次就會(huì)停止,否則要按Ctrl+c中斷ping命令
ping Slave1 -c 3
這里只演示了兩個(gè),請(qǐng)大家根據(jù)自己的實(shí)際情況(有多少臺(tái)主機(jī))進(jìn)行修改,需要相互都可以 ping 通才算是可以連接上,關(guān)于各個(gè)主機(jī)之間的免密登陸,這里就不過(guò)多進(jìn)行贅述,就默認(rèn)都已經(jīng)可以免密登陸了。
配置 Hadoop
在 Master 節(jié)點(diǎn)上已經(jīng)配置完畢并且發(fā)送了 Hadoop 安裝包到 Slave 的前提下,進(jìn)行以下的配置,首先是刪除舊的 Hadoop 安裝包,如果以前有安裝單機(jī)分布或者偽分布的話,如果沒(méi)有,可以忽略這一步。然后就是對(duì)發(fā)送過(guò)來(lái)的包進(jìn)行解壓,解壓到 /usr/local
目錄下,最后給修改目錄的權(quán)限。
sudo rm -r /usr/local/hadoop # 刪掉舊的(如果存在)
sudo tar -zxvf ~/hadoop.master.tar.gz -C /usr/local # zxvf中的 V 可以看到解壓的過(guò)程。
sudo chown -R hadoop /usr/local/hadoop
同樣,如果有其他Slave節(jié)點(diǎn),也要執(zhí)行將 hadoop.master.tar.gz
傳輸?shù)?Slave 節(jié)點(diǎn)以及在 Slave 節(jié)點(diǎn)解壓文件的操作。
啟動(dòng) Hadoop 集群
首次啟動(dòng) Hadoop 集群時(shí),需要先在 Master 節(jié)點(diǎn)執(zhí)行名稱(chēng)節(jié)點(diǎn)的格式化(只需要執(zhí)行這一次,后面再啟動(dòng) Hadoop 時(shí),不要再次格式化名稱(chēng)節(jié)點(diǎn)),命令如下:
hdfs namenode -format
現(xiàn)在就可以啟動(dòng) Hadoop 了,啟動(dòng)需要在 Master 節(jié)點(diǎn)上進(jìn)行,執(zhí)行如下命令:
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
通過(guò)命令jps可以查看各個(gè)節(jié)點(diǎn)所啟動(dòng)的進(jìn)程。如果已經(jīng)正確啟動(dòng),則在Master節(jié)點(diǎn)上可以看到 NameNode
、ResourceManager
、SecondrryNameNode
和 JobHistoryServer
進(jìn)程,如下圖所示。
在 Slave 節(jié)點(diǎn)可以看到 DataNode
和 NodeManager
進(jìn)程,如下圖所示:
缺少任一進(jìn)程都表示出錯(cuò)。另外還需要在 Master 節(jié)點(diǎn)上通過(guò)命令hdfs dfsadmin -report
查看數(shù)據(jù)節(jié)點(diǎn)是否正常啟動(dòng),如果屏幕信息中的Live datanodes
為 3 (根據(jù)實(shí)際情況進(jìn)行調(diào)整),則說(shuō)明集群?jiǎn)?dòng)成功。
hdfs dfsadmin -report
由于我有 3 個(gè) Slave 節(jié)點(diǎn)充當(dāng)數(shù)據(jù)節(jié)點(diǎn),因此,數(shù)據(jù)節(jié)點(diǎn)啟動(dòng)成功以后,會(huì)顯示如下圖所示信息:
也可以在主機(jī) Windows 系統(tǒng)的瀏覽器中輸入地址 http:// + [Maste節(jié)點(diǎn)的IP] +:9870/
或者在 Linux 系統(tǒng)的瀏覽器中輸入地址 http://master:9870/
,通過(guò) Web 頁(yè)面看到查看名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)的狀態(tài)。如果不成功,可以通過(guò)啟動(dòng)日志(logs)排查原因。
這里再次強(qiáng)調(diào),偽分布式模式和分布式模式切換時(shí)需要注意以下事項(xiàng):
(a)從分布式切換到偽分布式時(shí),不要忘記修改slaves配置文件;
(b)在兩者之間切換時(shí),若遇到無(wú)法正常啟動(dòng)的情況,可以刪除所涉及節(jié)點(diǎn)的臨時(shí)文件夾,這樣雖然之前的數(shù)據(jù)會(huì)被刪掉,但能保證集群正確啟動(dòng)。所以,如果集群以前能啟動(dòng),但后來(lái)啟動(dòng)不了,特別是數(shù)據(jù)節(jié)點(diǎn)無(wú)法啟動(dòng),不妨試著刪除所有節(jié)點(diǎn)(包括Slave節(jié)點(diǎn))上的 /usr/local/hadoop/tmp
文件夾,再重新執(zhí)行一次 hdfs namenode -format
,再次啟動(dòng)即可。
執(zhí)行分布式實(shí)例
執(zhí)行分布式實(shí)例過(guò)程與偽分布式模式一樣,首先創(chuàng)建 HDFS 上的用戶目錄,命令如下:
hdfs dfs -mkdir -p /user/hadoop
然后,在 HDFS 中創(chuàng)建一個(gè) input 目錄,并把 /usr/local/hadoop/etc/hadoop
目錄中的配置文件作為輸入文件復(fù)制到 input 目錄中,命令如下:
hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
接著就可以運(yùn)行 MapReduce 作業(yè)了,命令如下:
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
運(yùn)行時(shí)的輸出信息與偽分布式類(lèi)似,會(huì)顯示 MapReduce作業(yè)的進(jìn)度,如下圖所示:
執(zhí)行過(guò)程可能會(huì)有點(diǎn)慢,但是,如果遲遲沒(méi)有進(jìn)度,比如5分鐘都沒(méi)看到進(jìn)度變化,那么不妨重啟Hadoop再次測(cè)試。若重啟還不行,則很有可能是內(nèi)存不足引起,建議增大虛擬機(jī)的內(nèi)存,或者通過(guò)更改 YARN 的內(nèi)存配置來(lái)解決。
在執(zhí)行過(guò)程中,可以在 Windows 系統(tǒng)瀏覽器中地址欄輸入 http://[Master的IP地址]:8088/cluster
或在 Linux 系統(tǒng)中打開(kāi)瀏覽器,在地址欄輸入http://master:8088/cluster
,通過(guò)Web界面查看任務(wù)進(jìn)度,在Web界面點(diǎn)擊 Tracking UI
這一列的 History 連接,可以看到任務(wù)的運(yùn)行信息,如下圖所示:
然后我們可以使用命令查看輸出結(jié)果:
./bin/hdfs dfs -cat output/*
輸出結(jié)果如下圖所示:
最后,關(guān)閉Hadoop集群,需要在Master節(jié)點(diǎn)執(zhí)行如下命令:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-781583.html
stop-yarn.sh
stop-dfs.sh
mapred --daemon stop historyserver
至此就完成了 Hadoop 集群的搭建。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781583.html
到了這里,關(guān)于Ubuntu 16.04——Hadoop集群安裝配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!