docker-compose 部署hadoop集群
1、创建自己的centos镜像FROM centosMAINTAINER summerCOPY jdk1.8.0_121 /usr/local/jdk1.8RUN yum install -y openssh-serverRUN yum install -y which.x86_64RUN yum install -y openssh-clients
1、创建自己的centos镜像
FROM centos
MAINTAINER summer
COPY jdk1.8.0_121 /usr/local/jdk1.8
RUN yum install -y openssh-server
RUN yum install -y which.x86_64
RUN yum install -y openssh-clients
RUN echo "root:root" | 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 ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN mkdir /var/run/sshd
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
使用docker官方提供的centos为基础镜像,安装openssh-server和openssh-clients,which.x86_64
docker build -t "summer/centos" ./
构建镜像,命名为summer/centos
2、基于summer/centos创建namenode和datanode镜像,hive需要hadoop的存在,所以把hive部署到namenode里,因此,需要构建两个镜像,一个是带hive的namenode,一个是不带hive的datanode
FROM summer/centos
COPY hadoop-2.7.3 /usr/local/hadoop
COPY hive-2.1.1 /usr/local/hive
COPY start.sh /root/start-all.sh
RUN chmod 744 /root/start-all.sh
ENV HADOOP_HOME /usr/local/hadoop
ENV HADOOP_PREFIX /usr/local/hadoop
ENV HADOOP_COMMON_HOME /usr/local/hadoop
ENV HADOOP_MARPED_HOME /usr/local/hadoop
ENV HIVE_HOME=/usr/local/hive
ENV PATH $HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$PATH
docker build -t "summer/master" ./
start.sh用来启动hadoop集群和hive
#!/bin/sh
/usr/local/hadoop/sbin/start-all.sh
这里没有加入hive的启动命令,可以自行添加
FROM summer/centos-jdk
COPY hadoop-2.7.3 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV HADOOP_PREFIX /usr/local/hadoop
ENV HADOOP_COMMON_HOME /usr/local/hadoop
ENV HADOOP_MARPED_HOME /usr/local/hadoop
这是构建datanode的dockerfile
其中,namenode使用的hadoop和datanode使用的hadoop是同一个,需要提前修改好相关配置文件
3、然后创建docker-compose.yml文件
version: '3'
services:
master:
image: summer/master
container_name: master
hostname: master
links:
- datanode1:master1
- datanode2:master2
- mysql:mysql
depends_on:
- mysql
datanode1:
image: summer/datanode
hostname: datanode1
container_name: datanode1
datanode2:
image: summer/datanode
hostname: datanode2
container_name: datanode2
mysql:
image: mysql:latest
ports:
- 3307:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
hue:
image: gethue/hue
container_name: hue
ports:
- 8888:8888
我这里配置的Hive使用mysql存放元数据,所以使用到mysql镜像。同时,使用gethue/hue镜像提供Hue来管理hadoop集群。
4、执行docker-compose up 命令,会依次创建、拉取相关镜像后启动容器。
5、对于hadoop集群内的主机,需要提供免密登录,所以需要单独进入namenode,datanode节点,进行ssh-keygen 操作,使得部署了hadoop的主机之间能够免密登录。
因为在docker-compose.yml文件里,已经为hadoop主机之间建立了link(网络内连接),所以生成ssh公钥后,可以直接通过ssh-copy-id 在主机内拷贝公钥文件。
6、访问mysql容器,创建hive需要用到的数据库
7、编写集群启动脚本
#!/bin/bash
docoker-compose start
docoker-compose exec -d master /root/start-all.sh
start-all.sh
通过docker-compose管理hadoop集群就完成了
更多推荐
所有评论(0)