hadoop(12)hadoop集群搭建(使用docker搭建)

2018-11-15  本文已影响91人  Tomy_Jx_Li

前因

前端时间学习hadoop的时候,需要搭建hadoop集群,首先想到的是虚拟机进行搭建,但是呢,不知道为啥,自己的虚拟机有问题,虚拟机之间的网络也是时灵时不灵的,最后一气之下,学习了一段时间的docker,然后使用容器话技术进行了hadoop的部署。
推荐下docker的书籍,这个只需要了解一点基础就行了。然后又参考了这篇文章,进行了容器镜像的搭建和hadoop镜像的搭建。

1 安装包准备

2 开始搭建

创建docker的hadoop镜像可以参考上面提到的文章进行搭建,我本地搭建了总共四个镜像文件如图:


创建的镜像

这四个镜像中

FROM centos
MAINTAINER jiyx
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y openssh-clients
#这个是自己踩的坑,如果没有which命令,journalnode运行不起来,后面是自行运行的安装,比较麻烦,还不如在这里直接进行安装
RUN yum install which
RUN echo "root:root" | chpasswd
RUN echo "root ALL=(ALL)        ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
FROM jixy/centos-ssh-root
ADD jdk-7u80-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.7.0_80 /usr/local/jdk1.7
ENV JAVA_HOME /usr/local/jdk1.7
ENV PATH $JAVA_HOME/bin:$PATH
FROM jiyx/centos-ssh-root-jdk:1.7
ADD hadoop-2.9.1.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.9.1 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
FROM jiyx/centos-ssh-root-jdk:1.7
ADD zookeeper-3.4.12.tar.gz /usr/local
RUN mv /usr/local/zookeeper-3.4.12 /usr/local/zookeeper
ENV ZK_HOME /usr/local/zookeeper
ENV PATH $ZK_HOME/bin:$PATH

3 创建容器,修改文件

这里创建容器的数量是10台,具体如下

    主机名     ip              所属集群            部署的服务
    hadoop0     192.168.210.1   hadoop          NameNode、DFSZKFailoverController(zkfc)
    hadoop1     192.168.210.2   hadoop          NameNode、DFSZKFailoverController(zkfc)
    hadoop2     192.168.210.3   hadoop          ResourceManager
    hadoop3     192.168.210.4   hadoop          ResourceManager
    hadoop4     192.168.210.5   hadoop          DataNode、NodeManager、JournalNode
    hadoop5     192.168.210.6   hadoop          DataNode、NodeManager、JournalNode
    hadoop6     192.168.210.7   hadoop          DataNode、NodeManager、JournalNode
    zookeeper0  192.168.210.8   zookeeper       QuorumPeerMain
    zookeeper1  192.168.210.9   zookeeper       QuorumPeerMain
    zookeeper2  192.168.210.10  zookeeper       QuorumPeerMain

因为docker的的启动进程只配置了一个,所以这里如果停止了容器的话,重启之后还需要重新启动部署的进程,没有虚拟机那么方便了。

3.1 创建容器之前的准备

创建容器之前,因为每次启动docker容器,容器的ip都会发生变动,所以需要进行docker的固定ip配置,可以参考这里。这里简单介绍下:

3.2 创建三台zookeeper容器

3.2 创建7台hadoop容器

1.修改hadoo-env.sh
    export JAVA_HOME=/usr/java/jdk1.7.0_55
2.修改core-site.xml
         <configuration>
              <!-- 指定hdfs的nameservice为ns1 -->
          <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
        <!-- 指定hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/data</value>
    </property>
        <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zookeeper0:2181,zookeeper1:2181,zookeeper2:2181</value>
    </property>
</configuration>
3.修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>
<!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>hadoop0:9000</value>
    </property>
<!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>hadoop0:50070</value>
    </property>
<!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>hadoop1:9000</value>
    </property>
<!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>hadoop1:50070</value>
    </property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/ns1</value>
    </property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/journal</value>
    </property>
<!-- 开启NameNode失败自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
<!-- 配置失败自动切换实现方式 -->
    <property>
        <name>dfs.client.failover.proxy.provider.ns1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
    </property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
<!-- 配置sshfence隔离机制超时时间 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
</configuration>
4.修改mapred-site.xml
<configuration>
    <!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
5.修改yarn-site.xml
<configuration>
    <!-- 开启RM高可靠 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop2</value>
    </property>
        <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
            <value>hadoop3</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>zookeeper0:2181,zookeeper1:2181,zookeeper2:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>    
6.修改slaves
将slaves修改为如下配置,因为一般datanode和nodemanager一般都存放在同样的服务器上,如果在不同的需要分开配置,也就是hadoop0和hadoop2需要分开配置
hadoop4
hadoop5
hadoop6

4 免密登录配置

5 启动

上一篇 下一篇

猜你喜欢

热点阅读