这一节将在《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,iVBORw0KGgoAAAANSUhEUgAABAQAAADWCAIAAADJvMePAAAgAElEQVR4nO2d27Wrug5AaSrtUE2KoYBTwP1OLbuI+7ES4odetgmBMOc4H2evGFuWZVkyBqYJvsm8/LNZ5m+LCAnzwpj4YNUAAAAA8IOQDAAAAAAAXBSSAQAAAPgtyhv6BDqn4HZ/bDlYx41xb/fHv3+P+239/5Tn33eQ4AqqBgAAgCty/GQgCwF3Cf9OwFUi1Nv98RYsnAzc7o/nb9n1AyJcQNUAAABwSZZDB9jzkoV8BFIvLhKhzqp5pncMxMv+evP+v24uomoAAAC4Jl9OBsxISwgF9ejwg2wcDm7BJSJUK+C3fnsbyfsWwaAUv65qAAAAuCrHTQayuD89IUIycI0I1TziYyQDyXUb3Bi4hKoBAADgstjnMP6ilvS14XkYk5/iFkIctYD+KvKnOGku8I7ppACxOkpeypG2lXf2HZmJfXSF7NRDV0LzFuZxvwkRqiuDoagyQv1rqxZS12TQYBr7q6vJSAZya+lJHX9d1asMiZifMVoAAAA4Ol4ycC8CAi+eT2MKq4AXZydx3O3+yJ8hTdqogq4yahEKJL/+RUVlH7OExBIyqAdJyLbASu5m0kiXDHm2VTynWwWHtiYjBtOC9+SvmAxYH7uKKvwKqv6TYVmMJjYwWgAAADgDTjKQhQDZoYtnTPS++HlBVtos8P6bEMXI27tF8ZeM5YMF9+J0URnJ1Vv/xUPK0kaw8WCD3U3x8tutIa4qd49fYr/qdGXwFJVEqMUz27kOdE36BtOEe5hGvTMw+CahS6j61alS6KqJEaMFAACAU+AlA1qAIcTMz0uyXXWjQPIXMxlIjos8g5h8X9XYrhQixvxPkpB1iGYlA5FuVgGkXElBEQxK+7bZXRZDBldRrwjVDLFNTboG04T/nLgq6dibhK6haqGXVcdcowUAAICfIPLMgIS4q5le4xawWxEeE5iXf/8ej2S3V9lZLYSUyGooWu9IBtxuZoLY58PrZEBqvo5Qm8eiEmBZ9BDc1eSWD9pGtvS1WHrsTUIXUbVg9kKVjtECAADAT3DUZKB4JcwrIpnvp0wGBHniodxeEerrFLm2375XMhB6346QDGzwxMBFVB1LBgR5NrntAwAAAEdiKBn44DGhNBtIjmW/T0u/Tlq4RzL8bdrhZMDtpn+NQSxC3eTsivhcx1ogcHBnPFw0XhPkFxt8YOAqqhbMPprEkA0AAAD8GL3JwKYPEMvNBA+OC0HMPOePe5bPQd7vHXcGzGzA6ua8hHdhzW5Wz00PP9W6KirVg9xbT5NbJQPRIF5MBorbSR2yXEPVZSeEmTlstAAAAHAOupMB97HXQIEpibakEvVu5PtFQerlUhXa77FkwBbS7aYtQoSq/cey5KPjqtpWVKEHMRz1urFJtOgngGlrVcAtPXXexiVUHbDIcaMFAACAUzCQDExl3KMd/XdiiTLuMAMj71SzVKb4PelvMBlw2/C6qUsQJWnhfVwqayigarUTlR6U/W2rHxskA8EjQlrRsYeH86p/WtUvGdKncdyHF3iEGAAA4Cfp3UEF2JqWc/4NeQOUhB7RBgAAgEtQngYgRIAv4R7tqY/wkAx0QTIAAAAAL0gG4BAEbguQDGwEyQAAAAAAwEUhGQAAAAAAAAAAAAAAAAAAAAAAAAAAALgM5fvQi6+Qqg9r1t8DS58BVb67pDymrHzhV/7uUfnKdlWGtGqtkrqJ1mdSg0KONHERopoU3/gvf8pOPRZfmkXYYOCijPlJw2jHrdp1g7ggkFGsOmAwYT8pGW0sPPj42g3HomNVFo2u1+TUr05ZnxT9pbigVsvflAp+Vrf+FlJ7MrA2JY2DdbEtw/ufeiViE00+pSMZkPoKcU0mqluHV/lQnfsZvKoVkgEoUEyiyU/qRjtu1a4bxAVBhWXVgWUx6idFo/1QMoBVnxhxtF82Nx5PbpMMmEKen3on63G/CetLuYG1ajwpo70d0n55ybz8+/dYFuObqvI3gUMyON9qLSX7q7FrdE0hUwGE1R9SDE3+2Uk2N4s/vSpQLOql/Gply5MBxgaeyBbT4idtox23atcN4oKgwLTqyLIY9JP+4q6HB41rN1Z9ZqTbm09rlMsOxJNaDW4y0CLkzyB1+jk3Xz2fl3//Ho/8dkxXMvD81JQ1860425Ghy6F8NhmYFP3CEysZuM/J+N7uj+Iv6/WyRXmnhyaSAciQDvGUv3p+0jbacat23SAuCDJsqw4tizE/GVjct0sGJqz6vLQEXqPx5Fgy8OOxf4kypTL9PnWeFe1JBtbPzuZraH29lgzYMrQ5lIEbA03JAE7LwkwGbvlZtOwP78tlizJMbMrLMDIwTZ41BP2kbbTDVu27QVwQpLg+LrAshvxkZHHfNBnAqk+Lcq9KLToQT3YnAy1C/gpmXJs8Y/S43zKdtycDt/sjv9kgqtlJBiwZ5KNi9WEn6cc2mpIBQk4DOxlYR/gZNRUjbllUWXE6+vbpREbqmthbQUE/aRvtsFX7bhAXBCnuBmdgWQz4ydji7iUD9tqNVf8O+Xgb9jkaT/YnAw1C/gotyUCagjUnA9nYxdot/+7I0JgMDHgRkoGtcJKB5xDfn1FTPuKmRZEMQBubJQO60Q5bte8GcUGQ0pwMtEfqU3hxJxmAjMz4xJEcjSdHkoGwkL9CwzGhrHxrMiDP9nr0/GRAlSF+q/EpTHeu135M6AJpZRdeMrDaTb0JaluUcucwa4/VBN7Ypw7ix4Qm3WiHrdp3g7ggSHHP0gSWRddPRhf3DxwTwqp/gJf9fCCeNJOBorh1JMkU8mcQvYXwAHGeg/09xRYfPOlmpKjaSDKgyNDkUKSzkWFakgFONlq4yUA+qknc41mUvLKRDIDG06KMA6q+n7SNdtyqXTeIC4IM26pDy6LnJ8OL+6bJAFb9SzTtr25gcoL1FPcaGoQ8I8Isv88vvdZHKjIPkfz8TsrCyYCe2YtT3E0GRBkaHcqzih5vErXcfAMQavxkICOLqzyLWh1GadokAyDxdirdftI12kGrdt0gLghybKuOLIsbPt27UTKAVZ+ZwolNViw2Gk866cRbjFKEFiHPiJZIiWlW0udKL623dWrFJtXoIphjU8sg3znKe1mngg0eJSSkqUn4I6JJM2zyLer9zwr7mQGG7MJoJhH1k2PJQMxPmm4QFwQVllUHlkXbT8Zc8ZO2Ux/2zMOqT4qy+sdP/G9icpIUykOGnpBnpJxxaceyvgtnK6TjFtFkQBm7dPTak4FahuZk4N3t2BB3JAP4K5HRZCBgUXpbXq7AsF2cAT85lAwE/aTpBnFBIKNYdWBZNP1kiyveMBnAqk+N5WIzOuNJpwZRiqpMWEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICDI31U4P3y7Kn6s/reYunbJq8/qm8a1j8kwLuGAQAAAAA+jPRlLjkZWD8OIn34If/zGtkHkwHxdz4DAQAAAADwUdYQP4m9xWRgXv79eyxL/Rm4eXn+Pfv6a/Yn+VvShQxlrSQDAAAAAAAfZV7+/Xs88vM/UjLw/Ey0ENbPy7/Hfb7noX/9Fy8ZIPYHAAAAANiXZ5Cfbc4LycCz2CuuTyP3eVmzhGWeXrnA7RZPBtbbEyQEAAAAAAD78Yry0yC/SgZu98c7Ui/38f+SgfWiZy4w1cmA/vRwWYKkAAAAAADg86xb/kk6UCYDWS5QZQPPZOB51f2ZCzQmA2nVxu8AAAAAALAZ72Tg/SBvkQzIofyaDbySgbVcfXvBOyZUUryZFAAAAAAAPkCaDLzSgccjTQay3XphZ39NBvKYfyQZmHioGAAAAADg4+TJQHIX4BW6z4sQx6fPG7+TgYyGZKCQ4S0GdwYAAAAAAD5HFYgXR3TqQD0ptcxTQzKg3l1Q7j1wXwAAAAAA4JMIwX6x7S8H5e9sYDwZEEqQCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFO+1ueQr/Y8hZAXRnwX7TAdn6r4NtVLsk4l/a/xfEXB880Ezw+qOK8pKD69/hVaZPjM1AuwqaK6evEF/9BjUQfjawYD8D1+3+zVF/+sv9qv6hFe8Nns2swXkYYCI7sXtpD5j0ILboFM0p7fgWTgBcnAoUhfkpb/Q6P4EvtXaJKhZeo9rXOT7m2rqLMkAx0W9Tkp+nzM70dF8KNg9jpW9F5H0EK5gZ2NPNbvSQbcGgJCCnlC3ohboBYzbymkx8tDMlBzbul/gyxaiwyIsy+xC20yfCkZ2FhR50wGvjTF3UXNvxq3BGcDszdR79Q+9Zb+NN+rcv2+LNGsJoNzFzlQQ0DIrFPSJ4ydAsVfqgJFIsJHkhVIBmo+Kf25NbMfmWvxz7Wc7YjQNH1pkdtcUUdIBkL7Po0W9RHcVc+++tejItgZyaI+YGWYvYnijKKK2sSZdiYD4ZINQrpNlgXquv/+8ioyL+WKkP8OT0gGakgGDsC8JGrydrNPd0Romr6zyG2vqGMmA9LuY5NF7cEpskf4YXZKBnIw+wJZIW7Aqni9+maC+8yBKsN4MhAVsui2MdxVAemK7G+CAX3tmOiheSsqHbZSS8WRLEmJ78sf95swPnkVQg1GgVXIpEzXQFZHy8RaRHusLapOOIUW1t/1WVFWYU3eRDRrvC5GFdmNDtb7x7Cqgw9gJUV8qy5tRrSUFmNoFzLeC0cGzz+MUA33q7Ejz4t2HQRVHXGk+V/S8Q6ZvWswHk0Lyr9lFiR3FxRwcZOBzVbelUubvYwRRj/uN1X1kThbOPIvC20mA6GRH0sGknLucwVFAXFpT/8oFCAZkPibJ3fr+QvBoArVSiUyXYsmIa3ecoE/IRcnNHKQhZQq6U4GLE3FkgFv8j5FK8fr0lYt7HaPDtb796Cq5R13uwl56ml7OpUpqDWoM6NHyM5euFatq7IDNaY54MRwVz3nUkfVEUcaiYoMs/fXA4c9FhSIEEwGBlfetaK+q3/F7FXMZOBe9Kw2cj29Ug7Pq0UjDxCrk2zsmFA2gMbzE0IBY58veZqhsofNhu93WHVcvubpPW63+6OO2+u/1O+JyjxKWuA5OuWuuVqgGrz2R0BeBlFmlfXzOP3JgHjd7ZY1YE4Kf/K+52amvCsvg7Fb3e2D1aJq+U6200STVevbH/bkHRUy3AtDBs8/DCP27KDZgLvqBS5VVR1ypJF5YZh9xMvZeAtKuTy0LygQI5YMjK28eUUXNnsVe099bVIzcjWkEOpVI/bAcSDHbW/0zMCzFTdtKJYXKxmQbuncpYuujrRkitpdqYZVKF4f2RJvuKW3cdwCzn0ee2+g6YmR7jsDlVMK1p3+Zk/eXl/8u8yL5kgHB6tB1aIMbhNNdy+NZCA4efuEjPXClMHzDxFad/562tgZd9VTrjBUHXOkoajIECvg5ZooB0ry1W0LCgSJJQObnrDA7CusZCATSDZy1dGJTlPpZSAZkGUK1tDije34syqgL416tnf0xeE7qO5A8gCiPUl6rX23ZcGxAkYLooR1uBCdxwPPDLgbIJYVBiYvRpwjn3zZZLDCqlZkcJuIWLUpf3TyjgjZ04tcBtc/RPjBZGBq9EoBVXc40tgdM0kQy2CCfZF9nNSLtgUFgsSSgcG5K7d6TbMXCScDjZa/fTLQuJUZvLK5rLTt32SkbB2IBOKJ4p/yRs7Xk4FAN3dIBtKfxJlHMrAlYhQo/r19sKKq1mRwm9gzGegWsqcXH0gGbMTeNYYc36DHiR0hKkqvtQzGuk5fUEgGdkPdIvloMnBRs1dRwui6W7KQdjLQchrinHcGhLqdYJ9cQCY202pFtyYD7l28ttt8rUv9RseEavdhVqne6TOSAVtGlrwE3f1sMVgxVcecqNhEk1UPJQMDQvb04hDJgNuNA/CRLVLXkdrzon1oGjXdtaBkbbjdhCDaApUfwRhaebVWr2b2Bpp7/muh2JWtW3R2kKqfbvd7/M7APL/LytV5NXhCFgK9jvPkHsIuUJzxqo98pY+GSg3ANE3tM+2lykel3apIHi/UqVzhcowC5e/l9QEEuf+qnpWJYQcX6+5AWt+8+DGPeTbRn7wkA2+Mky9bDFZI1dbpG6+JJqseSQZGhIz1wpTB9Q/DlDJok/3buKueja/qmCM154Vr9hEv5/bCXFBKN7jKGV5QIEgZb5ZzdYOVF7N3+FdRRLUpgubbDxtUmtDLVEWkJN2swRdS6KakaqOAUCJTVC0mIZRAcGPPHO6qyGNZhDu/1njYBWyTDqJ0RKhFNNzycuGB9JCYtmF7VZAMrMyLvihtMVgRVVsyuE00WfVAMjAkZKwXtgy+fxhkE/+wA/6iZhIZbtuRBuZFJCoaUvY+CwrEkBTpmdMGK+/1zF7HrjVt14qldUkKyd3RzdrKVKccZbJrCAiZ16LeIzEKFIWUuyf29RCZaYkm//76UnsZpK5F9C1xbbTMAi8h38PdO56l8YrWqRlu0bwUn+kTLy6EVQfJwBP35MvwYPmqDpy+sZp4Bekhq+5OBgaFDPXCT0h8/zDCaTZ+QouafXXwRpCqCW9eRHPggX7stKBADEuR26y8mD0AbILkDuDKmCdfLiSDyymEBLARc2H4OKy8AHAgcEmQYZ98uY4MLqcQEiCn+BZkebId9oKVFwAOBC4JEo6w230EGVxOISRAiXQUGTv+Aqy8AHAgcEkAAFeheOSTmwJfgpX3zDivAgIAAAAAgF/lMMlALggpCQAAAADAjnzzNYTCoT/yAQAAAACAvfhqMnCv3uFKNgAAAAAAsBfH+UBR4MM3AAAAAAAQoP66shhm68lAUUH99WPl66vaZ5LtOP84SQkAAAAAwKkpMwE9GFeCcKcC8apia1+owvyGPTcFAAAAAADGkWP1W1syYN4KEC7Lc4HqEQD5bkL2DDHpAAAAAADAMM8YOxBdx47nCKXmJW8gPyIkPABgPxPwlJhzQgAAAAAAo0S33I1kwPkaQZ4NFI8LSJ8K96L9Mr0AAAAAAIAB0qBcjMOVZKAIzMVS6cGfecnj+J5kgGeIAQAAAAC2R3v9jxXmp3+T4/T1r/UJoJ5dfu4MAAAAAAAMMy9F4O69QNTY85/e7wWqAvXnxff7Q6mifuHQfdb+8eChAQAAAACAYeRDOvFjQtKLRY0HB+TKXSGEVkgFAAAAAACGKUJx9fSNds8gidT/rn1VKN4B0Kq3pch/5YAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFyS6iMAEfigF/TTZXIuJ7RJ56PcsCvPlxw83zxgv8ogu+bL7ypokeEzUy/Apoo6y5rVY1EH42sGA/A9Lmr2uznW/NWf8rVpdFR7zbQG8fo8uBKKuDVE0R17pJsXh2TgCcnAoci+h6J/WDHhJnwSZW+aZGiZevK3XfrYVlFnSQY6LOpzUvT5mItGRXB+MPtm9nGswkcAyki6/pBA/RHixgpyCf0aorxqUj6btkkbPwzJQM25pf8NsmgtMiDz8v353SbDl5KBjRV1zmTgS1PcWxYDV+OW4Gxg9h3s4ljFbxBLsX76t/n+/kexE/8MuosvliXl6xKRGlo6o6cjVjdhIhmQ+KT059bMfmRHWfxzLWc7IjRNX1rkNlfUEZKB0NZSo0V9BHtZdK++ZlQEH0OyqA9YGWbfwR6OtYqKS7/oDda8lM7WDbSLJjpqMERZ5rq+QDdhmiaSAQmSgQMwL4mavN3s0x0RmqbvLHLbK+qYyYC0+9hkUXtwiuwRfpidkoEczD5HcVhrt5MjLpIWsv1wybFWR2SSn8tgv3CLblwujI19ArMSMFqD/dTCW3ApGfC6CX+8xyLVdjmUhT312KT7/IZRIDovXKx5UZZyfaRldrXdKgGLUIVl9olo1nhdjGpujw7W+8ewqhX/YjThW3VpM6KltBhDu5DxXjgyuGvWANVwvxo78rxo10FQ1RFHmv8lHe+Q2bsG49G0oPxbZkFyHggcx00GNlt5Vy5t9iJKjX9C380mhaPwudRygezMz7JeZKhJG35hWfVC+UJpkRrcE//JuiYu9E434Q/Z5KRbRSM2KUbC0uotF/gTcnFCIwd/XuQlO5IBS1OxZMAz+6do5Xhd2rSF3e7RwXr/HlS1vONuN+F7+1gyYE7eUSE7e+Fata7KDtSY5oATQ18WY5c6qo440khUZJi9vx447LGgQIRgMjC48q4V9V39K2Yf6aZg4sZp+uK4fbUH8hK5jL/vxb/ts/aP+73Qbp1s5KoWmkxrEFcXvQblKYP83/nl4rjo3YQ/Vg2VJpUNeB2313/RbfL573eB/DV/foHAvPAIzoukbHsyIF53uwnH1xTBXbNPPFKmvCsvg7Fb3e2D1aJqebPBaaLJqkUfF5i8o0KGe2HI4PmHYcSeHTQb0JfF+KWqqkOONDIvDLOPeDkbb0Epl4f2BQVixJKBsZU3r+jCZu9QNuBvmQslskoih+/XOgQtC566nmj13ZK7Go6/a0z16NQgnCrL/jQvtchV63Y34Q9pydSTq2nSTn0ZNik1kdlprIBzK8neG2h6KKX7zkDllIJ1p78ZZj/1++LfJblDmP9xdLAaVC3K4DYRvcWqFW6cvH1CxnphyuD5hwitO389beyMsCyGrjBUHXOkoajIECvg5ZooB0ry1W0LCgSJJQNRHxVvErNPkH2aNDb5TNGfD0jniSlv0YayS581IUy0PJFy/a66Hsg1iK5/FUv91Vgfqm7CH6o7kDyAaLR9NpmWiBWw5oUkYW0O0Xk88MyAuwFiTRXb7N3Lr4h88mWTwQqrWpHBbSJi1ab80ck7ImRPL3IZXP8Q4QeTganRKwVU3eFIlajIVtvANq9YRe7jpF60LSgQJJYMDM5dudVrmr2BeGfgs8mA0EQe/rdvFQeyck/VRQ3jyYDbTfgjEE8U/5Q3cr6eDAS6uUMykP5UrXKe3CQDrYhRoPj39sGKqlqTwW1iz2SgW8ieXnwgGbARe9cYcnyDHid2hKgovdYyGOs6fUEhGdgNdYvko8nARc3eIZAM5FK7jtWNy93hF0o4igrcoWvMJnpSR2EnO7CHdXliMy0t0JcMiAWajgk15aclGx0Tqt2Hb/bSXTYjGbBlZMlLEI5VPdlisGKq1mVwm2iy6qFkYEDInl4cIhk4w97PR7ZIXUdqz4v2oWnUdNeCkrXhdhOCaAtUvi07tPJqrV7N7B1eR1eKILiK/a0zw+thm/zegbBuzHP2e5GBpOXLP1S9Tp+6lM/f3O73coutqYanIgpNZ7VORWn5EJLRTZim9pkm2Jdrk6VZV3btFfDnhYs3L+qyZnCx7g6k9c2LH/OYZxN9sycZeGOcfNlisEKqtk7feE00WfVIMjAiZKwXpgyufximlEGb7N/GWxYdfFXHHKk5LyJHfocyO39BKd3gKmd4QYEgZVRUztUNVl7M3uFfxTKnYtY/5SIkPJZFWsT0WqRG5EhaK1DXUKpEqKG+S2PWEFBFXlZcKM1uwhTe2JPJbkelei5tUhxNIftTCrQYg4o3L8qSVUieXy48NR8S054aXhUkAyvzok/oLQYreopUdypOE01WPZAMDAkZ64Utg+8fBtnEP+yAtyw6RIbbdqSBeRGJioaUvc+CAjGcMOlTK+/1zF7nrfJXG2sy8Lgn778RnXjStcddeXq3FF1KaswOpRVUBbLr9bvaRhG/hroT6oKm3XYKdPPyRGZaYXCF0UpF9C1xfTCMAi8h7XkR7q5nFJpjKJqXzC5kso4QVh0kA0/cky/Dg+WrOnD6xmoi5u3TinqSgUEhQ73wE5LImtWPv7d0ELxlMXB18EaQqglvXkRz4IF+7LSgQAxLkdusvJg9AGyC5A7gypgnXy4kg8sphASw0fb74LOw8gLAgcAlQYZ98uU6MricQkiAnOJbkOXJdtgLVl4AOBC4JEg4wm73EWRwOYWQACXSAW3s+Auw8gLAgcAlAQBcheKRT24KfAlW3jNT5dSMJAAAAADANThKMhB6XRAAAAAAAHyEL76GUDjzxx0KAAAAAIDd+GoyUL+mntsDAAAAAAB7cZwPFB1HEgAAAACAc1N/XVncc9dD8KKCtMjfAR/l66t1wdgzAYGvYAIAAAAAgEeZCejBuJIMOBWIVxXRvFCFFerz+UAAAAAAgA2QY/VbWzJg3goQLstzgWcq8C6h3U1IfiUVAAAAAAAY5nk8JxBdx07qC6XK8D0/IiSc+dGPAfG0AAAAAADAhmTv7TSSAiMQd75GkGcDxeMC0qfChTomHhUAAAAAAPgQaVAuRvxKMlDs+4ul0oM/85JH9MFkgHsCAAAAAAAfRj+wr4f56d/koH39a727H3oGgFQAAAAAAGBr5iW8A+/u+U/v9wJVwf3z4vv9oVRRv3DoPucXc0AIAAAAAGBL5EM68WNC0otFjQcH5ModIZQ2uE8AAAAAADBIEYqrG/DaPYMkVv+79lWheAdAq96QgmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDjN97Y/9VelC8/Orsyt6T67sQmnNBonY9yw64830HwfC2B/SqD7Jovv8+4RYbPTL0Amyqqqxdf8A89FnUwvmYwAN/j182+IeTI/Gbw6795MbmJtIzylQHt1w56epFJ0W0MQmMnWwM+CsnAE5KBQ5F9D0X/sGLCTfgkyt40ydAy9eRvu/SxraLOkgx0WNTnpOjzMb8eFcHPgtnrNISm7WG0UEj+bJgmhF9BM+29qN9P2hXDn3ILaEdIBmrOLf1vkEVrkQGZl+9P8zYZvpQMbKyocyYDX5riYyvrr0dF8KNg9gEiX+r13Fbt2+d7/c5/IVlIL8oumeYl+S2/vdpLay8KsYVebNPu5SEZqPmk9OfWzH5kR1n8cy1nOyI0TV9a5DZX1BGSAWdzK2kzblEfwVuanauvERXBbkgW9QErw+wjBHyS7Td9RZVNtMfVW3juxl7UxSN5U3O7QDIgQDJwAOYlUZO3m326I0LT9J1FbntFHTMZkHYfmx6JjNcAABFgSURBVCxqD06RPcIPs1MykIPZ59gu6e3bHveb5Td9115d3RFUy4NXHeMp5RjohVRa+pv+3IN6Eqkno/hl3jMtVVk5UMVgS+PoDXdehVCDUWAVMinT5R1co01KuT5yXgRjKltYf9ctsqzCeponEc0ar4tRudHRwXr/GFa1El0aTfhWXdqMaCktxtAuZLwXjgzh5aCDarhfjR15XrTrIKjqiCPN/1Lfk3dacQ3Go2lB+bfMguTuggIubjKw2cq7cmmzF/n3798yixlPfVReHwB9dyPpT1Fg1UJ4dIVlVBayvv3Q2wtx5S7+KDRRLlEKJAMJf0Z4tx7QkAYzYg/JcIvD4TznUmzj/VsWJzRycI22KNmRDFiaiiUDtlWvopXjdemlUNgSGR2s9+9BVcvbMnYT8tTLTm+GkgFz8o4K2dkL16p1VXagxjQHnBj60hy71FF1xJFGoiLD7P31wGGPBQUiBJOBwZV3rajv6l8xew21rvJ5V2OLw7rRmemm3jN73O+F8tR5ZKQCZQR/L6Tu74WxjfesojrspPh+TmU4rJZSjtZbZ7f7o47b67/ow109pFI+h+IVeFW4Fug962YZbVm2PRkQr7vdsgZMg/St+u2RMuVd2cBjt7rbB6tF1fKdbKeJJqvW90fsyTsqZLgXhgwNy0EfYs8Omg3oS3P8UlXVIUcamReG2Ue8nI23oFSPKTYvKBAjlgyMrbx5RRc2e42b1ENJRjV6CB7+fDZTp9TrX6x5JCvAPWg03As3GRBOLlmHmQ63IhwHackU1b9SqdQbbqmJzIhiBaRzYKUUJYWVB51Q952ByikF605/s6261xf/LvpuwuBgNaha25exm4hYtVW4cfL2CRnrhSlDfDnQad3562ljZ6qlOXiFoeqYIw1FRYZYAS/XRDlQkq9uW1AgSCwZiPqoeJOYfcUrGylCFqlXUkAeFEvwzHl1yjzS2rBDxU16oa98WfhorQ9Wu/BGdQeSBxAV7Q63m9rFCjgGFQgXovN44JkBdwPEMsiAVWPPOdZuwuBghVVt7ctYTUSs2pQ/OnlHhOzpRS5DeDmw+MFkYGr0SgFVdzjS2B0zSRDLYIJ9kX2c1Iu2BQWCxJKBwbkrt3pNszfJY/Oo3xwIbYKbSYZuNksG9Ipi8aXECVeE7xKIJ4p/yhs5X08GAt3cIRlIfxJNkmRgS8QoUPx7+2BFVa3J4DaxZzLQLWRPLz6QDNiIvWsMOb5BjxM7QlSUXmsZjHWdvqCQDOyGukXy0WTgomYfrLktGRiLg2rNNbbg3pDboBdacXP4o7JAQmymWQMXzNykAk3HhAby4c2OCdXuw6xSvQ1nJAO2jNhzgn5/dIvBiqm65R5t0USTVQ8lAwNC9vTiEMmA240D8JEtUteR2vOifWgaNd21oGRtuN2EINoClR8kGVp5tVavZvbRCssk+d3C6yBR2qYnxO1+L7e3hOuL7KDeEtMH61VntTTNWU4z1IuiiupE1zM7K67Pup5ceOwl4au0zjRh8N3hfg5WZebF2TW9QPl7eX0A12irsmZwse4OpPXNix/zmGcTfavGnt8YJ1+2GKyQqq3TN14TTVY9kgyMCBnrhSlDZDkYo5RBm+zfxluaHXxVxxypOS9cs494ObcX5oJSusFVzvCCAkG8AHSDlRezd/iXIOzSp78ui3ATzZKhqkJOmvJWKrVU1Lm8XmSDXghtOKfYhZ4SPLkEN/ZkntdFh9sYK7tAbKwdAnadlaxC8vzy5xu5ivjSb8Cenl4V2PPKvOiL0haDFVG1JYPbRJNVDyQDQ0LGemHL4PuHQTbxDzvgLs02keG2HWlgXkSioiFl77OgQAxJkZ45bbDyXs/sdazKEskf91spZfh+tzCyShk/WhElLbWjZhx9vSiaELVeiCDUR/DkEJlpxVi+9V4GqdpwFyVcuy8LvIR8j3fvHpBttJkk9U9F81J85lukL4RVB/b8xD35MjxYvqoDp2+sJl5Besiqu5OBQSFDvfATEt8/jFAv1AedIZGl2bk6eCNI1YQ3L6I58EA/dlpQIIalyG1WXsweADZBcgdwZcyTLxeSweUUQgLYiLkwfBxWXgA4ELgkyLBPvlxHBpdTCAmQU3wLsjzZDnvBygsABwKXBAlH2O0+ggwupxASoEQ6oI0dfwFWXgA4ELgkAICrUDy4yE2BL8HKe2aqnJqRBAAAAAC4BgdLBjizCgAAAADwBb73GsL8Jh/JAAAAAADAznwrGUjOmQVecg0AAAAAAJtzgA8UkQwAAAAAAGxK/XVlMdrWk4GigrTI3zMHytdX64LOQSCSAQAAAACA7SgzAT0YV5IBpwLxqiKoF6owRCAZAAAAAADYAjlWv7UlA+atAOGyPKZ/pgLvEtrdBJIBAAAAAIAteR7PCUTYsWcGhFLzkjeQHxESAnw15icZAAAAAADYkuxTAkakbSQDztcI8mygeFxA+lS4UMdbBJIBAAAAAIBtSYNyMeJXkoFi318slR78Kb8bRjIAAAAAAHAMnAP7Ypif/k1OGda/1uF8eYjIgmQAAAAAAGAz5qUI3L0XiBp7/tP7vUBVwP68+H5/KFXULxy6c2cAAAAAAOCDyId04seEpBeLGg8OyJXbQqjniDRBAQAAAAAgRhFs21/8EsLvJB/4u/ZVoXgHQKtel4JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgMFQfIoBf5jPDbXz8+qg4H+WGXXm+5OD5WgL7VQbZNV9+j3GLDF/ztJsqqqsXX/APPRZ1MFia4YL8utmbMUcelmjf9Q2ELLLHE14umlYSVP24kGYBR8hSEsWru0ICycATkoFDkX0PRf+wYsJN+CTK3jTJ0DL15G+79LGtos6SDHRY1Oek6PMxvx4Vwc+C2esYihFezJkVqX93IuFPJAPDQnoF3GQgLyCqwBMSJpIBiXNL/xtk0VpkQIw9gd1ok+FLycDGijpnMvClKT62JP16VAQ/CmbfyXxPHPUz5H1rotjsr36f8oJSoOzcJI4lA2NC+r2IC6mXtIWEaZpIBiQ+Kf25NbMf2bT2z7Wc7YjQNH1pkdtcUUdIBkIbZI0W9RHGlqQLR0XwESSL+oCVYfabUDiteSkd3Z9qS7f21F9dvK6ypEP1rUIGehF31tGSRwgXDgjJQA3JwAGYl0RN3m726Y4ITdN3FrntFXXMZEDafWyyqD04RfYIP8xOyUAOZt9F5TMFvQinH1dHN5QMJAdxzJFoFzLQi62TAWIwhfdYpCtqqaji1Jakx+xWlKDuvArnIRPp1FmLTWpUp8+Mp1lcH6nProQ8AxYRM3nlt0Q0a7wuRhXZjQ7W+8ewqpXo0mjCt+rSZpQ9n6CEXULGe+HI4PmHEarhfjV25HnRroOgqiOONP9LOt4hs3cNxqNpQfm3zILk7oICLm4ysNnKu3JpsxexlZpIIx21z/9WJQOJw/dXQMVpL3e32wNCBnrhCFl2RxsVXUj4Qx7u+i6N/rNSIhs3MRKWVm+5wJ+QixMaOchCSpV0JwOWpmLJgFCDFKGW43XppVDY7R4drPfvQVXLO+52E76njSUD5uQdFbKzF65V66rsQI1pDjgxBpakiKojjjQSFRlm768HDnssKBAhmAwMrrxrRX1X/4rZa9j2m/VM9Mt5N9NS1b1Q/wFieTfKey5hQEi/F8Et3LVkIBkgHRBZNVQs73liVsft9V/KCgqPIoxuuWuuFojapMHLoMrE9S4YRW8yIF53u2UNmBsjytM3okeSZ/wFid3qbh+sFlXLd7KdJpqsWnTlgck7KmS4F4YMnn8YRuzZQbOBgSXJV3XIkUbmhWH2ES9n4y0o5fLQvqBAjFgyMLby5hVd2OwDXbTU+iyTFqnvVNyTfs1LnS8ZmpdkiNx8GBMyUsARMiF2TEgQEqZJHlvbbORjYdLOzrOM1ET2kEisQOCGWMX6u/xojUL3nYHKKQXrTn8TFFnfpcGOV5IbofkfRwerQdWiDG4TTZ7WSAaCk7dPyFgvTBk8/xChdeevp42daV+SXFXHHGkoKjLECni5JsqBknx124ICQWLJQEs0GGsSs1eqt9WietKXYMphJ9VxejII9uG61RYhwwUsIct6IiPkZUbXRHUHkgcQ7Ukautp3y/en/krECjg2GQgXooM/8MyAuwFiGbo6f539iQsjn3zZZLDCqlZkcJto8rR6MuBP3hEhe3qRy+D6hwg/mAxMzUuSq+oOR6pERYGgxDKYYF9kHyf1om1BgSCxZGBw7sqtXtPsdSICeGXSDKgnGZCDqsbhbxGyp0DjdmqfkNckEE8U/5Q3cr6eDAS6uUMykP4kzjySgS0Ro0Dx7+2DFVW1JoPbxJ7JQLeQPb34QDJgI/buBJs/PU7sCFFReq0TX6jX6QsKycBuqFskH00GLmr2kVqb7wyk2FF0wB9G7gy41QwJGSjAnYGPEZtpaYG+ZMC9i9d2m691NDc6JlS7D7NKoWNuMmDLyJKXoE/9LQYrpuqw+6mbaLLqoWRgQMieXhwiGYgsrt/mI1ukriO150X70DRqumtBydpwuwlBtAUqP+I3tPJqrV7N7COVlbXd7vdycyqP1ZMnHoWfhSaqFWQuIv+8guef1qukZ3OGhfQL2EImqAudJyRMU/tMeynSOMe+HgDL4oV6L6hwOUaBiE06CHL/VT3XFqEnA2WX8vrmxY95zLOJvksgGXhjnHzZYrBCqrZO33hNNFn1SDIwImSsF6YMrn8YppRBm+zfZnBJ8lUdc6TmvIicCR6/SWsuKKUbXOUMLygQ5E+TlSJL1Y+svJi9w78XVV2rp/wnl0nvUbguVV9B9ArqBuoyw0K2F4gImZf0hIRpCm/smaquijyWRbjza42GXSBiky5KR4RaxGleXi488x4S0zZLrwqSgZV50RelLQYreorUu6GpNtFk1QPJwJCQsV7YMvj+YZBN/MMODC5JkeG2HWlgXkSioiFl77OgQAxJkZ45bbDyXs/sdUqdq43WZbKOORmauII4FbyWjrccQiPDQnoFAkJqKIstuwYikZmWDEb+cEoZpK5F9C3xcpBCBV5CmjYZ764th+4Yiual2VXUH5niXiJc3JMjGZimKXDyZXiwfFUHTt9YTYQ8bVZRTzIwKGSoF35C4vuHEZp2yL7J2JLUciNI1YQ3L6I58EA/dlpQIIalyG1WXsweADZBcgdwZcyTLxeSweUUQgLYiLkwfBxWXgA4ELgkyLBPvlxHBpdTCAmQU3wLsjzZDnvBygsABwKXBAlH2O0+ggwupxASoEQ6BowdfwFWXgA4ELgkAICrUDzyyU2BL8HKCwAAAAAAAAAAAAAAAAAAAAAA8PPwOnMAAAAAgItCMgAAAAAAcCxeX5N8Pmu/zNP6Fq40cC8exXe/9po8ra9/2lf8+qXyW5JLpMVILgAAAAAAevlLBh7Jh7rv1Weiyzi/DtatErFkQKhB+Pj8ci+KkQwAAAAAAPTyCsKXeQ3bH/fbesPgVSYNuv+K1fcNisD8dsv29s1jQul9CbmNd7KQ3XIgGQAAAAAA6CWN0dMI3PjovBDWJ2lEpCHxN+FeQ/KnKl0AAAAAAIAx0qA7/TZcmQxUh32KsDz7XUoKrGRAPUn0Ls7zxwAAAAAAGxNJBuYlC/CjYX1egmQAAAAAAOBY+MlA+tf3JXZcXj9W4CcD1hkjkgEAAAAAgM0JJgPvMPz1JG9xhsi9DWAe+hdeZjpN0+1+584AAAAAAMCn8JMB6bWhxTEe+ZhPFdpX9SQlvCpIBgAAAAAANib0AHESx6d3C+p3gf7Li5WUEb/1ELL8nQGSAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4CM4XguGYbPxgdPVRiMOQPqlevVjK/sZEM//99z/7vy0bAwAAADgCx08GshBw4/DvtFwlGbjdH2/BwsnA7f5IX3Ab7RjJAAAAAFyN/wO8B0n2MKcb+AAAAABJRU5ErkJggg==" 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. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  2. [Android Pro] 通过包名启动应用

    Intent intent = packageManager.getLaunchIntentForPackage(WEIXIN_PKGNAME); intent.setFlags(Intent.FLA ...

  3. Spetember 5th 2016 Week 37th Monday

    No matter how far you may fly, never forget where you come from. 无论你能飞多远,都别忘了你来自何方. Stay true to you ...

  4. .net 获取https页面的信息 在iis7.5服务器上不管用

    让我纠结了一天多的问题,给大家看下,有相同情况的可以不用浪费时间了,本人当时找了好半天都没找到什么有用的信息,项目在本地没有问题,但部署在服务器后,获取不到https页面的信息,加入下面的代码就可以了 ...

  5. 无根树转有根树(dfs,tree)

    #include <bits/stdc++.h> #include <iostream> #include <queue> #include <stdio.h ...

  6. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

  7. NYOJ题目96 n-1位数

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJgCAIAAADpjVkvAAAgAElEQVR4nO3du04jS/gv7H0T5FwIsa ...

  8. php提示 Notice: Use of undefined constant name - assumed

    我们知道php在数组中写变量有二几种方法,我们出现这种提示就是你写成了[name]这种所以会有Notice: Use of undefined constant name - assumed name ...

  9. CSS3学习

    1.CSS3边框 border-radius:创建圆角边框 border-radius:25px; -moz-border-radius:25px; /* 老的 Firefox */ box-shad ...

  10. 【转载】 JQuery.Gantt(甘特图) 开发指南

    转载来自: http://www.cnblogs.com/liusuqi/archive/2013/06/09/3129293.html JQuery.Gantt是一个开源的基于JQuery库的用于实 ...