在docker上安裝hadoop集群

我參考了這篇博客,寫的很清楚不過還有一些漏洞:https://blog.csdn.net/qq_33530388/article/details/72811705
下面是我將一些錯(cuò)誤的地方修正了,給大家看。親測可用??!失敗的可以留言??!
首先線上個(gè)效果圖:

image.png

環(huán)境介紹:我的主機(jī)是win10,自帶16G,裝的虛擬機(jī)centos7,給了4G內(nèi)存。在centos7里面裝了docker,本章不介紹docker的安裝,如果想看的可以看我的其他文章

1.獲取鏡像。

如果是本地使用VMware搭建的話,需要準(zhǔn)備Java環(huán)境,hadoop安裝包,還要配置環(huán)境變量。雖然不難,但是經(jīng)常做這些工作也難免煩躁。
使用Docker容器的話,那這一切就變得簡單多了。

首先要準(zhǔn)備一個(gè)鏡像,可以使用Dockerfile構(gòu)建一個(gè)合適自己的鏡像,或者可以在共有倉庫中找一個(gè)具有hadoop環(huán)境的鏡像來使用也可以。由于我是配置的阿里云的加速器,所以在阿里云的倉庫中找了一個(gè)具有hadoop環(huán)境的鏡像。hadoop鏡像地址

使用命令拉到本地:

docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop

下載完成之后,通過docker images 可以查看到該鏡像:

這里寫圖片描述

2.創(chuàng)建容器。

有了鏡像之后,我們根據(jù)該鏡像創(chuàng)建三個(gè)容器,分別是一個(gè)Master用來作為hadoop集群的namenode,剩下兩個(gè)Slave用來作為datanode。

可以使用命令:

docker run -i -t --name Master -h Master  -p 50070:50070 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash

命令中的-h為該容器設(shè)置了主機(jī)名,這里設(shè)置為Master,最好創(chuàng)建容器的時(shí)候就設(shè)置主機(jī)名,在容器內(nèi)部設(shè)置不生效。

–name指定了容器的名字,也是為了方便區(qū)分使用。

-p 是指定對(duì)外開放的端口50070,這是方便我們?cè)跒g覽器上訪問hdfs。原文中也有給出如何給運(yùn)行的容器開放端口映射,不過對(duì)我還是不好用

如果需要設(shè)置掛載的,可自行設(shè)置

建立好Master節(jié)點(diǎn)的容器之后,再分別使用兩次該命令,創(chuàng)建兩個(gè)Slave節(jié)點(diǎn)。稍微改變其中的參數(shù)即可:

例如創(chuàng)建Slave1節(jié)點(diǎn):

docker run -i -t --name Slave1 -h Slave1 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash

這樣集群的基本環(huán)境就準(zhǔn)備好了。


3.配置SSH。

如果是本地搭建的話,需要配置的大概分為三步:
1.配置java環(huán)境。
2.配置無秘SSH。
3.配置hadoop環(huán)境。

但是下載的鏡像已經(jīng)包含了這些內(nèi)容,我們只需要簡單的配置一下就可以使用了。
在這個(gè)鏡像中,有關(guān)java和hadoop的內(nèi)容都存放在了/opt/tools目錄下。

先查看下環(huán)境變量都包含了什么:

這里寫圖片描述

從中間可以看出包含了jdk和hadoop的bin目錄,所以我們可以直接使用這兩個(gè)命令。

這里寫圖片描述

java環(huán)境已經(jīng)不需要我們來配置了。

接下來配置一下無秘的SSH。

首先將SSH運(yùn)行起來。

/etc/init.d/ssh start

然后生成秘鑰,保存到authorized_keys中。這個(gè)地方可以看一下這篇博客:ssh-keygen 的 詳解

ssh-keygen -t rsa

執(zhí)行的總體過程如下:

這里寫圖片描述

接下來在兩個(gè)Slave節(jié)點(diǎn)中做相同的事情,并且將每個(gè)節(jié)點(diǎn)生成的秘鑰互相保存在authorized_keys中。

也就是說,三個(gè)節(jié)點(diǎn)的都是這個(gè)樣子的:

這里寫圖片描述

接下來查看一下各自節(jié)點(diǎn)的ip地址,但是如果直接使用熟悉的ifconfig時(shí),就會(huì)發(fā)現(xiàn)沒有這個(gè)命令。那是因?yàn)殓R像本身就比較簡潔,簡潔到連這個(gè)命令都沒有。。。這個(gè)我也是服。
可以使用ip addr查看,或者:apt-get install ifconfig net-tools,安裝相關(guān)命令。

相比之下還是ip addr方便點(diǎn):

這里寫圖片描述

然后修改/etc/hosts,將主機(jī)名和對(duì)應(yīng)的ip地址添加進(jìn)去,這樣做為了方便調(diào)用ssh:

這里寫圖片描述

如果在Master節(jié)點(diǎn),想要連接到Slave1節(jié)點(diǎn),可以使用:ssh 192.168.0.3,也可以使用ssh Slave1。很明顯能感覺到使用主機(jī)名比較方便理解使用。

如果使用ssh Slave1之后沒有提示需要輸入密碼,就代表成功了(第一次的話會(huì)讓輸入yes或者no,是為了記住該地址,如果輸入yes之后就可以直接連接就像下面這樣):

這里寫圖片描述

4.配置hadoop。

到現(xiàn)在為止,我們已經(jīng)準(zhǔn)備好了haoop搭建的所有基本工作。也是由于該Docker鏡像為我們準(zhǔn)備好了需要才會(huì)這么簡單的。

我們只需要在配置一下hadoop相關(guān)的內(nèi)容。

為了方便起見,我們可以直接在Master節(jié)點(diǎn)進(jìn)行配置,然后使用scp命令發(fā)送到各節(jié)點(diǎn)覆蓋原來的即可。

這里不廢話,直接上代碼,至于其中的意思可以參考書籍資料,或者查看這個(gè)文檔:hadoop安裝指南,這個(gè)文檔是在VMware上配置的。

hadoop-env.sh:修改有關(guān)java的環(huán)境

export JAVA_HOME=/opt/tools/jdk1.8.0_77

core-site.xml

<configuration>

  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://Master:9000</value>
  </property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/hadoop/tmp</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/hadoop/data</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/hadoop/name</value>
  </property>
</configuration>

mapred-site.xml

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

yarn-site.xml

<configuration>
 <property>
<name>yarn.resourcemanager.address</name>
 <value>Master:8032</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>Master:8030</value> </property> <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>Master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master:8033</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>Master:8088</value>
</property>
 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
 <property>
 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>

slaves

Master
Slave1
Slave2

所以我這里datanode有3個(gè),每個(gè)節(jié)點(diǎn)各一個(gè),namenode只有一個(gè),在Master上

相關(guān)目錄最好需要手動(dòng)創(chuàng)建,然后分發(fā)給其他節(jié)點(diǎn)上

mkdir /hadoop/data
mkdir /hadoop/name
mkdir /hadoop/tmp
scp -r hadoop root@Slave1:/
scp -r hadoop root@Slave2:/

然后將這些文件通過scp發(fā)送到各個(gè)Slave節(jié)點(diǎn)上覆蓋原來的文件:

scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml Slave1:/opt/tools/hadoop/etc/hadoop/

到這里為止,所有的準(zhǔn)備工作都做好了。


5.運(yùn)行hadoop。

進(jìn)行格式化操作:

hadoop namenode -format

啟動(dòng)集群:

使用./start-all.sh,如果啟動(dòng)過程中提示關(guān)于0.0.0.0地址輸入yes或no,輸入yes即可:

這里寫圖片描述

在Master上使用jps查看相關(guān)進(jìn)程是否啟動(dòng):

這里寫圖片描述

在Slave節(jié)點(diǎn)上使用jps查看相關(guān)進(jìn)程是否啟動(dòng):

這里寫圖片描述

使用命令查看各節(jié)點(diǎn)信息:hadoop dfsadmin -report

這里寫圖片描述

然后再運(yùn)行一個(gè)統(tǒng)計(jì)單詞的例子:

現(xiàn)在hsfs上創(chuàng)建一個(gè)文件夾:

hadoop fs -mkdir /input

查看該文件夾:

hadoop fs -ls /
這里寫圖片描述

上傳文件到hdfs,這里直接將當(dāng)前目錄的README.txt進(jìn)行上傳:

hadoop fs -put README.txt /input/

這里寫圖片描述

之后運(yùn)行相關(guān)例子:

在/opt/tools/hadoop/share/hadoop/mapreduce目錄中執(zhí)行:hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

這里寫圖片描述

注意下這里我之前已經(jīng)做過測試了,所有outout目錄已經(jīng)存在了,所以換成了output1,這個(gè)目錄不需要提前創(chuàng)建,運(yùn)行的時(shí)候指定一下,會(huì)自動(dòng)創(chuàng)建的。

查看相關(guān)結(jié)果輸出:

這里寫圖片描述

可以使用: hadoop fs -cat /output1/part-r-00000 查看一下統(tǒng)計(jì)結(jié)果:

這里寫圖片描述

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容