使用docker部署hadoop集群的详细教程

最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群。

0. 写在前面

网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程。

目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群

准备:

首先要有一台内存8G以上的centos7机器,我用的是阿里云主机。

其次将jdk和hadoop包上传到服务器中。

我安装的是hadoop2.7.7。包给大家准备好了,链接:https://pan.baidu.com/s/15n_W-1rqOd2cUzhfvbkH4g 提取码:vmzw。

1. 步骤

大致分以下几步:

  • 安装docker
  • 基础环境准备
  • 配置网络,并启动docker容器
  • 配置host及ssh免密登录
  • 安装配置hadoop

1.1 安装docker

依次执行如下步骤安装docker。如果有docker环境的可以跳过。

yum update

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

systemctl start docker

docker -v

1.2 基础环境准备

1.2.1 创建基础的centos7镜像拉取官方centos7镜像

docker pull centos

通过build Dockfile生成带ssh功能的centos镜像

创建Dockerfile文件

vi Dockerfile

将如下内容写入Dockerfile

FROM centos
MAINTAINER mwf

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

RUN echo "root:qwe123" | 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"]

上述内容大概意思是:以centos镜像为基础,设置密码为wqe123,安装ssh服务并启动

构建Dockerfile

docker build -t="centos7-ssh" .

将生成一个名为centos7-ssh的镜像,可以通过docker images查看

1.2.2 生成有hadoop和jdk环境的镜像

  • 将准备好的包放在当前目录下。hadoop-2.7.7.tar.gzjdk-8u202-linux-x64.tar.gz
  • 通过build Dockfile生成带hadoop和jdk环境的centos镜像

刚才已经创建了一个Dockerfile了,先将他移开。mv Dockerfile Dockerfile.bak

创建Dockerfile

vi Dockerfile

将以下内容写入:

FROM centos7-ssh
ADD jdk-8u202-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_202 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-2.7.7.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.7.7 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

RUN yum install -y which sudo

上述内容大概意思是:以上面生成的centos7-ssh为基础,将hadoop和jdk包放进去,然后配好环境变量。

构建Dockerfile

docker build -t="hadoop" .

将生成一个名为hadoop的镜像

1.3 配置网络,并启动docker容器

因为集群间必须要能网络连通,所以要先配置好网络。

创建网络

docker network create --driver bridge hadoop-br

以上命令创建了一个名为hadoop-br的bridge类型的网络

启动docker时指定网络

docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop
docker run -itd --network hadoop-br --name hadoop2 hadoop
docker run -itd --network hadoop-br --name hadoop3 hadoop

以上命令启动了3台机器,网络都指定为hadoop-br,hadoop1还开启了端口映射。

查看网络情况

docker network inspect hadoop-br 

执行以上命令就可以看到对应的网络信息:

[
  {
    "Name": "hadoop-br",
    "Id": "88b7839f412a140462b87a353769e8091e92b5451c47b5c6e7b44a1879bc7c9a",
    "Containers": {
"86e52eb15351114d45fdad4462cc2050c05202554849bedb8702822945268631": {
        "Name": "hadoop1",
        "IPv4Address": "172.18.0.2/16",
        "IPv6Address": ""
      },
      "9baa1ff183f557f180da2b7af8366759a0d70834f43d6b60fba2e64f340e0558": {
        "Name": "hadoop2",
        "IPv4Address": "172.18.0.3/16",
        "IPv6Address": ""
      }, "e18a3166e965a81d28b4fe5168d1f0c3df1cb9f7e0cbe0673864779b224c8a7f": {
        "Name": "hadoop3",
        "IPv4Address": "172.18.0.4/16",
        "IPv6Address": ""
      }
    },
  }
]

我们可以得知3台机器对应的ip:

172.18.0.2 hadoop1
172.18.0.3 hadoop2
172.18.0.4 hadoop3 

登录docker容器,互相之间就可以ping通了。

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

1.4 配置host及ssh免密登录

1.4.1 配置host

分别在每台修改每台机器的host

vi /etc/hosts

将以下内容写入(注:docker分出来的ip对于每个人可能不一样,填你自己的):

172.18.0.2 hadoop1
172.18.0.3 hadoop2
172.18.0.4 hadoop3 

1.4.2 ssh免密登录

因为上面在镜像中已经安装了ssh服务,所以直接分别在每台机器上执行以下命令:

ssh-keygen
一路回车
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1
输入密码,如果按我的来得话就是qwe123
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2
输入密码,如果按我的来得话就是qwe123
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3
输入密码,如果按我的来得话就是qwe123

1.4.3 测试是否配置成功

ping hadoop1
ping hadoop2
ping hadoop3
ssh hadoop1
ssh hadoop2
ssh hadoop3

