【在阿里云ECS1核2G(centos)用docker配置伪分布式hadoop集群】

在阿里云ECS1核2G(centos)用docker配置伪分布式hadoop集群

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、开始前的准备

1.用SSH软件登录ECS(putty,Xshell等)

2.centos安装docker:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3.启动docker:

sudo systemctl start docker

4.拉取一个centos8的镜像:

docker pull centos:8

在这里插入图片描述
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、创建一个容器 java_ssh_proto,用于配置一个包含 Java 和 SSH 的环境

1.创建容器:

docker run -d --name=java_ssh_proto --privileged centos:8 /usr/sbin/init

2.进入容器:

docker exec -it java_ssh_proto bash

3.配置镜像:

sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.ustc.edu.cn/centos|g' -i.bak /etc/yum.repos.d/CentOS-Linux-AppStream.repo /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Linux-Extras.repo /etc/yum.repos.d/CentOS-Linux-PowerTools.repo /etc/yum.repos.d/CentOS-Linux-Plus.repo

4.yum makecache

这里会出现问题,报错Error: Failed to download metadata for repo ‘appstream’

问题原因:在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。CentOS 8已于2021年12月31日寿终正寝,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

解决办法:如果你仍然需要运行你的旧CentOS 8,你可以在/etc/yum.repos中更新repos.d使用vault.centos.org代替mirror.centos.org。

解决步骤:

cd /etc/yum.repos.d
vi CentOS-Linux-BaseOS.repo

注释已有的baseurl
添加新的bseurl:

baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/

vi CentOS-Linux-AppStream.repo

注释已有的baseurl
添加新的bseurl:

baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/ 

5.再次yum makecache即可成功

在这里插入图片描述

6.安装 OpenJDK 8 和 SSH 服务:

yum install -y java-1.8.0-openjdk-devel openssh-clients openssh-server

7.启用 SSH 服务:

systemctl enable sshd && systemctl start sshd

8.退出容器,然后运行以下两条命令停止容器,并保存为一个名为 java_ssh 的镜像:

docker stop java_ssh_proto
docker commit java_ssh_proto java_ssh

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、Hadoop 安装

