这一节将在《Dockerfile完成Hadoop2.6的伪分布式搭建》的基础上搭建一个完全分布式的Hadoop集群。

1. 搭建集群中需要用到的文件

[root@centos-docker hadoop-cluster]# ll
total 340648
# 用自动化构建集群的脚本
-rwxr-xr-x. root root Aug : build-cluster.sh
# 使用scp 来下载的文件的脚本
-rwxr-xr-x. root root Aug : download.sh
# 使用scp 来上传文件的脚本
-rwxr-xr-x. root root Aug : upload.sh
# 在集群构建完成后,每一次开启和关闭Docker集群的脚本
-rwxr-xr-x. root root Aug : cluster.sh
# 用来构建镜像的Dockerfile
-rw-r--r--. root root Aug : Dockerfile
# hadoop软件
-rwxr-x---. root root Aug : hadoop-2.6..tar.gz
# java JDK
-rwxr-x---. root root Aug : jdk-7u79-linux-x64.tar.gz
# hadoop的配置文件
-rw-r--r--. root root Aug : yarn-site.xml
-rw-r--r--. root root Aug : hdfs-site.xml
-rw-r--r--. root root Aug : core-site.xml
-rw-r--r--. root root Aug : mapred-site.xml
-rw-r--r--. root root Aug : slaves

2. Hadoop的配置文件内容:

  core-site.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/data/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>

  hdfs-site.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value></value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

  mapred-site.xml文件:

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

  yarn-site.xml文件:

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

3. Dockerfile内容解释

