使用docker搭建一个完全分布式的hadoop集群

2023-11-05

Build Status
项目地址:https://github.com/czfshine/docker-hadoop

docker-hadoop

A dockerfile for setting up a full Hadoop cluster server

一套在ubuntu 下生成和部署Hadoop的Docker镜像的配置文件集与示例。

包括:

  • 环境配置文件
  • 生成 docker image 的dockerfile
  • 启动和配置docker的docker-compose的配置文件
  • IDEA 的相关配置文件
  • 一些文章博客教程
  • 几个简单到复杂的示例项目

-1. 基础概念

  • Hadoop 一个大数据的分布式计算框架
  • Docker 一个轻量级的容器服务

Hadoop 是一个分布式的计算机框架,显然要有多台机器(当然可以搭伪分布式的).这时候就需要有多台机器.可以用虚拟机模拟,但是虚拟机太重,性能损耗大.

Docker 是一个轻量级的容器服务,相当于一个虚拟机,不过损耗的资源较小

  • Docker 镜像 包括运行一个程序所需的所有文件
  • Volumes 卷 一个Docker的图层,作用于某个正在运行的容器的镜像上面

Docker镜像一旦生成即不可变的,但是我们的程序要生成或获取一些动态的文件.Volume就是来解决这个问题的,它将Host的一个路径与容器的一个路径关联起来,容器读写该路径下的文件会被代理到Host关联的路径下.

  • 端口映射 将容器的端口和主机的端口关联起来

我们的Hadoop 的datanode和namenode什么的都会监听同样的端口,我们将这些端口映射到主机的不同端口上,可以从主机访问各个容器的状态.

  • docker-compose 用来启动和配置多个镜像

我们启动一个hadoop的docker集群,必然有多个容器要先后启动,他们的端口和文件映射都需要独立的进行配置,docker-compose是一个用来的帮助我们完成这些功能的小工具

0.安装依赖

在宿主机上需要用到的程序大概有(不完全):

  • docker-ce 社区版就行

  • maven java 的库和项目管理程序

  • idea java的IDE

1.生成镜像

这一步可以跳过,直接在docker hub下载我上传的镜像
然后在某一步出错或卡住,去看持续集成是怎么做的(travis-ci的脚本)

1.0 前言

其实很多人(包括我)都搭建过hadoop的镜像,然后上传到Docker Hub的,区别(可能)只是里面的配置文件不一样,所以不想自己搭建的可以用搭好的,然后再改改.不过不保证可用性,下面是一些看起来比较有用的镜像:

1.1 参考资料

1.2 镜像继承结构

  • ubuntu:xenial 基础的ubuntu系统镜像
    • hadoop-base 包括jdk,hadoop等需要用到的安装包
      • hadoop-master 主机
      • hadopp-slave 计算节点

1.3 基础镜像搭建

我们要将运行hadoop所需的文件,程序安装到该镜像

这里分成多个不同层次的镜像构建,还没研究docker构建的缓存细节,所以这样当做手动使用缓存,不需要每次都从零开始构建

  • 先搭个jdk8的环境

todo :这里为了省事直接apt get的,比较大,下一次改成解压二进制包试试大小

cd ./docker/jdk8
docker build -t czfshine/openjdk8 .

测试一下:

docker run -t -i czfshine/openjdk8:latest
java -version
  • 然后是ssh
cd ./docker/ssh
docker build -t czfshine/ssh .

同样的测试一下

docker run -t -i czfshine/ssh
ssh localhost

下面正式构建hadoop镜像了

  • 首先cd到docker/hadoop-base文件夹下

  • 执行./download.sh 它将从清华大学镜像站下载2.7.7版本的Hadoop

    这一步当然可以写在Dockerfile里面,可是考虑到每一次构建镜像都要下载一次太慢了,就算了:)

  • 执行clean.sh 删掉hadoop里面的文档,这些我们不需要打包到镜像的

 docker build -t czfshine/hadoop-base:2.7.7 .

2.测试镜像和启动

启动

tools下有两个脚本

  • start-all-containers.sh 启动一个hadoop集群,并attach到master
  • stop-all-containers.sh 关掉并清理上一个脚本启动的容器

启动集群后,连接master,在用户目录下有个start-hadoop.sh脚本,执行后会在各个节点启动对应的hadoop服务.

执行命令和代码

启动集群和服务后,在master下可以直接执行下列类似的命令:

hadopp dfs -ls /
hadoop jar xxxx.jar xxx yyy zzz

同时,挂载了宿主机的~/hadoop 到容器的/data.需要执行的jar包和数据可以直接放到该目录下.

3. docker-compose 配置和启动

todo

4.IDEA的配置

todo :基本上开箱即用,不过可以装几个QOL的插件

5. 示例项目

在example文件夹下,具体看里面的README.MD

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用docker搭建一个完全分布式的hadoop集群 的相关文章

