docker 搭建hadoop以及hbase集群详解

要用docker搭建集群,首先需要构造集群所需的docker镜像。构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后commit容器到新的镜像。另一种方式是,使用Dockerfile来自动化的构造镜像。

下面采用第二种.

1. 创建带ssh服务的ubuntu14.04系统镜像

使用ubuntu14系统来安装hadoop和hbase,由于hadoop集群机器之间通过ssh通信,所以需要在ubuntu14系统中安装ssh服务。

编写Dockerfile如下:

############################################

# version : debugman007/ssh:v1

# desc : ubuntu14.04 上安装的ssh

############################################

# 设置继承自ubuntu14.04官方镜像

FROM ubuntu:14.04 

# 下面是一些创建者的基本信息

MAINTAINER debugman007 (skc361@163.com)

RUN rm -vf /var/lib/apt/lists/*

RUN apt-get update 

RUN apt-get install -y openssh-server openssh-client vim wget curl sudo

#添加用户 test,设置密码为 test, 赋予sudo权限

RUN useradd -m test 

RUN echo "test:test" | chpasswd

RUN cd /etc/sudoers.d && touch nopasswdsudo && echo "test ALL=(ALL) ALL" >> nopasswdsudo

#把test用户的shell改成bash,否则ssh登录ubuntu服务器,命令行不显示用户名和目录

RUN usermod -s /bin/bash test

RUN echo "root:root" | chpasswd

#配置ssh

RUN mkdir /var/run/sshd

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"

RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22

USER test

RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

USER root

RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

创建好的系统镜像位于:https://hub.docker.com/r/debugman007/ubt14-ssh/

Dockerfile 位于:https://github.com/gtarcoder/dockerfiles/blob/master/ubt14-ssh/Dockerfile

2. 创建hadoop和hbase基本镜像

编写Dockerfile如下:

############################################

# version : debugman007/ubt14-hadoop-hbase:v1

# desc : ubuntu上安装的ssh,java, hadoop 

############################################

FROM debugman007/ubt14-ssh:v1

# 下面是一些创建者的基本信息

MAINTAINER debugman007 (skc361@163.com)

#为hadoop集群提供dns服务

RUN sudo apt-get -y install dnsmasq

#安装和配置java环境

#RUN yum -y install java-1.7.0-openjdk*

ADD http://mirrors.linuxeye.com/jdk/jdk-7u80-linux-x64.tar.gz /usr/local/ 

RUN cd /usr/local && tar -zxvf jdk-7u80-linux-x64.tar.gz && rm -f jdk-7u80-linux-x64.tar.gz

ENV JAVA_HOME /usr/local/jdk1.7.0_80

ENV CLASSPATH ${JAVA_HOME}/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH $PATH:${JAVA_HOME}/bin

#安装和配置 hadoop

RUN groupadd hadoop

RUN useradd -m hadoop -g hadoop

RUN echo "hadoop:hadoop" | chpasswd

ADD http://www-eu.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz /usr/local/

RUN cd /usr/local && tar -zxvf hadoop-2.7.3.tar.gz && rm -f hadoop-2.7.3.tar.gz

RUN chown -R hadoop:hadoop /usr/local/hadoop-2.7.3

RUN cd /usr/local && ln -s ./hadoop-2.7.3 hadoop

ENV HADOOP_PREFIX /usr/local/hadoop

ENV HADOOP_HOME /usr/local/hadoop

ENV HADOOP_COMMON_HOME /usr/local/hadoop

ENV HADOOP_HDFS_HOME /usr/local/hadoop

ENV HADOOP_MAPRED_HOME /usr/local/hadoop

ENV HADOOP_YARN_HOME /usr/local/hadoop

ENV HADOOP_CONF_DIR /usr/local/hadoop/etc/hadoop

ENV PATH ${HADOOP_HOME}/bin:$PATH

ADD http://www-eu.apache.org/dist/hbase/1.2.4/hbase-1.2.4-bin.tar.gz /usr/local/

RUN cd /usr/local && tar -zxvf hbase-1.2.4-bin.tar.gz && rm -f hbase-1.2.4-bin.tar.gz 

RUN chown -R hadoop:hadoop /usr/local/hbase-1.2.4

RUN cd /usr/local && ln -s ./hbase-1.2.4 hbase

ENV HBASE_HOME /usr/local/hbase

ENV PATH ${HBASE_HOME}/bin:$PATH

RUN echo "hadoop ALL= NOPASSWD: ALL" >> /etc/sudoers

USER hadoop

RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

创建好的镜像位于:https://hub.docker.com/r/debugman007/ubt14-hadoop-hbase/

Dockerfile 位于:https://github.com/gtarcoder/dockerfiles/blob/master/ubt14-hadoop-hbase/Dockerfile

3. 给hadoop,hbase镜像进行配置

Dockerfile 如下:

############################################

# version : debugman007/ubt14-hadoop-hbase:master

# desc : ubuntu上安装的ssh,java, hadoop, hbase

############################################

FROM debugman007/ubt14-hadoop-hbase:base

# 下面是一些创建者的基本信息

MAINTAINER debugman007 (skc361@163.com)

ADD hadoop-env.sh $HADOOP_HOME/etc/hadoop/ 

ADD mapred-env.sh $HADOOP_HOME/etc/hadoop/ 

ADD yarn-env.sh $HADOOP_HOME/etc/hadoop/ 

ADD core-site.xml $HADOOP_HOME/etc/hadoop/ 

ADD hdfs-site.xml $HADOOP_HOME/etc/hadoop/ 

ADD mapred-site.xml $HADOOP_HOME/etc/hadoop/ 

ADD yarn-site.xml $HADOOP_HOME/etc/hadoop/ 

ADD slaves $HADOOP_HOME/etc/hadoop/ 

ADD hbase-env.sh $HBASE_HOME/conf/

ADD hbase-site.xml $HBASE_HOME/conf/

ADD regionservers $HBASE_HOME/conf/

USER hadoop

RUN sudo mkdir -p /opt/hadoop/data/zookeeper

RUN sudo chown -R hadoop:hadoop $HADOOP_HOME/etc/hadoop 

RUN sudo chown -R hadoop:hadoop $HBASE_HOME/conf

RUN sudo chown -R hadoop:hadoop /opt/hadoop 

RUN sudo chown -R hadoop:hadoop /home/hadoop 

COPY bootstrap.sh /home/hadoop/ 

RUN chmod 766 /home/hadoop/bootstrap.sh 

ENTRYPOINT ["/home/hadoop/bootstrap.sh"] 

CMD ["/bin/bash"]

除了Dockerfile文件,还需要hadoop和hbase的一些配置文件,包括 core-site.xml, hadoop-env.sh, hbase-env.sh, hbase-site.xml, hdfs-site.xml, mapred-env.sh, regionservers, slaves, yarn-env.sh, yarn-site.xml等。

创建好的镜像位于:https://hub.docker.com/r/debugman007/ubt14-hadoop-hbase/

Dockerfile以及配置文件位于:https://github.com/gtarcoder/dockerfiles/tree/master/ubt14-hadoop-hbase-v1

4. 启动

(1)启动一个容器作为hadoop master节点:

docker run -it --name hadoop-master -h hadoop-master -d -P -p 50070:50070 -p 8088:8088 debugman007/ubt14-hadoop-hbase:v1

(2)启动三个容器作为hadop slave节点

docker run -it --name hadoop-slave1 -h hadoop-slave1 debugman007/ubt14-hadoop-hbase:v1

三个容器名和容器内的主机名分别设为 hadoop-slave1, hadoop-slave2, hadoop-slave3.

(3)设置各个节点的/etc/hosts文件

编辑一个run_hosts.sh 脚本文件,用来设置各个节点的名称解析。假设hadoop-master容器内的IP地址为10.0.1.2, hadoop-slave1/2/3 的IP地址分别为10.0.1.3/4/5.

#!/bin/bash

echo 10.0.1.2 hadoop-master >> /etc/hosts

echo 10.0.1.3 hadoop-slave1 >> /etc/hosts

echo 10.0.1.4 hadoop-slave2 >> /etc/hosts

echo 10.0.1.5 hadoop-slave3 >> /etc/hosts

echo 10.0.1.3 regionserver1 >> /etc/hosts #hbase的regionserver服务器

echo 10.0.1.4 regionserver2 >> /etc/hosts

在hadoop-master和hadoop-salve1/2/3容器中都执行该脚本。

(4)进入hadoop-master容器

docker exec -it hadoop-master bash

然后在容器内 /usr/local/hadoop/sbin 目录下执行:

hdfs namenode -format
./start-dfs.sh
./start-yarn.sh

启动hadoop服务。

在容器内执行 start-hbase.sh 启动hbase服务。

(5)在 hadoop-master 节点和hadoop-slave节点内查看服务是否正常启动

在各个节点容器内都执行 jps 查看,发现在mster节点中出现

Jps, ResourceManager, NameNode, SecondaryNamenode, HMaster等服务;

在slave节点中出现 Jps, DataNode, NodeManager, HRegionServer等服务。

出现以上服务,说明集群正常启动。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Hadoop编程基于MR程序实现倒排索引示例

    相信接触过搜索引擎开发的同学对倒排索引并不陌生,谷歌.百度等搜索引擎都是用的倒排索引,关于倒排索引的有关知识,这里就不再深入讲解,有兴趣的同学到网上了解一下.这篇博文就带着大家一起学习下如何利用Hadoop的MR程序来实现倒排索引的功能. 一.数据准备 1.输入文件数据 这里我们准备三个输入文件,分别如下所示 a.txt hello tom hello jerry hello tom b.txt hello jerry hello jerry tom jerry c.txt hello jerr

  • VMware虚拟机下hadoop1.x的安装方法

    这是Hadoop学习全程记录第1篇,在这篇里我将介绍一下如何在Linux下安装Hadoop1.x. 先说明一下我的开发环境: 虚拟机:VMware8.0: 操作系统:CentOS6.4: 版本:jdk1.8:hadoop1.2.1 ①下载hadoop1.2.1,网盘:链接: https://pan.baidu.com/s/1sl5DMIp 密码: 5p67 下载jdk1.8,网盘:链接: https://pan.baidu.com/s/1boN1gh5 密码: t36h 将 jdk-8u144-

  • hadoop格式化HDFS出现错误解决办法

    hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.UnknownHostException: centos-wang: centos-wang: unknown error 在执行hadoop namenode -format命令时,出现未知的主机名. 问题原因: 出现这种问题的原因是Hadoop在格式化HDFS的时候,通过hostname命令获取到的主机名与/etc/hosts文件中进行映射的时候,没有找到. 解决方案: 1.修改/etc/hosts内容 2.

  • Hadoop对文本文件的快速全局排序实现方法及分析

    一.背景 Hadoop中实现了用于全局排序的InputSampler类和TotalOrderPartitioner类,调用示例是org.apache.hadoop.examples.Sort. 但是当我们以Text文件作为输入时,结果并非按Text中的string列排序,而且输出结果是SequenceFile. 原因: 1) hadoop在处理Text文件时,key是行号LongWritable类型,InputSampler抽样的是key,TotalOrderPartitioner也是用key去

  • ASP.NET实现Hadoop增删改查的示例代码

    本文介绍了ASP.NET实现Hadoop增删改查的示例代码,分享给大家,具体如下: packages.config <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20505.0" targetFramework="net

  • 浅谈七种常见的Hadoop和Spark项目案例

    有一句古老的格言是这样说的,如果你向某人提供你的全部支持和金融支持去做一些不同的和创新的事情,他们最终却会做别人正在做的事情.如比较火爆的Hadoop.Spark和Storm,每个人都认为他们正在做一些与这些新的大数据技术相关的事情,但它不需要很长的时间遇到相同的模式.具体的实施可能有所不同,但根据我的经验,它们是最常见的七种项目. 项目一:数据整合 称之为"企业级数据中心"或"数据湖",这个想法是你有不同的数据源,你想对它们进行数据分析.这类项目包括从所有来源获得

  • hadoop动态增加和删除节点方法介绍

    上一篇文章中我们介绍了Hadoop编程基于MR程序实现倒排索引示例的有关内容,这里我们看看如何在Hadoop中动态地增加和删除节点(DataNode). 假设集群操作系统均为:CentOS 6.7 x64 Hadoop版本为:2.6.3 一.动态增加DataNode 1.准备新的DataNode节点机器,配置SSH互信,可以直接复制已有DataNode中.ssh目录中的authorized_keys和id_rsa 2.复制Hadoop运行目录.hdfs目录及tmp目录至新的DataNode 3.

  • Hadoop上Data Locality的详解

    Hadoop上Data Locality的详解 Hadoop上的Data Locality是指数据与Mapper任务运行时数据的距离接近程度(Data Locality in Hadoop refers to the"proximity" of the data with respect to the Mapper tasks working on the data.) 1. why data locality is imporant? 当数据集存储在HDFS中时,它被划分为块并存储在

  • Hadoop 中 HBase Shell命令的详解

    Hadoop 中 HBase Shell命令的详解 HBase包含可以与HBase进行通信的Shell. HBase使用Hadoop文件系统来存储数据.所有这些任务发生在HDFS.下面给出的是一些由 常用的HBase Shell命令. 数据操纵语言 命令 说明 命令表达式 create 创建一个表 create '表名称', '列名称1','列名称2','列名称N' put  添加记录 put '表名称', '行名称', '列名称:', '值' get  查看记录 get '表名称', '行名称

  • docker 搭建hadoop以及hbase集群详解

    要用docker搭建集群,首先需要构造集群所需的docker镜像.构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后commit容器到新的镜像.另一种方式是,使用Dockerfile来自动化的构造镜像. 下面采用第二种. 1. 创建带ssh服务的ubuntu14.04系统镜像 使用ubuntu14系统来安装hadoop和hbase,由于hadoop集群机器之间通过ssh通信,所以需要在ubuntu14系统中安装ssh

  • linux系统安装hadoop真分布式集群详解

    Hadoop真分布式完全集群安装,基于版本2.7.2安装,在两台Linux机器上面分别安装Hadoop的master和slave节点. 1.安装说明 不管NameNode还是DataNode节点,安装的用户名需要一致.master和slave的区别,只是在于配置的hostname,在config的slaves配置的hostname所代表的机器即为slave,不使用主机名也可以,直接配置为IP即可.在这种集群下面,需要在master节点创建namenode路径,并且使用格式化命令hdfs name

  • 基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程图解

    一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,故下面先进行讲解: 1.1 高可用整体架构 HDFS 高可用架构如下: 图片引用自: https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-hi

  • 使用Docker搭建Redis主从复制的集群

    在主从复制模式的集群里,主节点一般是一个,从节点一般是两个或多个,写入主节点的数据会被复制到从节点上,这样一旦主节点出现故障,应用系统能切换到从节点去读写数据,这样能提升系统的可用性.而且如果再采用主从复制模式里默认的读写分离的机制,更能提升系统的缓存读写性能.所以对性能和实时性不高的系统而言,主从复制模式足以满足一般的性能和安全性方面的需求. 1 概述主从复制模式 在实际应用中,如果有相应的设置,在向一台Redis服务器里写数据后,这个数据可以复制到另外一台(或多台)Redis服务器,这里数据

  • Docker搭建RabbitMq的普通集群和镜像集群的详细操作

    目录 一.搭建RabbitMq的运行环境 1.通过search查询rabbitmq镜像 2.通过pull拉取rabbitmq的官方最新镜像 3.创建容器 4.启动管理页面 5.设置erlang cookie 二.普通模式 三.镜像模式 普通集群:多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.交换器结构.vhost等.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化,那么得等

  • docker搭建redis主从哨兵集群的实现步骤

    目录 1:获取redis镜像 2:创建redis主从+哨兵docker-compose文件 3:redis配置和哨兵配置说明 4:启动docker-compose 5:查看启动情况 6:进入主节点查看集群情况 本文以docker-compose 搭建高可用Redis 主从.哨兵集群为例子 关于redis主从,哨兵集群原理参见:Redis 单机安装/ 哨兵模式集群安装 1:获取redis镜像 docker pull redis:6.2.7 2:创建redis主从+哨兵docker-compose文

  • Redis集群详解

    Redis集群详解 Redis有三种集群模式,分别是: * 主从模式 * Sentinel模式 * Cluster模式 三种集群模式各有特点,关于Redis介绍可以参考这里:NoSQL(二)--Redis Redis官网:https://redis.io/ ,最新版本6.0.5 主从模式 主从模式介绍 主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave). 其中主从复制有如下特点: * 主数据库可以进行读写操作,当读写操作导致数据变化时会自

  • 使用 Docker 搭建 Laravel 本地环境的教程详解

    Laravel 官方提供 Homestead 和 Valet 作为本地开发环境,Homestead 是一个官方预封装的 Vagrant Box,也就是一个虚拟机,但是跟 docker 比,它占用体积太大,启动速度慢,同时响应速度很慢,现在有了 docker 这种更好的方式,可以轻松方便的搭建整套 PHP 开发环境. 本文就介绍如何使用 docker 搭建 Laravel 本地环境. 安装 docker 首先安装 docker. 克隆 laradock laradock 官方文档: http://

  • LINUX中NGINX反向代理下的TOMCAT集群(详解)

    Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点. 这次Nginx安装在 192.168.1.108 这台linux 机器上.安装Nginx 先要装openssl库,gcc,PCRE,zlib库等. Tomcat 安装在192.168.1.168 和 192.168.1.178 这两台机器上.客户端通过访问192.168.1.108 反向代理访问到 192.168.1.168 和 192.168.1.178 里Tomcat 部署的工程内容. 1.Linux 下安装Nginx (机器

  • Linux学习教程之redis哨兵集群详解

    前言 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在redis2.4+的版本中,下面话不多说了,来一起看看详细的介绍吧 1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器. 例如: 在Server1 掉线后

随机推荐