Hello小伙伴们,上一篇我们讲了怎么使用虚拟机搭建hadoop集群。
由于这种方式搭建起来,虚拟机较大,如果是从0开始搭建的话,
那是十分缓慢。下面就给大家伙讲讲怎么使用docker搭建hadoop集群。

docker简介

百度百科上这么解释:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
也就是说docker是一种容器,我们可以往容器中放我们需要的东西,然后直接发布到服务器上。
再简单来说,我们可以将一个个hadoop节点当作容器运行在我们的机器上实现集群的效果。

docker的安装

这里就举一种简单的在centos7上安装。如果你是windows或者mac可以百度一下,安装也是不难的。

1.使用yum安装docker

yum install -y docker

2.启动docker服务器

service docker start

3.拉取镜像

我们要成功启动一个docker容器,首先要选择我们需要的镜像。docker仓库中有很多镜像给我们选择,我们这里需要的是,包含jdk还有hadoop的基础镜像。
当然,你也可以拉取一个centos镜像然后手动安装jdk和hadoop。这里我们简单粗暴,直接拉取含有jdk和hadoop的基础镜像。
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop

4.启动容器

分别启动hadoop0、hadoop1、hadoop2
docker run -it --name hadoop0 -h hadoop0 -p 50070:50070 -p 8088:8088 -p 9000:9000 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
docker run -it --name hadoop1 -h hadoop1 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
docker run -it --name hadoop2 -h hadoop2 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash

-i:以交互模式运行容器,通常与-t同时使用

-t:为容器重新分配一个伪输入终端,通常与-i同时使用

–name:为容器指定一个名称

-h:指定主机名

-p:指定本机和容器的映射端口。这里是为了启动之后查看hdfs和yarn的监控页面以及hdfs的rpc端口


如果要退出可以使用ctrl+d退出容器。使用

docker exec -it 【容器名】/bin/bash

再次进入容器


查看当前正在运行的容器

docker ps

如果容器已经停止,可以使用

docker start 容器名

启动容器,然后再执行进入容器的命令。


5.分别启动容器的sshd服务

上一篇文章也介绍到,namenode需要通过ssh登录到其他机器启动datanode。resourcemanager也同理要到其他机器上启动nodemanager
#启动ssh服务
/etc/init.d/ssh start

#生成密钥
ssh-keygen -t rsa

#修改hosts文件
vim /etc/hosts
172.17.0.2      hadoop0
172.17.0.3      hadoop1
172.17.0.4      hadoop2

生成的密钥会存放在个人用户目录的.ssh文件夹下。文件名为id_rsa.pub

在每一台机器都启动完sshd服务,和生成密钥后。复制密钥到其他机器,实现免密登录

在hadoop0上执行以下命令

ssh-copy-id hadoop0
ssh-copy-id hadoop1
ssh-copy-id hadoop2

验证免密登录

ssh hadoop0
ssh hadoop1
ssh hadoop2

6.配置hadoop运行环境
以下与之前搭建hadoop集群配置方式一致

1⃣️修改hadoop-env.sh:修改java的环境
修改第25行的java环境

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

2⃣️配置core-site.xml

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

fs.defaultFS:表示集群namenode的地址
hadoop.tmp.dir:表示临时文件路径

3⃣️配置hdfs-site.xml

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

dfs.replication:表示hdfs的数据块备份数量,默认是3
dfs.datanode.data.dir :表示datanode的数据路径
dfs.namenode.name.dir:表示namenode的数据路径

4⃣️配置mapred-site.xml

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

指定mapreduce运行在yarn框架上

5⃣️配置yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
     <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

     <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop0</value>
    </property>
</configuration>

yarn.nodemanager.aux-services:NodeManager上运行的附属服务,需配置成mapreduce_shuffle,才可运行MapReduce程序,否则会报错;
yarn.resourcemanager.address : 表示resourcemanager的地址

6⃣️发送配置到其他机器

scp -r /opt/tools/hadoop/ hadoop1:/opt/tools/hadoop/
scp /etc/hosts hadoop1:/etc/hosts

到这里所有配置就做好啦!!!!!!!!

7⃣️在hadoop0上格式化namenode

hadoop namenode -format

启动集群并验证

cd /opt/tools/hadoop/sbin/
./start-all.sh

关注公众号领取更多福利

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