我參考了這篇博客,寫的很清楚不過還有一些漏洞:https://blog.csdn.net/qq_33530388/article/details/72811705
下面是我將一些錯誤的地方修正了镰吆,給大家看绕辖。親測可用R钩搿乾忱!失敗的可以留言D啦瘛余指!
首先線上個效果圖:
環(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)備一個鏡像柴墩,可以使用Dockerfile構(gòu)建一個合適自己的鏡像忙厌,或者可以在共有倉庫中找一個具有hadoop環(huán)境的鏡像來使用也可以。由于我是配置的阿里云的加速器江咳,所以在阿里云的倉庫中找了一個具有hadoop環(huán)境的鏡像逢净。hadoop鏡像地址
使用命令拉到本地:
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop
下載完成之后,通過docker images 可以查看到該鏡像:
2.創(chuàng)建容器歼指。
有了鏡像之后爹土,我們根據(jù)該鏡像創(chuàng)建三個容器,分別是一個Master用來作為hadoop集群的namenode东臀,剩下兩個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è)置主機(jī)名,在容器內(nèi)部設(shè)置不生效。
–name指定了容器的名字赁濒,也是為了方便區(qū)分使用轨奄。
-p 是指定對外開放的端口50070,這是方便我們在瀏覽器上訪問hdfs拒炎。原文中也有給出如何給運行的容器開放端口映射挪拟,不過對我還是不好用
如果需要設(shè)置掛載的,可自行設(shè)置
建立好Master節(jié)點的容器之后,再分別使用兩次該命令击你,創(chuàng)建兩個Slave節(jié)點玉组。稍微改變其中的參數(shù)即可:
例如創(chuàng)建Slave1節(jié)點:
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)容,我們只需要簡單的配置一下就可以使用了拙吉。
在這個鏡像中潮孽,有關(guān)java和hadoop的內(nèi)容都存放在了/opt/tools目錄下。
先查看下環(huán)境變量都包含了什么:
從中間可以看出包含了jdk和hadoop的bin目錄筷黔,所以我們可以直接使用這兩個命令往史。
java環(huán)境已經(jīng)不需要我們來配置了。
接下來配置一下無秘的SSH佛舱。
首先將SSH運行起來怠堪。
/etc/init.d/ssh start
然后生成秘鑰,保存到authorized_keys中名眉。這個地方可以看一下這篇博客:ssh-keygen 的 詳解
ssh-keygen -t rsa
執(zhí)行的總體過程如下:
接下來在兩個Slave節(jié)點中做相同的事情粟矿,并且將每個節(jié)點生成的秘鑰互相保存在authorized_keys中。
也就是說损拢,三個節(jié)點的都是這個樣子的:
接下來查看一下各自節(jié)點的ip地址陌粹,但是如果直接使用熟悉的ifconfig時,就會發(fā)現(xiàn)沒有這個命令福压。那是因為鏡像本身就比較簡潔掏秩,簡潔到連這個命令都沒有。荆姆。蒙幻。這個我也是服。
可以使用ip addr查看胆筒,或者:apt-get install ifconfig net-tools,安裝相關(guān)命令邮破。
相比之下還是ip addr方便點:
然后修改/etc/hosts诈豌,將主機(jī)名和對應(yīng)的ip地址添加進(jìn)去,這樣做為了方便調(diào)用ssh:
如果在Master節(jié)點抒和,想要連接到Slave1節(jié)點矫渔,可以使用:ssh 192.168.0.3,也可以使用ssh Slave1摧莽。很明顯能感覺到使用主機(jī)名比較方便理解使用庙洼。
如果使用ssh Slave1之后沒有提示需要輸入密碼,就代表成功了(第一次的話會讓輸入yes或者no镊辕,是為了記住該地址油够,如果輸入yes之后就可以直接連接就像下面這樣):
4.配置hadoop。
到現(xiàn)在為止征懈,我們已經(jīng)準(zhǔn)備好了haoop搭建的所有基本工作叠聋。也是由于該Docker鏡像為我們準(zhǔn)備好了需要才會這么簡單的。
我們只需要在配置一下hadoop相關(guān)的內(nèi)容受裹。
為了方便起見碌补,我們可以直接在Master節(jié)點進(jìn)行配置,然后使用scp命令發(fā)送到各節(jié)點覆蓋原來的即可棉饶。
這里不廢話厦章,直接上代碼,至于其中的意思可以參考書籍資料照藻,或者查看這個文檔:hadoop安裝指南袜啃,這個文檔是在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個幸缕,每個節(jié)點各一個群发,namenode只有一個,在Master上
相關(guān)目錄最好需要手動創(chuàng)建发乔,然后分發(fā)給其他節(jié)點上
mkdir /hadoop/data
mkdir /hadoop/name
mkdir /hadoop/tmp
scp -r hadoop root@Slave1:/
scp -r hadoop root@Slave2:/
然后將這些文件通過scp發(fā)送到各個Slave節(jié)點上覆蓋原來的文件:
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.運行hadoop栏尚。
進(jìn)行格式化操作:
hadoop namenode -format
啟動集群:
使用./start-all.sh起愈,如果啟動過程中提示關(guān)于0.0.0.0地址輸入yes或no,輸入yes即可:
在Master上使用jps查看相關(guān)進(jìn)程是否啟動:
在Slave節(jié)點上使用jps查看相關(guān)進(jìn)程是否啟動:
使用命令查看各節(jié)點信息:hadoop dfsadmin -report
然后再運行一個統(tǒng)計單詞的例子:
現(xiàn)在hsfs上創(chuàng)建一個文件夾:
hadoop fs -mkdir /input
查看該文件夾:
hadoop fs -ls /
上傳文件到hdfs译仗,這里直接將當(dāng)前目錄的README.txt進(jìn)行上傳:
hadoop fs -put README.txt /input/
之后運行相關(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纵菌,這個目錄不需要提前創(chuàng)建阐污,運行的時候指定一下,會自動創(chuàng)建的咱圆。
查看相關(guān)結(jié)果輸出:
可以使用: hadoop fs -cat /output1/part-r-00000 查看一下統(tǒng)計結(jié)果: