VM+centos7+Docker+hadoop完全分布式环境搭建

第一步:VMware 安装

VMware 安装可参考网址 https://www.windowszj.net/pcsoft/youxi/35924.html

第二步:centos7.9安装

  • centos7.9镜像下载地址:
    https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
  • VM 安装Centos7.9步骤参考:
    https://blog.csdn.net/weixin_58024114/article/details/125172058

用root 账户登录centos系统

第三步:docker环境安装

3.1 添加docker到yum源

 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.2 安装docker

#第一步
 yum -y install docker-ce
#第二步
 sudo mkdir -p /etc/docker
# 第三步:以下5行全部拷贝
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://10ph4ijp.mirror.aliyuncs.com"]
}
EOF
# 第四步 docker配置生效
sudo systemctl daemon-reload
# 第五步  重启docker
sudo systemctl restart docker

# 开启 docker 自启动
systemctl enable docker.service

# 关闭 docker 自启动 ( 这一步不用执行!!!!!)
systemctl disable docker.service

3.3 安装Hadoop

  • 第一步
# 执行
 docker search hadoop
# 以下是执行结果,可能每个人略有不同
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
sequenceiq/hadoop-docker         An easy way to try Hadoop                       661                  [OK]
uhopper/hadoop                   Base Hadoop image with dynamic configuration…   103                  [OK]
harisekhon/hadoop                Apache Hadoop (HDFS + Yarn, tags 2.2 - 2.8)     67                   [OK]
bde2020/hadoop-namenode          Hadoop namenode of a hadoop cluster             52                   [OK]
bde2020/hadoop-datanode          Hadoop datanode of a hadoop cluster             39                   [OK]
bde2020/hadoop-base              Base image to create hadoop cluster.            20                   [OK]
uhopper/hadoop-namenode          Hadoop namenode                                 11                   [OK]
bde2020/hadoop-nodemanager       Hadoop node manager docker image.               10                   [OK]
bde2020/hadoop-resourcemanager   Hadoop resource manager docker image.           9                    [OK]
uhopper/hadoop-datanode          Hadoop datanode  

  • 第二步
docker pull sequenceiq/hadoop-docker
  • 第三步查看安装结果
#执行 
docker images  # 查看所有镜像
# 结果示例
REPOSITORY                 TAG       IMAGE ID       CREATED       SIZE
sequenceiq/hadoop-docker   latest    5c3cc170c6bc   7 years ago   1.77GB
  • 第四步: 创建三个Hadoop 实例
docker run --name hadoop -d -h master sequenceiq/hadoop-docker
docker run --name hadoop1 -d -h slave1 sequenceiq/hadoop-docker
docker run --name hadoop2 -d -h slave2 sequenceiq/hadoop-docker

可能遇到的问题:

  1. docker ps 执行后没有看到运行的三个实例
docker ps -a    #查看所有实例
docker start fe2e78dd16cb c8edd12cef98 04b5376ff60c   # 通过docker start 启动容器,注意替换这三个12位的字符串,根据自己电脑的 Container ID
  • 第五步:Hadoop 配置
    再打开三个命令窗口:如下图


    image.png

    image.png

    分别执行

# master 执行
docker exec -it hadoop bash
# slave1 执行
docker exec -it hadoop1 bash
# salve2 执行
docker exec -it hadoop2 bash
image.png

master、 slave1、slave2 三个窗口都需要执行

/etc/init.d/sshd start
ssh-keygen -t rsa # 一直回车即可
cd /root/.ssh
cat id_rsa.pub > authorized_keys

本地(第一个)窗口执行

mkdir /ssh  && cd /ssh

docker cp hadoop:/root/.ssh/authorized_keys ./authorized_keys_master

docker cp hadoop1:/root/.ssh/authorized_keys ./authorized_keys_slave1

docker cp hadoop2:/root/.ssh/authorized_keys ./authorized_keys_slave2

touch authorized_keys

cat authorized_keys_master authorized_keys_slave1 authorized_keys_slave2 > authorized_keys
cat  authorized_keys  # 查看所有秘钥,下一步要用

# 分别拷贝authorized_keys 到三个hadoop实例
docker cp /ssh/authorized_keys hadoop:/root/.ssh/authorized_keys
docker cp /ssh/authorized_keys hadoop1:/root/.ssh/authorized_keys
docker cp /ssh/authorized_keys hadoop2:/root/.ssh/authorized_keys
master、 slave1、slave2 三个窗口分别执行