随机推荐

  • python3刷leetcode第165题165.compare version number

    class Solution def compareVersion self version1 str version2 str gt int version1 version1 split version2 version2 split
  • 入门ResNet,在Cub200数据集上复现Resnet50

    1 背景问题 1 如果只是单纯地把卷积层和池化层进行堆叠 造成的问题就会有梯度消失和梯度爆炸 梯度消失是指当在某一层进行BP的时候 误差为一个小于零的数 那不断相乘 就会趋近于零 梯度爆炸则是指某一层的开始误差都是大于1的数 直接相乘就会导
  • centos7 sh 注释_shell 中的单行注释和多行注释

    导读 关于 shell 中的单行注释和多行注释的问题 本文档介绍两种实用的方法 1 单行注释 众所周知 比如想要注释 echo Hello World root Jaking vim test sh echo Hello World 2 多
  • 如何进行需求测试/需求评审

    由于软件系统的复杂性 在需求分析阶段可能存在着开发方对委托方业务需求理解不全面 不准确的情况 在这种情况下 如果不进行相关的质量控制 往往会造成开发结果与用户需求不一致的后果 需求测试的目的就在于保证软件设计最大可能地满足有关用户的所有需求
  • 从前端传来的JSON中获取数据

    首先推荐一个神器 JSON在线解析及格式化验证 JSON cn 里面的 JSON在线解析 和 JSON生成JAVA实体 两个功能 前几天可是帮了我大忙了 前几天写一个功能 在这个功能中前端传过来的JSON十分复杂 示例如 Dispositi
  • virtualbox 安装centos7之后无法ssh登陆

    文章目录 virtualbox 安装 centos7 开启centos7网络 sshd 服务是否开启 设置 virtualbox 端口转发功能 设置secureCrt 连接参数 virtualbox 安装 centos7 virtualbo
  • 贝叶斯网络与R语言

    贝叶斯网络与R语言 基本语句 1 1网络的创建 加载扩展包和bnlearn包自带数据集marks 数据集marks 88 学生5门课的成绩 MECH mechanics VECT vectors ALG algebra ANL analys
  • 十一. Kubernetes 容器 container 设置详解

    目录 一 基础解释 yaml设置容器拉取镜像注意点 1 containers image 镜像 2 containers imagePullPolicy 镜像拉取策略 3 配置拉取私库镜像 spec下的imagePullSecrets 4
  • 【六级单词】

    affordable 价格合理的 cash 现金 insurance 保险 forune 一大笔钱 机会 运气 misfortune 不幸 灾难 luxury 奢侈 豪华 luxurious shop pension 养老金 抚恤金 com
  • C语言每日一题:16:数对。

    思路一 基本思路 1 x y均不大于n 就是小于等于n 2 x y大于等于k 3 一般的思路使用双for循环去遍历每一对数 代码实现 include
  • pytorch霹雳巴拉——图像分类篇

    up给的教程路线 图像分类 目标检测 一步步学习用pytorch实现深度学习在cv上的应用 并做笔记整理和总结 参考内容来自 up主的b站链接 https space bilibili com 18161609 channel index
  • layui 动态加载 select

    感谢小张帅三代以及他的好文 layui ajax select 动态添加数据方法 给我指明了前进的方向 首先 这是一个学习的过程 并不是最优方案 只是 玩索而有得 而己 做了一个联动的搜索框 本来一开始想用layuiselect第三方插件
  • 图的遍历方法——DFS和BFS

    DFS类似于树的先序遍历 因此可以用递归实现 BFS类似于树的层次遍历 因此可以用队列实现 说明 下面代码中图的存储方式是邻接表 关于邻接表和邻接矩阵可看邻接表和邻接矩阵 1 深度优先遍历 Depth First Search 思想 从图中
  • 微信小程序实现单/多图片上传(预览删除)

    wxml结构 上传图片
  • Linux中Vim文件夹路径,一些有用的Linux命令和Vim使用总结

    常见Linux命令 文件复制 移动 删除 创建 复制 cp v 源文件路径 目标文件路径 移动 mv v 源文件路径 目标文件路径 删除 rm v 文件路径 rmdir v 文件夹路径 文件夹要为空 rm rv 文件夹路径 递归删除文件夹及
  • Qt界面开发(一)(各种控件以及图表)

    注 资源主要来源 http www qtcn org bbs u 110085 刘大神 如若侵权 请联系删除 本文只是将作品集合到起来 方便大家一起学习 资源集合已经放到 链接 https pan baidu com s 1sVvQE8uD
  • ts 因为在此系统上禁止运行脚本(win10系统)

    今天弄了一下Ts 有点晚了 但是确实是才开始尝试 以前只是看了看 1 先安装 npm install g typescript 2 安装成功 typescript 4 0 3 added 1 package from 1 contribut
  • Goby的使用 漏洞扫描工具

    获取自己虚拟机的ip 打开Goby 点击扫描 输入虚拟机的IP地址 开始扫描 扫描结束这里没有扫到漏洞 点击报告查看报告 右上角下载生成报告 漏洞举例
  • C++学习笔记之浅拷贝&深拷贝的理解

    一 浅拷贝 浅拷贝就是把类中的成员属性简单的复制 如果有指针成员变量 也只是拷贝指针的地址 下面案例就是先创建teacher1对象 再把它初始化给teacher2对象 在初始化时需要调用复制构造函数 因为Teacher类没有重写复制构造函数
  • 使用docker搭建一个完全分布式的hadoop集群

    项目地址 https github com czfshine docker hadoop docker hadoop A dockerfile for setting up a full Hadoop cluster server 一套在u