1.在hadoop官网(Hadoop 官网地址:http://hadoop.apache.org/)下载压缩包Hadoop 3.1.4 镜像,并将它上传到ecs

2.现在以之前保存的 java_ssh 镜像创建容器 hadoop_single:

docker run -d --name=hadoop_single --privileged java_ssh /usr/sbin/init

3.将下载好的 hadoop 压缩包拷贝到容器中的 /root 目录下:

docker cp <你存放hadoop压缩包的路径> hadoop_single:/root/

4.进入容器root文件夹,解压文件,并将它拷贝到一个常用的地方:

tar -zxf hadoop-3.1.4.tar.gz
mv hadoop-3.1.4 /usr/local/hadoop

5.配置环境变量:

echo "export HADOOP_HOME=/usr/local/hadoop" >> /etc/bashrc
echo "export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" >> /etc/bashrc 

6.然后退出 docker 容器并重新进入,这时,echo $HADOOP_HOME 的结果应该是 /usr/local/hadoop

echo "export JAVA_HOME=/usr" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
echo "export HADOOP_HOME=/usr/local/hadoop" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh

7.输入hadoop version检查hadoop安装情况出现问题bash: hadoop: command not found

解决办法:

vi /etc/profile,进入编辑器后,添加Hadoop路径:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

退出编辑器,source /etc/profile,再修改启动项:

vi ~/.bashrc

在最后添加:
source /etc/profile

这里hadoop version就可以显示hadoop版本了在这里插入图片描述
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四、HDFS配置与使用

1.进入hadoop_single容器,新建用户,名为 hadoop:

adduser hadoop

安装一个小工具用于修改用户密码和权限管理:

yum install -y passwd sudo

设置 hadoop 用户密码:

passwd hadoop

修改 hadoop 安装目录所有人为 hadoop 用户:

chown -R hadoop /usr/local/hadoop

用文本编辑器修改 /etc/sudoers 文件,在
root ALL=(ALL) ALL
之后添加一行
hadoop ALL=(ALL) ALL
然后退出容器。

2.在hadoop用户下登录容器

执行vi ~/.bashrc在最后添加

source /etc/profile

这里的操作是为了之后用hadoop用户登录不用再一直执行这样的启动项操作

3.关闭并提交容器 hadoop_single 到镜像 hadoop_proto:

docker stop hadoop_single
docker commit hadoop_single hadoop_proto

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
接下来的4-9实现的是单容器下的HDFS,用多个容器实现hadoop集群的可以跳过这段,直接从步骤10开始

4.创建新容器 hdfs_single:

docker run -d --name=hdfs_single --privileged hadoop_proto /usr/sbin/init

5.进入刚建立的容器:

docker exec -it hdfs_single su hadoop

whoami显示是hadoop用户

生成 SSH 密钥:

ssh-keygen -t rsa

这里可以一直按回车直到生成结束

然后将生成的密钥添加到信任列表:

ssh-copy-id hadoop@172.17.0.2

查看容器 IP 地址:

ip addr | grep 172

从而得知容器的 IP 地址是 172.17.0.2

6.在启动 HDFS 以前我们对其进行一些简单配置,Hadoop 配置文件全部储存在安装目录下的 etc/hadoop 子目录下,所以我们可以进入此目录:

cd $HADOOP_HOME/etc/hadoop

修改两个文件:core-site.xml 和 hdfs-site.xml

在 core-site.xml 中,我们在 标签下添加属性:

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://172.17.0.2:9000</value>
</property>
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://172.17.0.2:9000</value>
</property>

在这里插入图片描述
在 hdfs-site.xml 中的 标签下添加属性:

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

在这里插入图片描述
### 7.格式化文件结构:

hdfs namenode -format

8.启动 HDFS:

start-dfs.sh

9.JPS看到NN,SNN,DN进程

在这里插入图片描述

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
接下来的10-18是用多个容器实现hadoop集群,总体思路是这样的,我们先用一个包含 Hadoop 的镜像进行配置,配置成集群中所有节点都可以共用的样子,然后再以它为原型生成若干个容器,构成一个集群

10.首先,我们将使用之前准备的 hadoop_proto 镜像启动为容器:

docker run -d --name=hadoop_temp --privileged hadoop_proto /usr/sbin/init

11.进入 Hadoop 的配置文件目录:

cd $HADOOP_HOME/etc/hadoop

首先编辑 workers ,更改文件内容为:

dn1
dn2

然后编辑 core-site.xml,在 中添加以下配置项:

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://nn:9000</value>
</property>
<!-- 配置 Hadoop 的临时文件目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>file:///home/hadoop/tmp</value>
</property>

配置 hdfs-site.xml,在 中添加以下配置项:

<property>
	<name>dfs.replication</name>
	<value>2</value>
</property>
<!-- 设置储存命名信息的目录 -->
<property>
	<name>dfs.namenode.name.dir</name>
	<value>file:///home/hadoop/hdfs/name</value>
</property>

12.最后需要配置一下 SSH :

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
ssh-copy-id -i ~/.ssh/id_rsa hadoop@localhost

13.需要补的免密操作:

先将root/.ssh下的id_rsa.pub发送给anthorzied_keys:

cat id_rsa.pub >> authorized_keys

再将root/.ssh下的文件复制一份给home/hadoop/,ssh下,并在root下把id_rsa操作:

chmod 777 id_rsa

让id_rsa变成其他用户可读,

chmod 666 known_hosts

让known_hosts其他用户可写,这样就可以了

14.到此为止,集群的原型就配置完毕了,可以退出容器并上传容器到新镜像 cluster_proto :

docker stop hadoop_temp
docker commit hadoop_temp cluster_proto

15.部署集群,首先,要为 Hadoop 集群建立专用网络 hnet :

docker network create --subnet=172.20.0.0/16 hnet

16.创建集群容器:

docker run -d --name=nn --hostname=nn --network=hnet --ip=172.20.1.0 --add-host=dn1:172.20.1.1 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init
docker run -d --name=dn1 --hostname=dn1 --network=hnet --ip=172.20.1.1 --add-host=nn:172.20.1.0 --add-host=dn2:172.20.1.2 --privileged cluster_proto /usr/sbin/init
docker run -d --name=dn2 --hostname=dn2 --network=hnet --ip=172.20.1.2 --add-host=nn:172.20.1.0 --add-host=dn1:172.20.1.1 --privileged cluster_proto /usr/sbin/init

17.进入命名节点:

docker exec -it nn su hadoop

格式化 HDFS:

hdfs namenode -format

启动 HDFS:

start-dfs.sh

18.在NN中JPS可以看到Namenode进程和SecondaryNamenode进程,在DN1和DN2中可以看到DataNode进程,Hadoop集群搭建完毕

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值