查看ip

ifconfig

## 正常情况 master(inet addr:172.17.0.2)
# slave1(inet addr:172.17.0.3)
# slave2(inet addr:172.17.0.4)

vi /etc/hosts  ### 追加内容
172.17.0.2      master
172.17.0.3      slave1
172.17.0.4      slave2

cd /root/.ssh  # 进入到免密登录的秘钥目录
vi authorized_keys   # 编辑秘钥内容 与 本地窗口中的authorized_keys一致

验证免密登录是否成功

ssh master
exit

修改Hadoop配置文件

find / -name hadoop-env.sh
# /usr/local/hadoop-2.7.0/etc/hadoop/hadoop-env.sh
cd /usr/local/hadoop-2.7.0/etc/hadoop
vi core-site.xml

追加以下内容

      
          hadoop.tmp.dir
          /usr/local/hadoop-2.7.0/hdpdata
      

执行

vi yarn-site.xml

追加以下内容


        yarn.resourcemanager.hostname
        172.17.0.2
    

master 窗口执行

cd /usr/local/hadoop-2.7.0/sbin  && ./stop-all.sh

scp yarn-site.xml slave1:/usr/local/hadoop-2.7.0/etc/hadoop

scp yarn-site.xml slave2:/usr/local/hadoop-2.7.0/etc/hadoop

cd /usr/local/hadoop-2.7.0/bin

./hadoop namenode -format

cd /usr/local/hadoop-2.7.0/sbin

./start-all.sh

master、 slave1、slave2 三个窗口分别执行

jps

运行后的结果如下

220 DataNode
549 ResourceManager
399 SecondaryNameNode
129 NameNode
2058 Jps
642 NodeManager

安装好centos后下载Eclipse
Eclipse下载地址:
https://www.eclipse.org/downloads/download.php

常用的dfs 操作指令

cd /usr/local/hadoop-2.7.0/bin  # 进入到hdfs 指令所在目录

./hdfs dfs -ls /   # 查看文件系统根目录

./hdfs dfs -mkdir /test  # 创建一个test 目录
1668933323357.jpg

在本地窗口执行

vi test.txt
# 随便输入内容,例如:
ddd
ddd
ddd
dd
dd
d

在 master 、slave1、slave2

1.  cd /usr/local/hadoop-2.7.0/bin
2. ./hdfs dfs -ls / 
3. ./hdfs dfs -mkdir /test    # 创建文件夹
4. ./hdfs dfs -put /home/test.txt /test   # 上传文件

找到MapReduce 的工具包

cd /usr/local/hadoop-2.7.0/bin

 ./hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar wordcount /test /testoutput 
# /testoutput 每次执行的时候命名不能重复

./hdfs dfs -cat /testoutput/part-r-00000  # 查看WordCount 后的数据统计

docker 每次重启后执行的步骤

打开四个窗口


image.png

1、 本地窗口执行-查看所有待启动的容器

docker ps -a
1669451837907.jpg
  1. 根据 hadoop 、 hadoop1、hadoop2 的顺序,启动容器
# 这里的ID要替换成自己的哦!!!
docker start d0841eaaa094 d670c33b3332 aa2ddd814014
image.png
  1. 在master 窗口执行
docker exec -it hadoop bash
  1. 在slave1窗口执行
docker exec -it hadoop1 bash
  1. 在slave2 窗口执行
docker exec -it hadoop2 bash
  1. 在 master、slave1、slave2中分别编辑hosts
vi /etc/hosts  ### 追加内容
172.17.0.2      master
172.17.0.3      slave1
172.17.0.4      slave2

或者使用 shell 脚本方式
master 窗口执行

cd   # 回到容器的根目录
vi runhosts.sh
#添加以下内容
echo  172.17.0.2      master >> /etc/hosts
echo  172.17.0.3      slave1 >> /etc/hosts
echo  172.17.0.4      slave2 >> /etc/hosts

#授权脚本
chmod +x  runhosts.sh 
# 发送到slave1  slave2
scp runhosts.sh   slave1:~
scp runhosts.sh   slave2:~
实训延伸:
7248cf97c6c42772fc6c63efb0be21c.jpg

下载的网址: https://github.com/jpetazzo/pipework
推荐的一个数据相关的博客地址:https://tech.meituan.com/

你可能感兴趣的:(VM+centos7+Docker+hadoop完全分布式环境搭建)