Docker部署Hadoop集群

2016-09-27 杜亦舒

前几天写了文章“Hadoop 集群搭建”之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Docker不仅在生产环境威力巨大,对于我们在自己电脑中搭建学习实验环境更是非常便利

搭建一个集群环境时需要多台服务器,对于我们个人,这通常是个门槛,需要使用虚拟机,安装操作系统,然后运行起来多个虚机

安装操作系统是个不太轻松的任务,并且运行多个虚机对个人电脑性能也有一定要求,这些门槛影响了很多小伙伴的实践积极性

使用Docker的话就简单了,不用安装操作系统,直接下载一个镜像,如centos,这样操作系统就有了,基于这个系统镜像运行多个容器,就相当于起了多个虚机,而且系统性能的消耗要远小于虚拟机

假设我们有一个 centos7 镜像,启动多个容器,每个容器都有一个IP,都能通过SSH连接操作,这样就可以在每个容器中安装 JAVA Hadoop,从而搭建起集群环境了

使用Docker搭建Hadoop集群的过程包括:

  1. 安装Docker
  2. 获取centos镜像
  3. 安装SSH
  4. 为容器配置IP
  5. 安装JAVA和Hadoop
  6. 配置Hadoop

第1步比较简单,去Docker官网下载安装就好,第5和第6步与在独立服务器中的操作是一样的,所以这里就介绍一下2-4步的Docker操作方式

获取centos7镜像

$ docker pull centos

大概是70多M,使用阿里云等Docker加速器的话很快就能下载完,之后在镜像列表中就可以看到

查看镜像列表的命令:

$ docker images

安装SSH

以centos7镜像为基础,构建一个带有SSH功能的centos

$ vi Dockerfile

内容:

FROM centos

MAINTAINER dys

RUN yum install -y openssh-server sudo

RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

RUN yum  install -y openssh-clients

RUN echo "root:111111" | chpasswd

RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN mkdir /var/run/sshd

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

这段内容的大意是:以 centos 镜像为基础,安装SSH的相关包,设置了root用户的密码为 111111,并启动SSH服务

执行构建镜像的命令,新镜像命名为 centos7-ssh

$ docker build -t="centos7-ssh" .

执行完成后,可以在镜像列表中看到

$ docker images

设置固定IP

需要用到 pipework,他用于给容器设置IP

先下载

$ git clone https://github.com/jpetazzo/pipework.git

$ cp pipework/pipework /usr/local/bin/

安装bridge-utils

$ yum -y install bridge-utils

创建网络

$ brctl addbr br1

$ ip link set dev br1 up

$ ip addr add 192.168.3.1/24 dev br1

基于 centos7-ssh 这个镜像启动一个容器,名为 centos7.ssh

$ docker run -d --name=centos7.ssh centos7-ssh

设置IP

$ pipework br1 centos7.ssh 192.168.3.20/24

为名为 centos7.ssh 的容器指定了IP 192.168.3.20

分别使用 ping 与 ssh 命令进行验证,看是否可以ping通和成功登录

$ ping 192.168.3.20

$ ssh 192.168.3.20

ssh成功登录后,就意味着已经准备好了一台服务器,再运行2个容器、设置好IP,那么就相当于有了3台服务器

$ docker run -d --name=centos7.ssh2 centos7-ssh

$ docker run -d --name=centos7.ssh3 centos7-ssh

$ pipework br1 centos7.ssh2 192.168.3.22/24

$ pipework br1 centos7.ssh3 192.168.3.23/24

这样就有了3个可以SSH连接的容器,可以在上面安装和配置集群环境了

构建Hadoop镜像

上面是运行了3个centos容器,需要在每个容器中单独安装Hadoop环境,我们可以像构建SSH镜像一样,构建一个Hadoop镜像,然后运行3个Hadoop容器,这样就更简单了

$ vi Dockerfile

内容:

FROM centos7-ssh

ADD jdk-8u101-linux-x64.tar.gz /usr/local/

RUN mv /usr/local/jdk1.8.0_101 /usr/local/jdk1.8

ENV JAVA_HOME /usr/local/jdk1.8

ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-2.7.3.tar.gz /usr/local

RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop

ENV HADOOP_HOME /usr/local/hadoop

ENV PATH $HADOOP_HOME/bin:$PATH

RUN yum install -y which sudo

