Docker中自动化搭建Hadoop2.6完全分布式集群
这一节将在《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完全分布式集群的更多相关文章
- 亿级Web系统搭建:单机到分布式集群
亿级Web系统搭建:单机到分布式集群 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压 ...
- hadoop2.7全然分布式集群搭建以及任务測试
要想深入的学习hadoop数据分析技术,首要的任务是必需要将hadoop集群环境搭建起来,本文主要讲述怎样搭建一套hadoop全然分布式集群环境. 环境配置:2台64位的redhat6.5 + 1台 ...
- Spark(二)CentOS7.5搭建Spark2.3.1分布式集群
一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2 安装前提 Java8 安装成功 zookeeper 安 ...
- Ganglia环境搭建并监控Hadoop分布式集群
简介 Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源.通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考. 环境搭建流程 1 ...
- [转]亿级Web系统搭建:单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...
- 亿级Web系统搭建:单机到分布式集群【转】
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...
- 一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明
很幸运参与零售云快消平台的公有云搭建及孵化项目.零售云快消平台源于零售云家电3C平台私有项目,是与公司业务强耦合的.为了适用于全场景全品类平台,集团要求项目平台化,我们抢先并承担了此任务.并由我来主 ...
- Windows10+VMware Workstation Pro+Ubuntu 16.04+Hadoop-2.6.5+IDEA环境搭建(单机&伪分布式&集群)
(注:下面出现的"czifan"为用户名,需替换成自己的用户名) 本篇博客是在实践该篇博客的过程中的一些补充和修改~ 0 - 安装VMware Workstation Pro 首先 ...
- hadoop-2.7.2 分布式集群搭建
1.机器信息 五台centos 64位机器 2.集群规划 Server Name Hadoop Cluster Zookeeper Ensemble HBase Cluster Hadoop01 ...
随机推荐
- 20145213《Java程序设计》第五周学习总结补充
20145213<Java程序设计>第五周学习总结补充 教材学习内容总结 欠的账都是要还的!第九章的内容躲过对酒当歌的夜,躲不过四下无人的街.由于第五周贪玩,疏忽冷落了Collection ...
- C++多线程编程(入门实例)
多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平. 其实C++语言本身并没有提供多线程机制(当然目前C++ 11 ...
- Shell之变量操作
1.定义变量:为了避免与环境变量冲突,一般用小写:如pp="mydql,kdkfeof"; 第二赋值方案: 调用变量使用$符号: 变量叠加: 2.输出采用echo,如上图所示: 3 ...
- Innodb之表空间转移
我们可以将数据表转移到其他磁盘,以减弱单个磁盘的IO. 如 1创建一个表空间: 2修改表以使用新的表空间,如果表有大量数据,则会需要一些时间重建:所以会锁表一段时间: Note:会将原有的表空间删除, ...
- C++中实现对象的clone()
在C#中,许多对象自动实现了clone函数,在C++中,要拷贝一个对象,除了自定义一个拷贝构造函数来实现对象复制外,还可以像C#中那样实现一个clone函数,这需要借助编译器实现的一个隐藏拷贝构造函数 ...
- 清除Windows系统桌面快捷方式小箭头
清除Windows桌面快捷方式小箭头,需要重启,且不会导致软件无法锁定到任务栏.新建.reg的注册表文件,命名随意,内容如下: Windows Registry Editor Version 5.00 ...
- 关于KVC、KVO
KVC/KVO --------------------KVC--键值编码-------------------作用:通过字符串来描述对象的属性间接修改对象的属性 Student *stu=[[Stu ...
- jquery学习笔记-----插件开发的编写总结
一.对jQuery对象的扩展 ;(function($){ $.fn.extend( { fun1:abc,fun2:1bc … } ) })(jQuery) 这里采用立即执行模式,即不用调用也能执 ...
- SQLServer内置函数
类型转换函数cast和convert --cast一般更容易使用,convert的优点是可以格式化日期和数值 select CAST('123.4' as int) --失败 select CONVE ...
- HTML5学习之跨文档传输消息(七)
新标准中提供了文档之间直接的消息传输API.而且不限制跨域消息传递! 发送消息使用的是Window对象的postMessage(data,targetURL)方法就可以了,但给哪个window对象发送 ...