—— 步骤 ——
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 要用到的端口是: 9870 和 8020,主机端口自定义
!!! 后来补充,需要读写数据的 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