HDFS作为Hadoop大数据处理框架下的分布式文件系统,深受开发人员的喜爱,为此许多人想在自己的linux单机上搭建出HDFS集群,但是对于个人很难通过自身现有的条件搭建出具有多台主机并通过网络进行互联的HDFS集群。为此本文主要介绍如果通过Docker在单机上就能搭建出完全模式的HDFS集群,首先准备一台具有Ubuntu系统的主机,其具体的搭建过程如下:
1、安装Docker
Docker是一个开源的应用容器引擎,能够让用户快速方便在自己电脑上虚拟出各种需要的环境以及应用。其安装过程如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果系统中无curl命令,通过如下命令进行安装:
sudo apt-get install curl
2、配置Docker国内镜像
由于docker默认的镜像地址在国外,如果不配置国内镜像的话,下载的速度将会非常缓慢,为此需要需要为Docker配置上国内镜像。
首先,在docker的配置文件下创建daemon.json文件,创建命令如下:
sodu vim /etc/docker/daemon.json
然后,在daemon.json文件里配置国内镜像,配置内容如下:
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/" ] }
最后,对docker进行重启,使配置文件进行生效,重启命令如下:
systemctl restart docker.service
同时,我们也可以利用docker info 来查阅当前注册的镜像源列表,验证我们配置的镜像源是否生效。如果出现如图下面的红框内容,则说明配置成功。
验证docker国内镜像是否配置成功
3、利用docker创建Hadoop镜像
配置docker国内镜像,需要先在docker上搭建出linux环境,然后在这个环境中安装Hadoop,其操作如下所示:
sudo docker pull ubuntu // 从docker仓库中拉取下ubuntu镜像
// 启动ubuntu镜像创建一个容器并为这个容器配置交互模块,命名该容器为hadoop_base,
// 同时为这个启动的虚拟主机命名为Hadoop
// -it 配置交互模式
// --name 为容器命名
// -h 为虚拟主机命名
// bash 为交互模式启动终端
sudo docker run -it --name hadoop_base -h hadoop ubuntu:latest bash
4、容器配置
通过上面3个步骤,我们将进入到配置的容器内部,该内部跟一个ubuntu系统内的内容完全一致,为了后续Hadoop的安装做好准备,需要通过如下命名来对容易进行配置。
apt update // ubuntu进行更新
apt install vim // 安装vim编辑器
apt-get install openssh-server // 安装ssh
apt-get install rsync // 安装rsync
apt-get install iputils-ping // 安装ping
apt-get install net-tools // 安装网络工具
mkdir /opt/modules // 创建Hadoop安装目录
mkdir /opt/softwares // 创建Hadoop软件存放路径
exit // 退出当前系统
5、拷贝Hadoop、jdk安装程序到docker中
在主机中下载jdk以及Hadoop安装程序,通过复制命名将这两个文件复制到docker容器中,其命令如下:
// 拷贝当前系统下的hadoop-2.7.2.tar.gz 到hadoop_base容器下的/opt/softwares下
sudo docker cp ./hadoop-2.7.2.tar.gz hadoop_base:/opt/softwares
// 拷贝当前系统下jdk 到hadoop_base容器下的/opt/softwares下
sudo docker cp ./jdk-8u261-linux-x64.tar.gz hadoop_base:/opt/softwares
// 进入到hadoop_base容器内部
sudo docker exec -it hadoop_base
// 创建安装目录
mkdir /opt/modules
// 进入/opt/softwares目录下
cd /opt/softwares
// 进行Hadoop安装 并指定安装目录
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/modules/
// 进行jdk安装 并指定安装目录
tar -C /opt/modules/
6、配置环境变量
为了使系统能够识别出jdk与Hadoop的运行地址,所以需要在系统的配置文件中添加上其运行地址。
// 在docker环境下需要更改/root/.bashrc配置,而不是/etc/profile文件
vim /root/.bashrc
// 在文件中添加Java与Hadoop的安装路径
export JAVA_HOME=/opt/modules/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin
export HADOOP_HOME=/opt/modules/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
// 使配置文件生效
source /root/.bashrc
7、制作Hadoop镜像
通过前6步的操作,基本上就搭建出Hadoop的基础环境了,为此我们可以将该容器制作成镜像,以方便在docker上进行容器复制,其具体操作如下:
// 将hadoop_base容器进行导出
sudo docker export hadoop_base > hadoop_base.tar
// 导入hadoop_base.tar 成为新的镜像
sudo docker import hadoop_base.tar hadoop
// 创建hadoop集群容器
// 规划一个NameNode节点并将端口50070进行绑定
sudo docker run -it -p 50070:50070 --name hadoop1 -h master hadoop bash
// 规划一个DataNode节点并将端口8088进行绑定
sudo docker run -it -p 8088:8088 --name hadoop2 -h slave1 hadoop bash
// 规划一个DataNode节点
sudo docker run -it --name hadoop3 -h slave2 hadoop bash
8、记录三个容器的IP地址,并为每个容器添加域名映射
// 进入master主机中
sudo docker exec -it hadoop1 bash
// 通过ifcofig命令查看该主机的ip
ifcofig
//在/etc/hosts文件中配置域名映射
vim /etc/hosts
// 将通过ifcofig查询出的三台主机的IP以及对应的域名填写到hosts文件中
172.17.0.2 master
172.17.0.3 slave1
172.17.0.4 slave2
9、配置免密
由于hadoop集群中的主机之间需要相互通信,如果不配置通信免密,将会导致集群内的主机不能很好的互通,其配置过程如下:
// 启动ssh
/etc/init.d/ssh start
// 生成密钥
ssh-keygen 三次回车
// 将公钥复制到文件中
cat ~/.ssh/id_rsa.pub > authorized_keys
// 然后在三台主机中都进行上述的操作
// 退出容器,将公钥文件进行复制
sudo docker cp hadoop1:/root/.ssh/authorized_keys ./authorized_keys_1
sudo docker cp hadoop2:/root/.ssh/authorized_keys ./authorized_keys_2
sudo docker cp hadoop3:/root/.ssh/authorized_keys ./authorized_keys_3
// 再将三个文件进行合并
cat authorized_keys_1 authorized_keys_2 authorized_keys_3 > authorized_keys
// 再将合并的后的秘钥分发到各个主机上
sudo dokcer cp ./authorized_keys hadoop1:/root/.ssh/authorized_keys
sudo dokcer cp ./authorized_keys hadoop2:/root/.ssh/authorized_keys
sudo dokcer cp ./authorized_keys hadoop3:/root/.ssh/authorized_keys
10、HDFS相关配置
配置好三台主机的ssh登录免密后,下面将对HDFS进行配置,其配置过程如下:
// 进入master主机
sudo docker exec -it hadoop1
// 进入配置文件目录
cd /opt/modules/hadoop-2.7.2/etc/hadoop
// 对core-site.xml 文件进行编辑
vim core-site.xml
// 配置NameNode节点地址以及存储地址
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
</property>
11、进行HDFS启动
配置好后,进入到master主机上进行hdfs启动,其过程如下:
// 进入到master主机上
sudo docker exec -it hadoop1
// 先进行格式化
hdfs namenode -format
// 进入bin文件夹
cd /opt/modules/hadoop2.7.2/bin/
//启动hdfs
./start-hfs.sh
至此hdfs在docker即可配置成功。