docker部署hadoop集群

1.安装docker

2.基础环境准备

下载centos7镜像

docker pull centos:7.9.2009

启动容器,以centos为基准镜像,构建我们的hadoop运行环境镜像

docker run -ti centos:7.9.2009

2.1 java安装

yum -y install wget 
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
mkdir /opt/module
tar xzf jdk-8u141-linux-x64.tar.gz -C /opt/module
whoami 查看自己是不是root身份
cd /etc/profile.d 来到这个目录下配置文件
vi my_env.sh

里面内容如下

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_141
export PATH=$PATH:$JAVA_HOME/bin

使用

source /etc/profile 
java 

在这里插入图片描述

为了以后可以使用这个装好了java环境的镜像,将其保存为一个副本

docker ps -a
docker commit -m "java install" 91c19b31fd41  centos:java
docker images

2.2 hadoop 安装

使用刚刚安装可java环境的容器镜像
下载hadoop3.3.6到/opt/module/这个目录

docker run -ti centos:java

wget --no-check-certificate https://mirrors.sonic.net/apache/hadoop/common/stable/hadoop-3.3.6.tar.gz
tar xvzf hadoop-3.3.6.tar.gz

环境变更配置

vi ~/.bashrc 

source ~/.bashrc

在这里插入图片描述
表明hadoop安装成功
在这里插入图片描述

Hadoop配置

mkdir tmp
mkdir namenode
mkdir datanode
cd etc/hadoop/

在这里插入图片描述
word单词计数测试

cd /opt/module/hadoop-3.3.6 
mkdir wcinput #创建目录
cd wcinput/ #进入目录
vi word.txt #编写文件
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount wcinput/ ./wcoutput

在这里插入图片描述

安装ssh,搭建集群环境

在这里插入图片描述
我们把这个命令加入到~/.bashrc文件中。通过vi ~/.bashrc编辑.bashrc文件,在文件后追加下面内容:

#autorun
/usr/sbin/sshd

生成访问密钥

ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
cd ~/.ssh/
cat id_dsa.pub >> authorized_key
#chmod 700 ~/.ssh/
#chmod 600 ~/.ssh/authorized_keys

在这里插入图片描述
生成密钥访问
在这里插入图片描述

ssh-keygen -A

在这里插入图片描述

配置文件

cd /opt/module/hadoop-3.3.6/etc/hadoop

在这里插入图片描述

1).core-site.xml配置

<!-- Put site-specific property overrides in this file. -->
<configuration>
    <!-- 指定hadoop数据存储目录 -->
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/module/hadoop-3.3.6/tmp</value>
            <description>A base for other temporary directories.</description>
    </property>
    <!-- 指定NameNode的地址 -->
    <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
            <final>true</final>
            <description>The name of the default file system.  A URI whose
            scheme and authority determine the FileSystem implementation.  The
            uri's scheme determines the config property (fs.SCHEME.impl) naming
            the FileSystem implementation class.  The uri's authority is used to
            determine the host, port, etc. for a filesystem.</description>
    </property>
</configuration>

注意:

hadoop.tmp.dir配置项值即为此前命令中创建的临时目录路径。
fs.default.name配置为hdfs://master:9000,指向的是一个Master节点的主机(后续我们做集群配置的时候,自然会配置这个节点,先写在这里)

2).hdfs-site.xml配置

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <final>true</final>
        <description>Default block replication.
        The actual number of replications can be specified when the file is created.
        The default is used if replication is not specified in create time.
        </description>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value> /opt/module/hadoop-3.3.6/namenode</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/module/hadoop-3.3.6/datanode</value>
        <final>true</final>
    </property>
</configuration>

注意:
我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以dfs.replication配置为2。
dfs.namenode.name.dir和dfs.datanode.data.dir分别配置为之前创建的NameNode和DataNode的目录路径

3).mapred-site.xml配置

#cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>master:9001</value>
        <description>The host and port that the MapReduce job tracker runs
        at.  If "local", then jobs are run in-process as a single map
        and reduce task.
        </description>
    </property>
</configuration>

这里只有一个配置项mapred.job.tracker,我们指向master节点机器

4)指定JAVA_HOME环境变量

使用命令vi hadoop-env.sh,修改如下配置:

vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/opt/module/jdk1.8.0_141

在这里插入图片描述

5).格式化 namenode
这是很重要的一步,执行命令

hadoop namenode -format
hdfs namenode -format

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

保存镜像副本

这里我们将安装好Hadoop的镜像保存为一个副本。

docker commit -m "hadoop install" 38239abefb1a  linux:hadoop

在这里插入图片描述

3.Hadoop分布式集群搭建

按照 hadoop 集群的基本要求,其 中一个是 master 结点,主要是用于运行 hadoop 程序中的 namenode、secondorynamenode 和 jobtracker任务。用外两个结点均为 slave 结点,其中一个是用于冗余目的,如果没有冗 余,就不能称之为 hadoop 了,所以模拟 hadoop 集群至少要有 3 个结点。

前面已经将Hadoop的镜像构建好了,下面就是使用这个镜像搭建Master节点和Slave节点了:
在这里插入图片描述

docker run  -p 50070:50070 -p 19888:19888 -p 8088:8088  --name  master  -ti -h master linux:hadoop
docker run -it -h slave1 --name slave1  linux:hadoop  /bin/bash
docker run -it -h slave2 --name slave2  linux:hadoop  /bin/bash

集群搭建

配置hosts

通过ifconfig命令获取各节点ip。我本机获取的ip如下:

yum install net-tools
master:172.17.0.3 
slave1:172.17.0.4
slave2:172.17.0.5

在这里插入图片描述

使用vi /etc/hosts命令将如下配置写入各节点的hosts文件,注意修改ip地址:

vi /etc/hosts
172.17.0.3      master
172.17.0.4      slave1
172.17.0.5      slave2

在这里插入图片描述

  • 启动sshd /usr/sbin/sshd
    在这里插入图片描述

配置slaves
在master节点容器中执行如下命令

vi /opt/module/hadoop-3.3.6/etc/hadoop/slaves

将如下slave节点的hostname信息写入该文件

master
slave1
slave2
启动Hadoop

在master节点上执行start-all.sh命令,启动Hadoop。

报错1

在这里插入图片描述

cd /opt/module/hadoop-3.3.6/etc/hadoop
vi hadoop-env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_SECONDARYNAMENODE_USER=root

报错2

在这里插入图片描述

报错3

在这里插入图片描述
解决办法

yum install openssh-clients

检查是否下载成功
在这里插入图片描述

在这里插入图片描述

在个节点上执行jps命令
在这里插入图片描述

下面,我们在master节点上通过命令hdfs dfsadmin -report 查看DataNode是否正常启动:
在这里插入图片描述

还可以通过Web页面看到查看DataNode和NameNode的状态
在这里插入图片描述
将workers配置好,在每一个节点上

 vi /opt/module/hadoop-3.3.6/etc/hadoop/workers 
master
slave1
slave2

在这里插入图片描述
集群搭建成功
在这里插入图片描述

 docker inspect 15ef82fb98a1
(base) zhangyawei@zhangyaweideMacBook-Pro / % docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 15ef82fb98a1  
172.17.0.3

监测是否有端口后 50070

netstat -tuln | grep 50070

启动hdfs

cd /opt/module/hadoop-3.3.6
sbin/start-dfs.sh
sbin/stop-dfs.sh
cd /opt/module/hadoop-3.3.6/etc/hadoop/
vi hdfs-site.xml

  <property>
     <name>dfs.namenode.http.address</name>
     <value>slave1:50070</value>
</property>


感谢如下的帮助
https://blog.csdn.net/clypm/article/details/79351060

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值