1.5 安装配置hadoop

1.5.1 在hadoop1上操作

进入hadoop1

docker exec -it hadoop1 bash

创建一些文件夹,一会在配置中要用到

mkdir /home/hadoop
mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data

切换到hadoop配置的目录

cd $HADOOP_HOME/etc/hadoop/

编辑core-site.xml

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/tmp</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131702</value>
  </property>

编辑hdfs-site.xml

 <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/hdfs_name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/hdfs_data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop1:9001</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>

编辑mapred-site.xml

mapred-site.xml默认不存在,要执行cp mapred-site.xml.template mapred-site.xml

 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop1:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1:19888</value>
  </property>

编辑yarn-site.xml

 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop1:8088</value>
  </property>

编辑slaves

我这里把hadoop1当成主节点,hadoop2、3作为从节点

hadoop2
hadoop3

把文件拷贝到hadoop2和hadoop3上

依次执行以下命令:

scp -r $HADOOP_HOME/ hadoop2:/usr/local/
scp -r $HADOOP_HOME/ hadoop3:/usr/local/

scp -r /home/hadoop hadoop2:/
scp -r /home/hadoop hadoop3:/

1.5.2 在每台机器上操作

分别连接每台机器

docker exec -it hadoop1 bash
docker exec -it hadoop2 bash
docker exec -it hadoop3 bash

配置hadoop sbin目录的环境变量

因为hadoop bin目录在之前创建镜像时就配好了,但是sbin目录没有配,所以要单独配置。分配为每台机器配置:

vi ~/.bashrc

追加如下内容:

export PATH=$PATH:$HADOOP_HOME/sbin

执行:

source ~/.bashrc

1.5.3 启动hadoop

在hadoop1上执行以下命令:

格式化hdfs

hdfs namenode -format

一键启动

start-all.sh

不出错的话,就可以庆祝一下了。出错的话,加油。

1.6 测试使用hadoopjps

# hadoop1
1748 Jps
490 NameNode
846 ResourceManager
686 SecondaryNameNode

# hadoop2
400 DataNode
721 Jps
509 NodeManager

# hadoop3
425 NodeManager
316 DataNode
591 Jps

上传文件

hdfs dfs -mkdir /mwf

echo hello > a.txt
hdfs dfs -put a.txt /mwf

hdfs dfs -ls /mwf

Found 1 items
drwxr-xr-x  - root supergroup     0 2020-09-04 11:14 /mwf

由于是云服务器,不想配端口,就不看ui界面了。

2. 最后

以上是我安装成功之后总结的过程,应该没有问题,也可能有遗漏。

3. 参考

https://cloud.tencent.com/developer/article/1084166

https://cloud.tencent.com/developer/article/1084157?from=10680

https://blog.csdn.net/ifenggege/article/details/108396249

