重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2064|回复: 0

hadoop-docker分布式

[复制链接]
发表于 2017-8-16 18:06:08 | 显示全部楼层 |阅读模式
hadoop完全分布式(docker的host模式)1、准备内容
1) 四台centos7虚拟机及四个IP地址
2) 技能准备:会linux命令、会docker命令
3) 更改hadoop的6个配置文件
4) 准备dockerfile镜像文件及相应安装的软件docker、JDK、hadoop【hadoop镜像准备(主机)】
5) 说明docker的hosts模式是指容器与主机共用同一个IP地址
注意以下如果章节后面有加(主机)表示在主机上进行操作,章节后面有加(容器)表示在容器上进行操作
2、网络拓扑
1) 操作系统版本:centos 7
2) JDK版本:JDK1.8.0_121
3) Hadoop版本:hadoop-2.7.3
4) 部署机器的情况:
475659941770aca56.png
5) 网络拓扑:
936935994179204f65.png
3、docker在线安装(主机)
1) 设置DNS
[root@localhost ~]# cat /etc/resolv.conf
nameserver 211.138.156.66
2) 安装yum search ifconfig,最小安装版本的没有安装ifconfig,可直接用ip addr
    [root@localhost ~]# yum -y install net-tools
3) docker安装
[root@localhost ~]# yum install docker
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
[root@localhost ~]# service docker start            
[root@localhost ~]# systemctl start docker            
[root@localhost ~]# chkconfig docker on        
4) 关闭防火墙
[root@localhost ~]#firewall-cmd --state #查看默认防火墙状态  
[root@localhost ~]#systemctl stop firewalld.service #停止firewall  
[root@localhost ~]#systemctl disable firewalld.service #禁止firewall开机启动
5) 查看SELinux状态
[root@localhost ~]# /usr/sbin/sestatus -v  
SELinux status:                 enabled  
//enabled表示开启状态  
SELinux有临时关闭(不用重启服务器)和永久关闭要重启服务器  
6) 禁用SELinux(因为selinux和LXC有冲突,所以需要禁用)
修改/etc/selinux/config 文件  
SELINUX=enforcing改为SELINUX=disabled  
重启机器即可reboot  
4、docker离线安装(主机todo)5、配置hostname(主机)
修改/etc/hostname更改主机名
1) 进入192.168.0.179机器(hadoop0)
[root@localhost ~]# vi /etc/hostname  
hadoop0
2) 进入192.168.0.152机器(hadoop1)
[root@localhost ~]# vi /etc/hostname  
Hadoop1  
3) 进入192.168.0.153机器(hadoop2)
[root@localhost ~]# vi /etc/hostname  
Hadoop2  
4) 在各主机执行以下命令也是可以
[root@localhost ~]# hostname hadoop0  
[root@localhost ~]# su -l  
6、配置hosts(主机)
【注意】所有机器该配置文件都要保持一致,否则会导致启动HADOOP启不起来,如HADOOP1机器未修改该文件,DATANODE会启不起来
1) 进入hadoop0
[root@hadoop0 ~]# vi /etc/hosts  
192.168.0.179 hadoop0  
192.168.0.152 hadoop1  
192.168.0.153 hadoop2
2) 进入hadoop1
[root@hadoop1 ~]# vi /etc/hosts  
192.168.0.179 hadoop0  
192.168.0.152 hadoop1  
192.168.0.153 hadoop2  
3) 进入hadoop2
[root@hadoop2 ~]# vi /etc/hosts  
192.168.0.179 hadoop0  
192.168.0.152 hadoop1  
192.168.0.153 hadoop2  
7、关闭SELinux(主机)
【注意】如果在安装docker已经关闭过SELinux,那该章节可以跳过
1) 查看SELinux状态
//enabled表示开启状态  
[root@hadoop0 /]#  /usr/sbin/sestatus -v  
SELinux status:                 disabled  
2) 禁用SELinux,修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled。重启机器即可。由于setenforce 0(立刻生效,不需要重启操作系统)命令经测试没有效果,所以还是建议重启主机
8、关闭防火墙(主机)
注意:需要在所有机器上关闭防火墙,否则后面验证hadoop是否安装成功50070和8088就无法访问,另外也会导致时间同步ntp无法进行同步。
1) 进入hadoop0
//停止firewall   
[root@hadoop0 ~]# systemctl stop firewalld.service
//禁止firewall开机启动  
[root@hadoop0 ~]# systemctl disable firewalld.service  
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.  
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.  
2) 进入hadoop1执行相应的命令
systemctl stop firewalld.service   
systemctl disable firewalld.service  
3) 进入hadoop2执行相应的命令
systemctl stop firewalld.service  
systemctl disable firewalld.service
9、安装时间同步NTP软件(主机)9.1 进入hadoop0
1) 使用rpm检查ntp包是否安装
[root@hadoop0 ~]# rpm -q ntp  
未安装软件包 ntp
2) 使用YUM命令安装ntp
[root@hadoop0 ~]# yum -y install ntp
3) 设置系统开机自动启动服务
[root@hadoop0 /]# systemctl enable ntpd   
[root@hadoop0 /]# systemctl start ntpd
4) 设置ntp服务端配置信息
[root@hadoop0 ~]# vi /etc/ntp.conf
//找到以下的server内容并注释   
#server 0.centos.pool.ntp.org iburst  
#server 1.centos.pool.ntp.org iburst  
#server 2.centos.pool.ntp.org iburst  
#server 3.centos.pool.ntp.org iburst  
//在文件最后加入如下内容: 以下的IP一定要配置成127.127.1.0
server 127.127.1.0   
fudge  127.127.1.0 stratum 1  
5) 修改完成后重启ntpd服务
[root@hadoop0 ~]# systemctl restart ntpd  
6) 查看安装哪些
[root@hadoop0 ~]# rpm -qa |grep ntp  
ntp-4.2.6p5-25.el7.centos.2.x86_64  
ntpdate-4.2.6p5-25.el7.centos.2.x86_64
9.2 进入hadoop1
1) 使用rpm检查ntp包是否安装
[root@hadoop1 opt]# rpm -q ntpdate  
未安装软件包 ntpdate   
2) 在客户端只要安装ntpdate就可以
[root@hadoop1 opt]# yum -y install ntpdate  
3) 立即执行时间同步
[root@hadoop1 opt]# ntpdate -u 192.168.0.179  
31 Jul 18:05:16 ntpdate[10213]: step time server 192.168.0.179 offset 259820.487681 sec  
4) 查看时间是否与hadoop0机器的时间是一致的
[root@hadoop1 opt]# date  
2017年 07月 31日 星期一 18:06:13 CST  
5) 设置定时同步,新增如下参数,每晚1:00同步
[root@hadoop1 ~]#  crontab –e  
00 01 * * * /usr/sbin/ntpdate 192.168.0.179  
6) 重启定时任务
[root@hadoop1 ~]# systemctl restart  crond
9.3 进入hadoop2
所有操作与hadoop1是一样的
10、更改SSHD端口为222(主机)
注意:由于容器需要启动SSHD服务,这时候如果宿主机也开启了SSHD服务,这样就会出现端口冲突,所以需要将宿主机SSh的默认端口改掉。
1) 更改主机的SSHD服务端口,免得到时候容器里面的SSHD与主机的端口冲突了
[root@hadoop0 ~]# vi /etc/ssh/sshd_config  
在在端口#Port 22下面增加Port 222  
2) 重启SSHD服务
/etc/init.d/sshd restart 或service sshd restart  
11、hadoop镜像准备(主机)11.1 准备生成镜像的文件
先把创建镜像的相关文档放到与Dockerfile文档同一个目录
992005994185c561dd.png
11.2 准备Hadoop配置
以下6个配置路径均在hadoop-2.7.3/etc/hadoop目录下,所有机器这6份配置文件都一样。
1) slaves文件
删除原来的所有内容,修改为如下:  
[root@hadoop0 hadoop]# vi /opt/hadoop-2.7.3/etc/hadoop/slaves  
hadoop1  
hadoop2  
2) hadoop-env.sh
//设置jdk所在路径  
export JAVA_HOME=/opt/jdk1.8.0_121  
3) core-site.xml
增加以下配置项:
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop0:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/opt/data/hadoop-2.7.3/tmp</value>
    </property>
    <property>  
        <name>io.file.buffer.size</name>  
        <value>131072</value>  
    </property>
