基于Docker快速搭建Hadoop集群和Flink运行环境

2023-11-07

  1. 前言
  2. 搭建集群
  3. 环境升级
  4. 配置Hadoop
  5. 配置Flink
  6. 打包镜像
  7. 启动集群

前言

本文主要讲,基于Docker在本地快速搭建一个Hadoop 2.7.2集群和Flink 1.11.2运行环境,用于日常Flink任务运行测试。
前任栽树,后人乘凉,我们直接用Docker Hadoop镜像kiwenlau/hadoop-cluster-docker来搭建,这个镜像内已经配置部署好了Hadoop 2.7.2,感谢前辈们造好轮子。

该Docker Hadoop镜像优点:基于Docker快速搭建多节点Hadoop集群

我们要搭建一个3节点的Hadoop集群,集群架构如下图,一个主节点hadoop-master,两个数据节点hadoop-slave1和hadoop-slave2。每个Hadoop节点运行在一个Docker容器中,容器之间互相连通,构成一个Hadoop集群。
集群架构

还不熟悉Docker的可以参见:菜鸟教程-Docker教程
搭建过程部分搬运自镜像作者教程:基于Docker搭建Hadoop集群之升级版

搭建集群

1.下载Docker镜像

sudo docker pull kiwenlau/hadoop:1.0

2.下载GitHub仓库

git clone https://github.com/kiwenlau/hadoop-cluster-docker

3.创建Hadoop网络

sudo docker network create --driver=bridge hadoop

4.运行Docker容器

cd hadoop-cluster-docker
./start-container.sh

运行结果

start hadoop-master container...
start hadoop-slave1 container...
start hadoop-slave2 container...
root@hadoop-master:~#

启动了3个容器,1个master, 2个slave
运行后就进入了hadoop-master容器的/root目录,我们在目录下新建一个自己的文件夹shadow
这时候不要着急启动Hadoop集群,我们先升级一下环境配置

环境升级

1.更新包

apt-get update
apt-get install vim

2.升级JDK
将JDK 1.7升级到JDK 1.8,先去官网下载一个JDK 1.8:jdk-8u261-linux-x64.tar.gz

从本地拷贝JDK 1.8到Docker容器hadoop-master

docker cp jdk-8u261-linux-x64.tar.gz hadoop-master:/root/shadow

解压升级

tar -zxvf jdk-8u261-linux-x64.tar.gz

sudo update-alternatives --install /usr/bin/java java /root/shadow/jdk1.8.0_261/bin/java 300
sudo update-alternatives --config java

sudo update-alternatives --install /usr/bin/javac javac /root/shadow/jdk1.8.0_261/bin/javac 300
sudo update-alternatives --config javac

java -version
javac -version

卸载JDK1.7:删除JDK1.7的目录即可

3.配置环境变量

vi ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
export JAVA_HOME=/root/shadow/jdk1.8.0_261
export JAVA=/root/shadow/jdk1.8.0_261/bin/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASS_PATH:$HADOOP_CLASSPATH
source ~/.bashrc

4.修改集群启动脚本

vi start-hadoop.sh
关闭Hadoop安全模式,末尾加上:hadoop dfsadmin -safemode leave

配置Hadoop

修改Hadoop配置,Hadoop配置路径:/usr/local/hadoop/etc/hadoop

core-site.xml

<?xml version="1.0"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/journal</value>
    </property>
</configuration>

yarn-site.xml

<?xml version="1.0"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>1024</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</name>
        <value>3600</value>
    </property>
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/tmp/logs</value>
    </property>
</configuration>

hdfs-site.xml

<?xml version="1.0"?>
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///root/hdfs/namenode</value>
        <description>NameNode directory for namespace and transaction logs storage.</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///root/hdfs/datanode</value>
        <description>DataNode directory</description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.safemode.threshold.pct</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.datanode.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>

配置Flink

1.Flink官网下载:Flink 1.11.2

2.从本地拷贝JDK 1.8到Docker容器hadoop-master

docker cp flink-1.11.2-bin-scala_2.11.tgz hadoop-master:/root/shadow

3.修改Flink配置

tar -zxvf flink-1.11.2-bin-scala_2.11.tgz
cd flink-1.11.2/conf/
vi flink-conf.yaml 

flink-conf.yaml

jobmanager.rpc.address: hadoop-master
jobmanager.memory.process.size: 1024m
taskmanager.memory.process.size: 1024m
taskmanager.numberOfTaskSlots: 2
parallelism.default: 2

打包镜像

1.将刚刚配置好的容器hadoop-master打包成新的镜像

docker commit -m="Hadoop&Flink" -a="shadow" fd5163c5baac kiwenlau/hadoop:1.1

2.删除正在运行的容器

cd hadoop-cluster-docker
./rm-container.sh

3.修改启动脚本,将镜像版本改为1.1

vi start-container.sh

start-container.sh

#!/bin/bash

# the default node number is 3
N=${1:-3}


# start hadoop master container
sudo docker rm -f hadoop-master &> /dev/null
echo "start hadoop-master container..."
sudo docker run -itd \
                --net=hadoop \
                -p 50070:50070 \
                -p 8088:8088 \
		-p 8032:8032 \
		-p 9000:9000 \
                --name hadoop-master \
                --hostname hadoop-master \
                kiwenlau/hadoop:1.1 &> /dev/null


# start hadoop slave container
i=1
while [ $i -lt $N ]
do
	sudo docker rm -f hadoop-slave$i &> /dev/null
	echo "start hadoop-slave$i container..."
	sudo docker run -itd \
	                --net=hadoop \
	                --name hadoop-slave$i \
	                --hostname hadoop-slave$i \
	                kiwenlau/hadoop:1.1 &> /dev/null
	i=$(( $i + 1 ))
done 

# get into hadoop master container
sudo docker exec -it hadoop-master bash

启动集群

1.运行Docker容器

./start-container.sh

运行后就进入了hadoop-master容器的/root目录

2.启动Hadoop集群

./start-hadoop.sh

打开本机浏览器,查看已经启动的Hadoop集群:Hadoop集群
查看集群概况:集群概况

Hadoop集群

然后就可以愉快的在Docker Hadoop集群中测试Flink任务了!

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

基于Docker快速搭建Hadoop集群和Flink运行环境 的相关文章