# build a new hadoop image with basic  centos
FROM centos
# who is the author
MAINTAINER amei ####################Configurate JDK################################
# 安装ssh(集群必要),iproute(内涵各种网络命令),which(没有这个命令,在执行hadoop的一些命令的时候就会报错)
# 同时建立存放JDK的目录
RUN yum -y install openssh-server openssh-clients iproute which && mkdir /usr/local/java # 通过ADD指令将JDK复制到,ADD这个指令会将压缩包自动解压
ADD jdk-7u79-linux-x64.tar.gz /usr/local/java/ ###################Configurate SSH#################################
# 生成必要的host key文件,否则,/usr/sbin/sshd将无法启动
RUN ssh-keygen -q -t rsa -b -f /etc/ssh/ssh_host_rsa_key -N '' && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' && ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' # 配置无密码登陆到本机,首相生成公私钥对,然后建立authorized_keys文件
RUN ssh-keygen -f /root/.ssh/id_rsa -N '' && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys ###################Configurate Hadoop##############################
# 将hadoop软件包copy到镜像中,同时会自动解压
ADD hadoop-2.6..tar.gz /usr/local/ # 建立hadoop文件夹的软连接
RUN ln -s /usr/local/hadoop-2.6. /usr/local/hadoop # 复制编辑好的配置文件到镜像中去,会直接覆盖镜像中原有的文件
COPY core-site.xml /usr/local/hadoop/etc/hadoop/
COPY hdfs-site.xml /usr/local/hadoop/etc/hadoop/
COPY mapred-site.xml /usr/local/hadoop/etc/hadoop/
COPY yarn-site.xml /usr/local/hadoop/etc/hadoop/
COPY slaves /usr/local/hadoop/etc/hadoop/ # 重新设置hadoop-env.sh中的JAVA_HOME变量,否则将无法正常启动集群
# 配置ssh_config文件中: StrictHostKeyChecking no, 可以消除ssh,scp等访问时询问yes/no。
# 配置sshd_config 文件中, UseDNS no , UseDNS 的默认值为 yes。 配置为no之后可以加速ssh,scp链接速度。
RUN sed -i "s?JAVA_HOME=\${JAVA_HOME}?JAVA_HOME=/usr/local/java/jdk?g" /usr/local/hadoop/etc/hadoop/hadoop-env.sh && \
sed -i "s?#\s\+StrictHostKeyChecking\s\+ask?StrictHostKeyChecking no?g" /etc/ssh/ssh_config && \
sed -i "s?#UseDNS yes?UseDNS no?g" /etc/ssh/sshd_config ################### Integration configuration #######################
# 这里配置镜像的环境变量,但是这样设置的环境变量只能在运行时使用/bin/bash时才会生效。当用ssh登录到容器后,这些变量将失效(坑爹的玩意)
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH ${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${JAVA_HOME}/bin:$PATH
# 当用ssh登录到容器后,上述设置的变量将失效,为了能够在ssh登陆时也能使用这些变量,将这些变量加入到root账户的.bash_profile文件中。
# 而且还有比较坑的是,export JRE_HOME=/usr/local/java/jdk/jre 不能写成 export JRE_HOME=${JAVA_HOME}/jre。其它的也是同理,所以一下配置中都是从绝对路径写起。(多么痛的领悟)
RUN ln -s /usr/local/java/jdk1.7.0_79 /usr/local/java/jdk && \
 echo "export JAVA_HOME=/usr/local/java/jdk" >> /root/.bash_profile && \
 echo "export JRE_HOME=/usr/local/java/jdk/jre" >> /root/.bash_profile && \
 echo "export CLASSPATH=.:/usr/local/java/jdk/lib:/usr/local/java/jdk/jre/lib" >> /root/.bash_profile && \
 echo "export HADOOP_HOME=/usr/local/hadoop" >> /root/.bash_profile && \
 echo "export PATH=/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/java/jdk/bin:$PATH" >> /root/.bash_profile
# 设置root账户的密码
RUN echo "root:1234" | chpasswd
# 设置容器启动时未指定要执行的时候,默认要的执行的命令
CMD ["/usr/sbin/sshd","-D"]

4. 自动化集群建立过程

  自动化的构建集群通过build-cluster.sh脚本完成。

  其中只要在脚本执行过程中输入Datanode 的个数,并可以自动通过Dockerfile生成镜像文件,然后通过镜像建立容器集群,再配置网络。

#!/bin/bash

# 单个节点镜像的名称
IMAGE=hadoop-cluster
echo "The hostname of namenode will be master"
echo "How many datanode would you want? Please enter:"
# 读入Datanode的个数
read num
echo "the hostname of datanode will be:"
if [ -f "slaves" ]; then
rm -f slaves
fi

# namenode 主机名直接配置为master,并将其加入到hadoop配置文件中的slaves文件,以及容器的配置文件hosts。
# (此时这两文件在本地,配置完成后会上传到容器中)
if [ -f "hosts" ]; then
rm -f hosts
echo "127.0.0.1 localhost" >> hosts
echo "192.168.1.10 master" >> hosts
fi # 配置hadoop中的slaves文件,说明有哪些是datanode
# 其中每一个datanode容器的主机名都为slave再接上一个数字,主机的ip所在的网络为: 192.168.1.0/24
for count in $(seq $num)
do
echo "slave$count"
echo "slave$count" >> slaves
echo 192.168.1.1$count" "slave$count >> hosts
done # 因为要重新建立镜像,所以停止以前的容器所用镜像名为hadoop-cluster的容器,并将这些容器删除
echo "stop and remove the relevant containers.."
names=(`docker ps -a | grep $IMAGE | awk '{print $1}'`)
for name in ${names[*]}
do
echo $name
docker stop $name
docker rm $name
done # 删除旧版的镜像名为hadoop-cluster镜像(如果存在)
cluster=`docker images | grep $IMAGE`
if [ -z "$cluster" ]; then
echo "the $IMAGE image is not existed!"
else
echo "removing the $IMAGE..."
docker rmi $IMAGE
fi # 通过上述的Dockerfile构建新的镜像名为hadoop-cluster的镜像
echo "build the $IMAGE image..."
docker build -t "$IMAGE" . # 容器和主机可能会可能会与主机共享文件,先建立共享的文件夹(不同的容器的主机名对应不同的文件夹)
echo "creating the namenode master..."
if [ ! -d "/data/share" ]; then
mkdir -p /data/share
fi
if [ ! -d "/data/share/master" ]; then
mkdir /data/share/master
fi # 后边的配置会用到br0虚拟网桥,如果存在就先将其删除
ip link set br0 down
ip link delete br0
# 删除主机中的~/.ssh/known_hosts文件,不然可能会报这样的错误: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!。。。rm -f ~/.ssh/known_hosts
# 建立namenode容器,其主机名为master
docker run -itd -p : -p : --name=master --hostname=master --privileged=true --net=none -v /data/share/master:/opt/share $IMAGE
# 通过pipework为容器设置固定IP(重新开启容器将不存在)
pipework br0 master 192.168.1.10/@192.168.1.1

# 创建并配置datanode容器
echo "creating the datanodes.."
for count1 in $(seq $num)
do
nodename=slave$count1
addr=192.168.1.1$count1
# 建立共享目录
if [ ! -d "/data/share/$nodename" ]; then
mkdir /data/share/$nodename
fi
docker run -itd --name=$nodename --hostname=$nodename --privileged=true --net=none -v /data/share/$nodename:/opt/share $IMAGE
# 设置固定IP
  pipework br0 $nodename $addr/@192.168.1.1
done # 为虚拟网桥br0添加IP,同时会增加通往192.168.1.0/24子网的路由。
ip addr add 192.168.1.1/ broadcast + dev br0 # 先删除文件夹下的authorized_keys文件if [ -f "authorized_keys" ]; then
rm -f authorized_keys
fi
# 先将每个主机中的id_rsa.pub中的内容先下载到到此文件夹下,然后将其中的内容加入到的authorized_keys文件中
# 然后在将authorized_keys放置到每个容器的 ~/.ssh/中,这样每个容器之间就可以完成免密码登陆
# 脚本download.sh和upload.sh中使用expect命令,来完成登陆过程中不用输入密码,在脚本中事先指定密码。
for ((i=; i<=$num; i++))
do
addr=192.168.1.1$i
./download.sh $addr ~/.ssh/id_rsa.pub ./rsa_tmp
cat rsa_tmp >> authorized_keys
rm -f rsa_tmp
done
# 将hosts以及authorized_keys文件复制到每个容器的指定位置中去
for ((i=; i<=$num; i++))
do
addr=192.168.1.1$i
./upload.sh $addr authorized_keys ~/.ssh/
./upload.sh $addr hosts /etc/hosts
done

5. scp 指定密码登陆,不用交互式的手动输入面

  scp下载文件:

#!/usr/bin/expect -f

# 第一个参数为ip地址
set addr [lrange $argv ]
# 第二个参数为 要下载的文件的完整路径名
set source_name [lrange $argv ]
# 保存到本地的位置或者是新名字
set dist_name [lrange $argv ]
set password spawn scp root@$addr:$source_name ./$dist_name
set timeout
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$password\r" }
}
send "exit\r"
expect eof

  scp上传文件:

#!/usr/bin/expect -f

set addr [lrange $argv  ]
set source_name [lrange $argv ]
set dist_name [lrange $argv ]
set password spawn scp $source_name root@$addr:$dist_name
set timeout
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$password\r" }
}
send "exit\r"
expect eof

6. 测试:

  直接在文件夹下输入: ./build-cluster.sh命令,然后输入想要的DataNode的数量, 就会自动完成Hadoop集群的搭建。

aaarticlea/png;base64,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" alt="" />

  所建立的容器aaarticlea/png;base64,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" alt="" />

  登陆到master格式化namenode。

[root@centos-docker ~]# ssh root@master
Warning: Permanently added 'master' (ECDSA) to the list of known hosts.
root@master's password:
[root@master ~]# hdfs namenode -format
// :: INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master/192.168.1.10
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.6.0
。。。。。。。。。。。。。。。

  开启hadoop

[root@master ~]# start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: Warning: Permanently added 'master,192.168.1.10' (ECDSA) to the list of known hosts.
master: starting namenode, logging to /usr/local/hadoop-2.6./logs/hadoop-root-namenode-master.out
slave2: Warning: Permanently added 'slave2,192.168.1.12' (ECDSA) to the list of known hosts.
slave3: Warning: Permanently added 'slave3,192.168.1.13' (ECDSA) to the list of known hosts.
slave1: Warning: Permanently added 'slave1,192.168.1.11' (ECDSA) to the list of known hosts.
slave3: starting datanode, logging to /usr/local/hadoop-2.6./logs/hadoop-root-datanode-slave3.out
slave2: starting datanode, logging to /usr/local/hadoop-2.6./logs/hadoop-root-datanode-slave2.out
slave1: starting datanode, logging to /usr/local/hadoop-2.6./logs/hadoop-root-datanode-slave1.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.6./logs/hadoop-root-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop-2.6./logs/yarn-root-resourcemanager-master.out
slave2: starting nodemanager, logging to /usr/local/hadoop-2.6./logs/yarn-root-nodemanager-slave2.out
slave1: starting nodemanager, logging to /usr/local/hadoop-2.6./logs/yarn-root-nodemanager-slave1.out
slave3: starting nodemanager, logging to /usr/local/hadoop-2.6./logs/yarn-root-nodemanager-slave3.out