这里是基于 centos7-ssh 这个镜像,把 JAVA 和 Hadoop 的环境都配置好了

前提:在Dockerfile所在目录下准备好 jdk-8u101-linux-x64.tar.gz 与 hadoop-2.7.3.tar.gz

执行构建命令,新镜像命名为 hadoop

$ docker build -t="hadoop" .

运行3个hadoop容器,分别命名为 hadoop0,hadoop1,hadoop2,hadoop0 作为master

$ docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 hadoop

$ docker run --name hadoop1 --hostname hadoop1 -d -P hadoop

$ docker run --name hadoop2 --hostname hadoop2 -d -P hadoop

容器hadoop0启动时,映射了端口号,50070和8088,是用来在浏览器中访问hadoop WEB界面的

配置IP

$ pipework br1 hadoop0 192.168.3.30/24

$ pipework br1 hadoop1 192.168.3.31/24

$ pipework br1 hadoop2 192.168.3.32/24

配置Hadoop集群

新开3个终端窗口,分别连接到 hadoop0,hadoop1,hadoop2,便于操作

$ docker exec -it hadoop0 /bin/bash

$ docker exec -it hadoop1 /bin/bash

$ docker exec -it hadoop2 /bin/bash

在各个容器中修改 /etc/hosts,添加:

192.168.3.30    master

192.168.3.31    slave1

192.168.3.32    slave2

接下来就是配置SSH免登录,及hadoop的配置文件了,方法和之前“Hadoop集群搭建”中的一样

这样就使用Docker实现了Hadoop集群的搭建

Docker部署Hadoop集群的更多相关文章

  1. 使用docker部署hadoop集群

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用doc ...

  2. docker安装hadoop集群

    docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...

  3. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  4. 如何部署hadoop集群

    假设我们有三台服务器,他们的角色我们做如下划分: 10.96.21.120 master 10.96.21.119 slave1 10.96.21.121 slave2 接下来我们按照这个配置来部署h ...

  5. 批量部署Hadoop集群环境(1)

    批量部署Hadoop集群环境(1) 1. 项目简介: 前言:云火的一塌糊涂,加上自大二就跟随一位教授做大数据项目,所以很早就产生了兴趣,随着知识的积累,虚拟机已经不能满足了,这次在服务器上以生产环境来 ...

  6. 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建

    准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...

  7. 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  8. 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  9. 阿里云ECS服务器部署HADOOP集群(六):Flume 安装

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...

随机推荐

  1. HTML5--div、span超出部分省略号显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Java被忽略的基本知识(四)

    Java IO(不是一般的重要) 54.IO中的流:字节流(InputStream.OutputStream).字符流(Reader.Writer).转换流(InputStreamReader.Out ...

  3. Java多线程开发系列之四:玩转多线程(线程的控制1)

    在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...

  4. Tanks坦克大战

    创建工程,场景: 将素材导入,Unity5以上的版本,无需担心素材包的路径问题,中文路径也可以直接导入了,简单方法就是将素材包直接拖到Project面板 游戏所需要的场景在Prefabs里的Level ...

  5. css中子元素浮动,无法自动撑开父元素的解决办法

    <div> <div style="float:left;">left</div> <div style="float:righ ...

  6. LigerUI 表单和表格中的combobox如何初始化值

    摘要: 在修改基础信息的时候,通常会遇到需要修改值为选择值的时候,这时候,数据库存的一般是value,而不是显示的text值,但页面显示的时候如果显示成数字型的值,通常会给人不够直观的感觉.因此,要求 ...

  7. 关于eclipse的一些配置

    在linux中打开的一刹那,第一感觉就是这货怎么这么丑,用的时候还发现,这货怎么这么慢. 可以通过使用GTK2来让它的图标显示得合理一些,可以调整内存的限制来减少fullGC的次数. 配置文件的路径: ...

  8. python学习笔记系列----(六)错误和异常

    python至少有2类不同的错误:语法错误(Syntax Errors)和异常(Exceptions). 8.1 语法错误 这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意 ...

  9. select in 在postgresql的效率问题

    在知乎上看到这样一个问题: MySQL 查询 select * from table where id in (几百或几千个 id) 如何提高效率?修改 电商网站,一个商品属性表,几十万条记录,80M ...

  10. xib加载的两种方式

      •Xib文件的加载 Ø方法1 NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"AppView" owner:nil ...