到此这篇关于使用docker部署hadoop集群的详细教程的文章就介绍到这了,更多相关docker部署hadoop集群内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解从 0 开始使用 Docker 快速搭建 Hadoop 集群环境

    Linux Info: Ubuntu 16.10 x64 Docker 本身就是基于 Linux 的,所以首先以我的一台服务器做实验.虽然最后跑 wordcount 已经由于内存不足而崩掉,但是之前的过程还是可以参考的. 连接服务器 使用 ssh 命令连接远程服务器. ssh root@[Your IP Address] 更新软件列表 apt-get update 更新完成. 安装 Docker sudo apt-get install docker.io 当遇到输入是否继续时,输入「Y/y」继

  • ubuntu docker搭建Hadoop集群环境的方法

    spark要配合Hadoop的hdfs使用,然而Hadoop的特点就是分布式,在一台主机上搭建集群有点困难,百度后发现可以使用docker构建搭建,于是开搞: github项目:https://github.com/kiwenlau/hadoop-cluster-docker 参考文章://www.jb51.net/article/109698.htm docker安装 文章中安装的是docker.io 但是我推荐安装docker-ce,docker.io版本太老了,步骤如下: 1.国际惯例更新

  • 详解使用docker搭建hadoop分布式集群

    使用Docker搭建部署Hadoop分布式集群 在网上找了很长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,只能自己写一个了. 一:环境准备: 1:首先要有一个Centos7操作系统,可以在虚拟机中安装. 2:在centos7中安装docker,docker的版本为1.8.2 安装步骤如下: <1>安装制定版本的docker yum install -y docker-1.8.2-10.el7.centos <2>安装的时候可能会报错,需要删除这个依赖 r

  • docker 搭建hadoop以及hbase集群详解

    要用docker搭建集群,首先需要构造集群所需的docker镜像.构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后commit容器到新的镜像.另一种方式是,使用Dockerfile来自动化的构造镜像. 下面采用第二种. 1. 创建带ssh服务的ubuntu14.04系统镜像 使用ubuntu14系统来安装hadoop和hbase,由于hadoop集群机器之间通过ssh通信,所以需要在ubuntu14系统中安装ssh

  • 使用docker部署hadoop集群的详细教程

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群 准备: 首先要有一台内存8G以上的centos7机器,我用的是阿里云主机. 其次将jdk和hadoop包上传到服务器中. 我安装的是hadoop2.7.7.包给大家准备好了,链接:https://pan.baidu.com/s/15n

  • docker安装pxc集群的详细教程

    前言 现在mysql自建集群方案有多种,keepalived.MHA.PXC.MYSQL主备等,但是目前根据自身情况和条件,选择使用pxc的放来进行搭建,最大的好处就是,多主多备,即主从一体,没有同步延时问题,方便易用. 本人使用过,直接安装pxc和docker容器方式的安装,个人觉得docker下安装更为方便,也更易维护,所以也推荐大家使用此方式. 搭建环境 环境 centos7 pxc版本镜像:最新版,目前为8.0+ 主机ip 部署 swarm 172.16.9.40 pxc1 manage

  • 阿里云服务器部署RabbitMQ集群的详细教程

    目录 一.为什么要搭建RabbitMQ集群? 二.RabbitMQ集群的三种模式 ️单机模式 普通集群模式 镜像队列 三.阿里云服务器下Docker搭建RabbitMQ集群 ️Docker安装RabbitMQ集群 测试RabbitMQ集群 四.SpringBoot整合RabbitMQ集群 创建Maven聚合工程 引入共有依赖 创建生产者 创建消费者 ️核心源码 五.测试消息的生产与消费 小结 一.为什么要搭建RabbitMQ集群? 未部署集群的缺点 如果RabbitMQ集群只有一个broker节

  • ol7.7安装部署4节点spark3.0.0分布式集群的详细教程

    为学习spark,虚拟机中开4台虚拟机安装spark3.0.0 底层hadoop集群已经安装好,见ol7.7安装部署4节点hadoop 3.2.1分布式集群学习环境 首先,去http://spark.apache.org/downloads.html下载对应安装包 解压 [hadoop@master ~]$ sudo tar -zxf spark-3.0.0-bin-without-hadoop.tgz -C /usr/local [hadoop@master ~]$ cd /usr/local

  • Docker部署Mysql集群的实现

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信红包巨大业务量,数据库承受巨大负载 常见MySQL集群方案 mysql 集群方案介绍,建议使用pxc,因为弱一致性会有问题,比如说a节点数据库显示我购买成功,b 节点数据库显示没有成功,这就麻烦了,pxc 方案是在全部节点都写入成功之后才会告诉你成功,是可读可写双向同步的,但是replication

  • Docker部署MySQL8集群(一主二从)的实现步骤

    目录 一.CentOS7.9安装Docker20 二.部署MySQL集群(一主二从) 三.结果 一.CentOS7.9安装Docker20 1.安装yum-utils工具 yum install -y yum-utils 2.设置docker的依赖源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 注释:CentOS直接使用yum命令安装的Docker版本为1.13.1属于

  • 基于Docker部署Tomcat集群、 Nginx负载均衡的问题小结

    写在前面 看完Dokcer相关的书籍,正好有个项目要这样搞,所以自己练习一下. 当作一百世一样.这里的道理很明白:我思故我在,既然我存在,就不能装作不存在.无论如何,我要为自己负起责任.--王小波<三十而立> 结构图: 这里仅作为一种学习,一般这种负载的话,Nginx是放到主机侧的, JavaWeb(Tomcat)应用放到容器里. 效果 新建文件夹. D=uag;mkdir $D;cd $D;mkdir uag_nginx uag_tomcat8; ls uag_nginx uag_tomca

  • docker安装ElasticSearch:7.8.0集群的详细教程

    ElasticSearch集群支持动态请求的方式搭建集群和静态配置文件搭建集群 关于集群的动态连接方式官方的文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html 前置准备工作 关于参数的官网说明: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-

  • 利用MySQL Shell安装部署MGR集群的详细过程

    目录 1. 安装准备 2. 利用MySQL Shell构建MGR集群 3. MySQL Shell接管现存的MGR集群 4. 小结 参考资料.文档 免责声明 本文介绍如何利用MySQL Shell + GreatSQL 8.0.25构建一个三节点的MGR集群. MySQL Shell是一个客户端工具,可用于方便管理和操作MySQL,支持SQL.JavaScript.Python等多种语言,也包括完善的API.MySQL Shell支持文档型和关系型数据库模式,通过X DevAPI可以管理文档型数

随机推荐