Docker安装Hadoop环境
Hadoop安装
# 需要提前安装ssh
$ apt-get install ssh
$ apt-get install openssh-server
# 设置免密码登录,生成私钥和公钥
$ ssh-keygen -t rsa -P ""
$ cat ~/.ssh/id_rsa.put >> ~/.ssh/authorized_keys
# 测试是否可以免密码登录
$ ssh localhost
# 下载Hadoop
$ curl -O http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz
# 解压Hadoop压缩包
$ tar -xf hadoop-2.7.1.tar.gz
Dockerfile文件
############################################
# version : birdben/hadoop:v1
# desc : 当前版本安装的hadoop
############################################
# 设置继承自我们创建的 jdk7 镜像
FROM birdben/jdk7:v1
# 下面是一些创建者的基本信息
MAINTAINER birdben (191654006@163.com)
# 设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 设置 hadoop 的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。
ENV HADOOP_HOME /software/hadoop-2.7.1
ENV PATH ${HADOOP_HOME}/bin:$PATH
# 复制 hadoop-2.7.1 文件到镜像中(hadoop-2.7.1 文件夹要和Dockerfile文件在同一路径)
ADD hadoop-2.7.1 /software/hadoop-2.7.1
# 创建HDFS存储路径
RUN mkdir -p $HADOOP_HOME/hdfs/name
RUN mkdir -p $HADOOP_HOME/hdfs/data
# 授权HADOOP_HOME路径给admin用户
RUN sudo chown -R admin /software/hadoop-2.7.1
# 容器需要开放Hadoop 9000端口
EXPOSE 9000
# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。
CMD ["/usr/bin/supervisord"]
Dockerfile源文件链接:
https://github.com/birdben/birdDocker/blob/master/hadoop/Dockerfile
supervisor配置文件内容
# 配置文件包含目录和进程
# 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。
# 第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
# 暂时没用使用supervsord启动Hadoop,因为没研究明白如何启动的时候不需要ssh输入密码,即使设置了ENV DEBIAN_FRONTEND noninteractive所有的操作的是非交互的也不好用,所以只能启动Docker容器之后手动再启动Hadoop
# [program:hadoop]
# command=$HADOOP_HOME/bin/hdfs namenode -format
# command=$HADOOP_HOME/sbin/start_all.sh
配置HADOOP_HOME/etc/hadoop/hadoop-env.sh,添加以下内容
export JAVA_HOME=/software/jdk7
export PATH=$PATH:/software/hadoop-2.7.1/bin
配置HADOOP_HOME/etc/hadoop/yarn-env.sh,添加以下内容
export JAVA_HOME=/software/jd