随机推荐

  • 运行中的docker修改配置文件

    运行中的docker修改配置文件 背景 环境 修改 yshop redis 在docker启动后可以自动启动 背景 在作测试的时候 遇到一个问题 docker 跑起来了 配置呀 数据导入呀都搞好了 突然发现 端口没有作映射 mysql5 7
  • yolov8系列[四]-yolov8模型部署

    yolov8系列 四 yolov8模型部署jetson平台 jetson平台 0 安装环境 1 下载源代码 2 pt 转换模型转换为 onnx 模型 3 配置deepstream yolo 4 运行 jetson平台 0 安装环境 下载to
  • 常用Linux的ssh远程终端连接工具

    1 putty 说明 putty是最简单的SSH工具 无需安装 支持多系统版本 下载后就可以直接使用 优点 1 免费 2 免安装 缺点 1 不支持标签模式 2 默认设置不友好 很多功能都需要额外配置才行 例如自动登录功能 3 不能传输文件
  • SCP 命令

    svn 删除所有的 svn文件 find name svn type d exec rm fr linux之cp scp命令 scp命令详解 2011 03 09 17 27 22 分类 Linux 标签 linux cp scp comm
  • 管理学经典定理汇粹

    一 素养 蓝斯登原则 在你往上爬的时候 一定要保持梯子的整洁 否则你下来时可能会滑倒 提出者 美国管理学家蓝斯登 点评 进退有度 才不至进退维谷 宠辱皆忘 方可以宠辱不惊 卢维斯定理 谦虚不是把自己想得很糟 而是完全不想自己 提出者 美国心
  • SVN下最高效打基线方法

    作者 张克强 作者微博 张克强 敏捷307 2014 7 6 方法一来自于我的一条微博 组织级scm建一个名为controlled的目录 当项目某文档通过评审后 组织级scm从项目目录下找到那文档 复制到controlled目录下 请 sc
  • 通过命令行运行java文件(jar、class),以及生成一个简单的jar包

    最近在开发中涉及到了java文件的运行 踩了一些坑 简单记录一下 jar文件 在装有java的计算机中 要直接运行jar文件 可以用命令 java jar jarpath 若要指定运行类名 则用 java cp jarpath classn
  • PointNet家族

    点云数据的特性和挑战 1 点云具有不规则性 顺序不相关性 置换排序不变性对深度学习具有很大的挑战 Irregular unordered permutation invariance 2 刚性变换 scale transorfmation
  • 开源库生态与供应链论坛

    ChinaOSC 2022开源库生态与供应链技术论坛将于8月21日在陕西省西安高新国际会议中心召开 开源软件供应链管理是软件项目持续维护过程中的关键任务 本论坛邀请来自学术界和开源社区的专家分享开源三方库和供应链管理有关的学术研究成果和社区
  • SQL中的PowerDesigner逐步深入提问,你能掌握多少?

    你提到了有PowerDesigner操作经验 请解释一下PowerDesigner是什么 以及它在数据库设计和开发中的作用是什么 标准回答 PowerDesigner是一种数据库建模和设计工具 它用于创建数据库模型 设计表结构 定义关系和生
  • Python入门教程完整版(懂中文就能学会)

    今天给大家带来了干货 Python入门教程完整版 完整版啊 完整版 言归正传 小编该给大家介绍一下这套教程了 希望每个小伙伴都沉迷学习 无法自拔 本套教程学习时间15天 1 3天内容 为Linux基础命令 4 13天内容 为Python基础
  • Oauth2授权模式访问之客户端模式(client_credentials)访问

    Oauth3授权模式访问之客户端模式 client credentials 访问 使用POSTMAN获取token url上填写http localhost 8080 oauth token grant type client creden
  • confidence weighted learning

    这个算法原作者意思是在NLP中面对高维向量和数据稀疏时效果会不错 算法保持了当前预测向量w的均值和方差 并做优化 代码实现如下 cw learning algorithm def get phi confidence parameter p
  • 从数仓到数据中台,谈技术选型最优解

    本文根据颜博老师在 Deeplus直播第218期 线上分享演讲内容整理而成 文末有获取本期PPT 回放的途径 不要错过 颜博 马蜂窝数仓研发总监 现任马蜂窝数据仓库团队负责人 曾供职于京东 IBM 亚信等公司 数据行业老兵一名 历经传统数据
  • 2023年的C基础笔记

    头介绍 include
  • 《汇编语言(第四版)》---王爽 第一章 基础知识 详细笔记 ~后续章节笔记,课后检测,实验代码持续更新中

    汇编语言 第四版 王爽 第一章基础知识 汇编语言是直接在硬件之上工作的汇编语言 1 1 机器语言 机器语言就是机器指令的集合 机器指令展开来讲就是一台计算机可以正确执行的命令 早期的程序员进行纸带打孔 电子计算机的机器指令是一列二进制数字
  • 查看系统中支持CUDA的设备数量和属性---deviceQuery示例

    在你安装了CUDA显卡驱动之后 需要检测是否安装正确 或者需要查看系统中支持CUDA的设备数量和属性 可以通过SDK中的deviceQuery示例来查看 工程目录位置 C ProgramData NVIDIA Corporation CUD
  • 谈谈数据的增量更新

    谈谈数据的增量更新 在数据同步的过程中 必然会遇到数据增量更新的需求 但如果没有一个有效的数据增量更新的设计与机制 可能每次上游数据更新时 你都需要将全量的数据同步一遍 即使只有1 的数据发生了更新 全量数据同步在数据首次同步的时候是需要的
  • source insight3.5 unable to create the project directory file

    在开始 gt 解除锁定的工程就可以了
  • 基于Docker快速搭建Hadoop集群和Flink运行环境

    前言 搭建集群 环境升级 配置Hadoop 配置Flink 打包镜像 启动集群 前言 本文主要讲 基于Docker在本地快速搭建一个Hadoop 2 7 2集群和Flink 1 11 2运行环境 用于日常Flink任务运行测试 前任栽树 后