最近要在公司里搭建一个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. 步骤

大致分以下几步:

  1. 安装docker
  2. 基础环境准备
  3. 配置网络,并启动docker容器
  4. 配置host及ssh免密登录
  5. 安装配置hadoop
  6. 测试使用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镜像

  1. 拉取官方centos7镜像
docker pull centos
  1. 通过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环境的镜像

  1. 将准备好的包放在当前目录下。hadoop-2.7.7.tar.gzjdk-8u202-linux-x64.tar.gz

  2. 通过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容器

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

  1. 创建网络

    docker network create --driver bridge hadoop-br

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

  2. 启动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还开启了端口映射。

  3. 查看网络情况

    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
  4. 登录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上操作

  1. 进入hadoop1

    docker exec -it hadoop1 bash
  2. 创建一些文件夹,一会在配置中要用到

    mkdir /home/hadoop
    mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data
  3. 切换到hadoop配置的目录

    cd $HADOOP_HOME/etc/hadoop/
  4. 编辑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>
  5. 编辑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>
  6. 编辑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>
  7. 编辑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>
  8. 编辑slaves

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

    hadoop2
    hadoop3
  9. 把文件拷贝到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 在每台机器上操作

  1. 分别连接每台机器

    docker exec -it hadoop1 bash
    docker exec -it hadoop2 bash
    docker exec -it hadoop3 bash
  2. 配置hadoop sbin目录的环境变量

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

    vi ~/.bashrc

    追加如下内容:

    export PATH=$PATH:$HADOOP_HOME/sbin

    执行:

    source ~/.bashrc

1.5.3 启动hadoop

在hadoop1上执行以下命令:

  1. 格式化hdfs

    hdfs namenode -format
  2. 一键启动

    start-all.sh

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

1.6 测试使用hadoop

  • jps
# 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集群的更多相关文章

  1. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  2. docker安装hadoop集群

    docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...

  3. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  4. 如何部署hadoop集群

    假设我们有三台服务器,他们的角色我们做如下划分: 10.96.21.120 master 10.96.21.119 slave1 10.96.21.121 slave2 接下来我们按照这个配置来部署h ...

  5. 批量部署Hadoop集群环境(1)

    批量部署Hadoop集群环境(1) 1. 项目简介: 前言:云火的一塌糊涂,加上自大二就跟随一位教授做大数据项目,所以很早就产生了兴趣,随着知识的积累,虚拟机已经不能满足了,这次在服务器上以生产环境来 ...

  6. 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建

    准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...

  7. 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  8. 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...

  9. 阿里云ECS服务器部署HADOOP集群(六):Flume 安装

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...

随机推荐

  1. 用 Python 写出这样的进度条,刷新了我对进度条的认知

    ❞ 1 简介 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给 ...

  2. Docker 快速搭建 MySQL 5.6 开发环境

    使用 Docker 快速搭建一个 MySQL 5.6 开发环境 步骤 获取镜像 docker pull mysql:5.6 启动容器,密码 123456,映射 3306 端口 docker run - ...

  3. Visual Studio安装

    2017 安装的时候,一直显示,安装成功但是有告警. 解决方法: 将visual studio 2017 installer进行卸载,然后安装hw的ios 不能确保下次也可以成功

  4. 使用DockerFile构建运行GoWeb

    安装docker # 安装一些必要的系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加软件源信息 # ...

  5. C#LeetCode刷题-回溯算法

    回溯算法篇 # 题名 刷题 通过率 难度 10 正则表达式匹配   18.8% 困难 17 电话号码的字母组合   43.8% 中等 22 括号生成   64.9% 中等 37 解数独   45.8% ...

  6. C#设计模式之13-职责链模式

    职责链模式(Chain of Responsibility Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archive ...

  7. Jira 和 Confluence 企业最佳部署方式

    在Atlassian,我们为客户提供不同的方式来部署 Atlassian 产品:可以部署在由 Altassian 管理的云端(Cloud)上,也可以部署在客户自己选择的服务器(Server)或数据中心 ...

  8. Git常用命令参考手册

    配置 # 查看全局配置列表 git config -l # 查看局部配置列表 git config --local --list # 查看已设置的全局用户名/邮箱 git config --globa ...

  9. 《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理

    1.2计算机组成及基本原理 1.2.1硬件组成 这里说的计算机主要指微型计算机,俗称电脑.一般我们见到的有台式机.笔记本等,另外智能手机.平板也算.有了一台计算机,我们就能做很多事情了,比如我在写这篇 ...

  10. 虚拟化技术之kvm磁盘管理工具qemu-img

    在前边的博客中,我们大致了解了virsh这个工具对kvm虚拟机的一些操作,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/virsh/:今天我们来了解下kvm ...