之前写过一篇关于如何部署hadoop完全分布式集群,但是是在虚拟机中部署的,开三台虚拟机,电脑内存就占用的特别多,毕竟虚拟机比较占内存,而docker是一种操作系统级别的轻量级虚拟化技术,一个docker容器占用少量的内存,下面就详解部署hadoop分布式的步骤(我的是在阿里云服务器上部署的,系统是ubuntu)

1.首先要在ubuntu中安装docker,可以参考之前的博文Docker的不同安装方式,这里不再说明

2.首先做准备工作,创建一个容器将其配置好后作为基础镜像

docker run --name=hadoop -i -t ubuntu /bin/bash

将宿主机中的jdk和hadoop的压缩包传输到容器hadoop中(我这里的jdk是1.8的,hadoop是2.5.0的)

docker cp 宿主机中jdk压缩包的安装目录  hadoop:/opt/

设置环境变量

apt-get update

apt-get install vim

vi ~/.bashrc

在最后添加

export JAVA_HOME=/opt/jdk1.8.0_161

export PATH=${JAVA_HOME}/bin:$PATH

开启ssh服务

apt-get install openssh-server

vi /etc/ssh/sshd_config

在里面加入PermitRootLogin yes

保存并退出

开启ifconfig

apt-get install net-tools

然后按ctrl+p ctrl+q退出容器

 

最后将这个容器作为基础镜像提交到本地仓库

docker commit hadoop live

3.创建容器并在上面部署hadoop

集群的整体规划:

容器名                   容器ip                  开启的hadoop服务

hadoop1            172.17.0.3                namenode datanode nodemanager 

hadoop2            172.17.0.4                datanode  resourcemanager nodemanager 

hadoop3             172.17.0.5               datanode nodemanager secondarynamenode  historyserver

hadoop1

docker run --name=hadoop1 --hostname=hadoop1 -i -t -p 22 live /bin/bash

hadoop2

docker run --name=hadoop2 --hostname=hadoop2 -i -t -p 22 live /bin/bash

hadoop3

docker run --name=hadoop3 --hostname=hadoop3 -i -t -p 22 live /bin/bash

这里的容器ip要设置为静态的,即不变的

下载pipework:点击下载

把下载的zip包传到宿主机上,解压,修改名字

unzip pipework-master.zip

mv pipework-master pipework

安装bridge-utils

apt-get install bridge-utils

给容器设置固定ip

pipework docker0 hadoop1 172.17.0.3/24

pipework docker0 hadoop2 172.17.0.4/24

pipework docker0 hadoop3 172.17.0.5/24

上边的ip地址要跟宿主机的docker0在同一个网段下,使用ifconfig查看docker0网段的网址

在hadoop1,hadoop2,hadoop3中添加hosts

vi /etc/hosts

172.17.0.3 hadoop1

172.17.0.4 hadoop2

172.17.0.5 hadoop3

在hadoop1中配置hadoop的配置文件

 

core-site.xml:

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://172.17.0.3:8020</value>
    </property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/app/hadoop-2.5.0/data/tmp</value>
    </property>
<property>
        <name>fs.trash.interval</name>
        <value>10080</value>

    </property>

hdfs-site.xml:

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>172.17.0.5:50090</value>

    </property>

slave:

172.17.0.3

172.17.0.4

172.17.0.5

mapred-site.xml:

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

    </property>

yarn-site.xml:

     <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
  <property>
        <name> yarn.resourcemanager.hostname</name>
        <value>172.17.0.4</value>
    </property>
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>640800</value>
    </property>
<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
<property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>

        <value>4</value>

    </property>

将hadoop-env.sh  mapred-env.sh yarn-env.sh 这三个文件中的jdk的目录修改为/opt/jdk1.8.0_161

4.通过scp将hadoop传输给两外两个容器

配置ssh

在hadoop1中:

ssh-keygen -t rsa

ssh-copy-id hadoop1

ssh-copy-id hadoop2

ssh-copy-id hadoop3

重启ssh服务

/etc/init.d/ssh restart

在hadoop2中重复hadoop1中的工作

并在hadoop3中重启ssh服务

5.启动hadoop集群

进入hadoop1

docker attach hadoop1

cd /opt/hadoop-2.5.0

初始化hdfs

bin/hdfs  namenode -format 

启动各个服务

hadoop1:

sbin/start-dfs.sh

hadoop2:

sbin/start-yarn.sh

hadoop3:

sbin/mr-jobhistory-daemon.sh start historyserver

最后在hadoop1上进行wordcount测试,看map和reduce是否能正常运行

 

 

 

 

 

 

 

Logo

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

更多推荐