使用docker搭建hadoop集群

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


  
    fs.defaultFS
    hdfs://hadoop0:9000
  
	
  
    hadoop.tmp.dir
    /home/hadoop/hadata/tmp
  

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

3⃣️配置hdfs-site.xml


  
    dfs.replication
    1
  
  
    dfs.name.dir
    /home/hadoop/name
  
  
    dfs.data.dir
    /home/hadoop/data
  

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

4⃣️配置mapred-site.xml


  
    mapreduce.framework.name
    yarn
  

指定mapreduce运行在yarn框架上

5⃣️配置yarn-site.xml




     
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

     
        yarn.resourcemanager.hostname
        hadoop0
    

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

关注公众号领取更多福利

你可能感兴趣的:(hadoop)