7. 其它

  构建hadoop集群的所有文件都已经上传到百度云中。解压之后之后直接在文件夹下执行./build-cluster.sh 就可以完成集群的搭建。

注意: 在系统中要事先安装好docker,并且有名为centos的镜像,并且安装了pipework,expect,以及iproute,bridge-utils软件。

  将build-cluster.sh文件中的 docker build -t "hadoop-cluster" . 前边的注释去掉

  分享地址: http://pan.baidu.com/s/1bp1GGph

Docker中自动化搭建Hadoop2.6完全分布式集群的更多相关文章

  1. 亿级Web系统搭建:单机到分布式集群

    亿级Web系统搭建:单机到分布式集群 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压 ...

  2. hadoop2.7全然分布式集群搭建以及任务測试

    要想深入的学习hadoop数据分析技术,首要的任务是必需要将hadoop集群环境搭建起来,本文主要讲述怎样搭建一套hadoop全然分布式集群环境. 环境配置:2台64位的redhat6.5 +  1台 ...

  3. Spark(二)CentOS7.5搭建Spark2.3.1分布式集群

    一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2  安装前提 Java8         安装成功 zookeeper  安 ...

  4. Ganglia环境搭建并监控Hadoop分布式集群

    简介 Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源.通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考. 环境搭建流程 1 ...

  5. [转]亿级Web系统搭建:单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  6. 亿级Web系统搭建:单机到分布式集群【转】

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  7. 一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明

     很幸运参与零售云快消平台的公有云搭建及孵化项目.零售云快消平台源于零售云家电3C平台私有项目,是与公司业务强耦合的.为了适用于全场景全品类平台,集团要求项目平台化,我们抢先并承担了此任务.并由我来主 ...

  8. Windows10+VMware Workstation Pro+Ubuntu 16.04+Hadoop-2.6.5+IDEA环境搭建(单机&伪分布式&集群)

    (注:下面出现的"czifan"为用户名,需替换成自己的用户名) 本篇博客是在实践该篇博客的过程中的一些补充和修改~ 0 - 安装VMware Workstation Pro 首先 ...

  9. hadoop-2.7.2 分布式集群搭建

    1.机器信息 五台centos 64位机器 2.集群规划 Server Name Hadoop Cluster Zookeeper   Ensemble HBase Cluster Hadoop01 ...

随机推荐

  1. September 25th 2016 Week 40th Sunday

    Everything is good in its season. 万物逢时皆美好. Don't lose hope. Remeber that even a dog has its day. Onc ...

  2. August 8th 2016, Week 33rd Monday

    Everything is going on, but don't give up trying. 万事随缘,但不要放弃努力. Every time when I want to give up, y ...

  3. !带有指针的类和struct赋值的本质 - host to device

    //这个变量必须在while循环外面 //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后 //里面的数值拷贝过去了,而里头的指针只给了地址 //所以如果这个 ...

  4. 51nod1057(python2计算n!)

    题目链接:www.51nod.com/onlineJudge/questionCode.html#!problemId=1057 思路:直接for循环呗- 代码: n = int( raw_input ...

  5. poj2912(种类并查集+枚举)

    题目:http://poj.org/problem?id=2912 题意:n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000),接下来m行形如x, y, ch ...

  6. Swift - 代码创建单例

    创建单例的方法 import UIKit //创建一个单例类 class SingleInstance: NSObject { //在单例类中,有一个用来共享数据的数组 var datas = [St ...

  7. Mac平台下Opencv开发环境搭建

    OpenCV(Open Source Computer Vision Library),是一个开源的跨平台的计算机视觉库,它实现了图像处理和计算机视觉领域的很多通用算法,可以在多种计算机平台上运行,支 ...

  8. mysql 只导数据不含表结构

    mysqldump -t 数据库名 -uroot -p > xxx.sql

  9. 与你相遇好幸运,Waterline的属性

    >支持的数据类型: string / text / integer / float / date / time / datetime / boolean / binary / array / j ...

  10. C语言的OOP实践(OOC)

    OOC 面向对象 C 语言编程实践 - 文章 - 伯乐在线http://blog.jobbole.com/105105/ ---硬着头皮看完了,但是感觉还是抽象有不理解的地方,感觉用C实现OOP好难啊 ...