【Docker x Hadoop】使用 Docker 搭建 Hadoop 集群(从零开始保姆级)

本文档详细记录了如何使用Docker从零开始搭建Hadoop集群,包括创建Docker容器,配置Java和Hadoop环境,设置SSH连接,克隆容器,配置SSH免密登录,编写集群配置并启动集群的过程。遇到的问题包括Java API访问Hadoop集群的端口映射问题和Docker容器间的SSH访问。
摘要由CSDN通过智能技术生成


2021-10-7 补充(务必看一下)

又双叒叕来填坑了,6 号的补充让 java 可以成功访问到集群,完成文件夹的创建和删除,但文件的上传和下载却出问题了,根本原因是访问不到 datanode 结点

后边来的可以补救一下,也就是为 hadoop001 (datanode 结点中的一个)添加 9866 和主机的 9866 进行映射,由它完成数据的读写操作
如果是需要补救或者想要进一步了解的话,可以看这篇文章,详细介绍了补救方法以及问题分析:
【Docker x Hadoop x Java API】xxx could only be written to 0 of the 1 minReplication nodes,There are 3


2021-10-6 补充(务必看一下)

好叭-- 我承认使用 nginx 进行代理是疏忽了,到后面使用 Java 访问集群的时候会出现问题
正确的方式应该是通过端口映射,将需要的端口(9870,9868,8088,8020)和主机端口进行映射,在外网直接访问映射后的端口就 OK 了

所以在容器启动(docker run)就可以为对应的容器映射端口了
(下边已作修改,添加了端口映射的,nginx 那一部分就可以不用看啦)

如果绒球已经启动,又不想直接干掉的话(就像我—_—),也可以为容器动态添加端口映射
可以参照这篇文章:【Docker之轨迹】为正在运行中的容器动态添加端口映射


0. 背景

看到网上的教程,都是使用虚拟机克隆出多台虚拟机模拟集群
但在真正的服务器上,发现这种方法行不通了
这时候就想起 Docker 了,仔细想象 Docker 学完到现在还没真正实战过,这次正好是一个好机会

实现思路也很简单,在 Docker 中创建多个 Centos 容器
每个容器当作一台服务器用,就可以模拟出集群环境了

好,动手!
还不熟悉 Docker 的,可以参考这里:【Docker之轨迹】Docker 入门使用(穿插踩坑经历)

本博客 Hadoop 版本为 3.1.3,参考尚硅谷视频


1. 创建出第一个容器

1)	首先拉取 centos
	docker pull centos

2)	创建一个 centos
!!!	后来补充,在这里添加端口映射,hadoop001 要用到的端口是: 98708020,主机端口自定义
!!!	后来补充,需要读写数据的 9866 端口,这里的主机映射端口只能设置为 9866,不能自定义
	docker run --privileged=true --name=hadoop001 -p xxx:9870 xxx:8020 9866:9866 -dit centos /sbin/init
	
	-dit 表示交互式且后台运行,少了 -it 容器会自动停止
	--privileged=true 和 /sbin/init 表示特权启动,后面可能需要实用到 service 命令,需要由这个权限才可以
	没有上面这个,再使用时会报 PID 1 的错误哦

2. 为该容器配置 java 和 hadoop 环境

将 jdk 和 hadoop 从主机复制到该容器中

docker cp <jdk路径> <容器id>:<容器路径>
docker cp <hadoop路径> <容器id>:<容器路径>

在 /etc/profile.d/ 下创建文件 mydev.sh
vim mydex.sh 文件内容如下

# Java
export JAVA_HOME=<jdk在容器的路径>
export PATH=$PATH:$JAVA_HOME/bin

# Hadoop
export HADOOP_HOME=<hadoop在容器的路径>
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# Constant
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

第一第二个是两个环境,最后一个是一些常量,在启动集群的时候,还要用到这些常量,否则可能启动失败
最后执行 source /etc/profile 使配置文件生效


3. 配置允许外界通过 ssh 连接容器

我们需要让各个容器产生联系,才能构成集群,但默认情况下,容器并不能被其他容器直接通过 ssh 访问,所以这里需要配置

1)	首先需要设置密码(输入以下命令,回车设置密码即可)
	passwd root
	大概率会提示没有该命令,就得下载它,然后再设置就好了
	yum install passwd

2)	然后下载 ssh,以下三步(安装了服务端和客户端)
	yum install openssh
	yum install openssh-server
	yum install openssh-clients

3)	然后检查配置文件,查看以下两个配置是否一样(默认应该都是这样的)
	vim /etc/ssh/sshd_config
	  PermitRootLogin yes
	  PasswordAuthentication 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值