</configuration>
4) hdfs-site.xml
增加以下配置项:
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>hadoop0:9001</value>
       </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/data/hadoop-2.7.3/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/data/hadoop-2.7.3/tmp/dfs/data</value>
    </property>
</configuration>
5) mapred-site.xml 增加以下配置项:
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop0:10020</value>
</property>
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop0:19888</value>
</property>
</configuration>
6) yarn-site.xml
增加以下配置项:
<configuration>  
        <property>  
               <name>yarn.nodemanager.aux-services</name>  
               <value>mapreduce_shuffle</value>  
        </property>  
        <property>  
               <name>yarn.resourcemanager.address</name>  
               <value>hadoop0:8032</value>  
       </property>  
       <property>  
               <name>yarn.resourcemanager.scheduler.address</name>  
               <value>hadoop0:8030</value>  
       </property>  
       <property>  
            <name>yarn.resourcemanager.resource-tracker.address</name>  
             <value>hadoop0:8031</value>  
      </property>  
      <property>  
              <name>yarn.resourcemanager.admin.address</name>  
               <value>hadoop0:8033</value>  
       </property>  
       <property>  
               <name>yarn.resourcemanager.webapp.address</name>  
               <value>hadoop0:8088</value>  
       </property>  
</configuration>
11.3 Dockerfile内容
FROM        centos
MAINTAINER  luoll
# 注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量,默认的 CentOS会让你的应用程序发生不可思议的效果哦
ENV DEBIAN_FRONTEND noninteractive
#更新源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
COPY  CentOS7-Base-163.repo  /etc/yum.repos.d/
RUN yum clean all
RUN yum makecache
#安装ssh
RUN         yum install -y openssh-server openssh-clients
RUN         mkdir /var/run/sshd
RUN         ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
RUN         ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
RUN         /bin/echo 'root:123456' |chpasswd
RUN         sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
RUN         echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
#安装解压命令
RUN         yum install -y unzip
#安装GCC命令
RUN         yum install -y gcc gcc-c++
RUN         yum install -y make
#为了使用netstat命令
RUN         yum -y install net-tools
#安装telnet命令
RUN         yum install -y telnet
#安装witch
RUN yum install -y which
#安装JDK
ADD         jdk1.8.0_121 /opt/jdk1.8.0_121
#安装hadoop2.7.3
ADD         hadoop-2.7.3 /opt/hadoop-2.7.3
#设置JDK环境变量
ENV         JAVA_HOME /opt/jdk1.8.0_121
ENV         HADOOP_HOME /opt/hadoop-2.7.3
ENV         PATH $PATH:$JAVA_HOME/bin
RUN         echo "export JAVA_HOME=/opt/jdk1.8.0_121" > /etc/profile.d/java_home.sh
RUN         echo "export HADOOP_HOME=/opt/hadoop-2.7.3" > /etc/profile.d/hadoop_home.sh
RUN         echo "export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" > /etc/profile.d/env_path.sh
RUN         echo $PATH
EXPOSE       22
CMD ["/usr/sbin/sshd", "-D"]
11.4 创建镜像
进入到dokcerfile所在目录执行以下命令生成对应的镜像。
注意:docker build整行命令最后是一个点
[root@hadoop0 ~]# cd /opt/centos7_hadoop2.7_jdk1.8/  
[root@hadoop0 centos7_hadoop2.7_jdk1.8]# docker build -t centos_sshd_hadoop .  
12、hadoop容器启动(主机)
在各个服务器创建并启动容器成功后将可以通过xshell访问对应的IP和22端口就可以操作对应的容器了。
1) 进入hadoop0创建并启动容器
docker run --net=host --name=hadoop0 -v /etc/localtime:/etc/localtime -v /opt/hadoop/logs/:/opt/hadoop-2.7.3/logs/ -v /opt/hadoop/data/:/opt/hadoop-2.7.3/data/ -d centos_sshd_hadoop  
命令说明:
第一个 -v :把宿主机的时间挂载给容器,使时间一样  
第二个 -v :把宿主机的data目录挂载给容器的hadoop的data目录中  
第三个 -v :把宿主机的logs目录挂载给容器的hadoop的logs目录中  
--net :使用宿主机的host  
2) 进入hadoop1创建并启动容器
docker run --net=host --name=hadoop1 -v /etc/localtime:/etc/localtime -v /opt/hadoop/logs/:/opt/hadoop-2.7.3/logs/ -v /opt/hadoop/data/:/opt/hadoop-2.7.3/data/ -d centos_sshd_hadoop   
命令说明:
第一个 -v :把宿主机的时间挂载给容器,使时间一样  
第二个 -v :把宿主机的data目录挂载给容器的hadoop的data目录中  
第三个 -v :把宿主机的logs目录挂载给容器的hadoop的logs目录中  
--net :使用宿主机的host  
3) 进入hadoop2创建并启动容器
docker run --net=host --name=hadoop2 -v /etc/localtime:/etc/localtime -v /opt/hadoop/logs/:/opt/hadoop-2.7.3/logs/ -v /opt/hadoop/data/:/opt/hadoop-2.7.3/data/ -d centos_sshd_hadoop   
命令说明:
第一个 -v :把宿主机的时间挂载给容器,使时间一样
第二个 -v :把宿主机的data目录挂载给容器的hadoop的data目录中
第三个 -v :把宿主机的logs目录挂载给容器的hadoop的logs目录中  
--net :使用宿主机的host
13、ssh免密操作(容器)
1) 进入hadoop0容器
[root@hadoop0 hadoop]# ssh-keygen -t rsa (一直回车即可)
[root@hadoop0 hadoop]# ssh-copy-id -i hadoop0 (输入密码123456)
[root@hadoop0 hadoop]# ssh-copy-id -i hadoop1
[root@hadoop0 hadoop]# ssh-copy-id -i hadoop2
2) 进入hadoop1容器
[root@hadoop1 opt]# ssh-keygen -t rsa
[root@hadoop1 hadoop]# ssh-copy-id -i hadoop1 (输入密码123456)
3) 进入hadoop2容器
[root@hadoop2 opt]# ssh-keygen -t rsa
[root@hadoop2 hadoop]# ssh-copy-id -i hadoop2 (输入密码123456)
14、格式化(容器)
进入hadoop0,该操作只需在hadoop0上执行即可
[root@hadoop0 hadoop]# hadoop namenode -format
15、启动hadoop(容器)
进入hadoop0,该操作只需在hadoop0上执行即可
[root@hadoop0 hadoop]# start-all.sh
16、验证(容器)16.1、JPS查看进程
在各台机器通过jps查看进程是否启动
1) 进入hadoop0
[root@hadoop0 hadoop]# jps
19185 SecondaryNameNode
19330 ResourceManager
19592 Jps
19006 NameNode
2) 进入hadoop1
[root@hadoop1 opt]# jps
10628 Jps
10426 DataNode
10524 NodeManager
3) 进入hadoop2
[root@hadoop2 opt]# jps
10757 Jps
10554 DataNode
10652 NodeManager
16.2、通过浏览器查看集群运行状态
1) Namenode的HDFS页面地址:http://192.168.0.179:50070/
62217599418b6be2ed.png
2) Yarn资源的页面地址:http://192.168.0.179:8088/cluster
46754599418d273ded.png
17、新增一个datanode节点
48680599418ec06d7b.png
1)Docker安装
2)配置hostname
3)配置hosts
Hadoop0、Hadoop1、Hadoop2、Hadoop3都要进行更改
【注意】所有机器该配置文件都要保持一致,否则会导致启动hadoop启不起来,如hadoop1机器未修改该文件,datanode会启不起来
a)    进入hadoop0
[root@hadoop0 ~]# vi /etc/hosts
192.168.0.179 hadoop0
192.168.0.152 hadoop1
192.168.0.153 hadoop2
192.168.0.154 hadoop3
b)    进入hadoop1
[root@hadoop1 ~]# vi /etc/hosts
192.168.0.179 hadoop0
192.168.0.152 hadoop1
192.168.0.153 hadoop2
192.168.0.154 hadoop3
c)    进入hadoop2
[root@hadoop2 ~]# vi /etc/hosts
192.168.0.179 hadoop0
192.168.0.152 hadoop1
192.168.0.153 hadoop2
192.168.0.154 hadoop3
d)    进入hadoop3
[root@hadoop3 ~]# vi /etc/hosts
192.168.0.179 hadoop0
192.168.0.152 hadoop1
192.168.0.153 hadoop2
192.168.0.154 hadoop3
4) 关闭SELinux
5) 关闭防火墙
6) 安装时间同步NTP软件
7) 更改SSHD端口
8) 准备hadoop镜像,以下两种方式选择一种操作即可:
a)    利用dockfile创建镜像  
b)    把其它机器上的hadoop镜像导出后导到本服务器上  
    步骤1:进入hadoop0机器导出centos_sshd_hadoop镜像  
    [root@hadoop0 ~]# docker save centos_sshd_hadoop > /opt/centos_sshd_hadoop.tar  
    步骤2:把centos_sshd_hadoop.tar包拷到hadoop3机器上  
    步骤3:在hadoop3导入镜像  
    docker run --net=host --name=hadoop3 -v /etc/localtime:/etc/localtime -v /opt/hadoop/logs/:/opt/hadoop-2.7.3/logs/ -v /opt/hadoop/data/:/opt/hadoop-2.7.3/data/ -d centos_sshd_hadoop
    第一个 -v :把宿主机的时间挂载给容器,使时间一样
    第二个 -v :把宿主机的data目录挂载给容器的hadoop的data目录中
    第三个 -v :把宿主机的logs目录挂载给容器的hadoop的logs目录中
    --net :使用宿主机的host
    步骤4:启动服务
    [root@hadoop3 ~]# hadoop-daemon.sh start datanode

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-18 11:14 , Processed in 0.182477 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表