基于Docker搭建Hadoop大数据集群环境

2023年 7月 17日 77.8k 0

1 引子

因兼具跨平台兼容性优资源消耗少自动化程度高运行稳定环境隔离等优点,Docker大受欢迎,在应用打包、分发、部署、开源分享方面得到广泛应用。其实Docker在本地快速安装试用及学习方面也有独具天赋,本文以基于Docker搭建Hadoop大数据集群环境展开说明,给需要在本地PC学习大数据的小伙伴参考。

抛开底层的虚拟化技术对比不谈,选择Docker而非VMWare最直接的原因是方便快捷且占用资源少,对于本地终端资源及性能本就不富裕的我来说,Docker更划算;同时因为一些个人原因,近期正好在“复习”大数据相关知识,同时也在拓展Docker相关技术应用,所谓最好的学习就是应用,一举两得。

此为开篇,往后可能会有免费的系列指南或者操作手册,具体看个人时间及是否有小伙伴真的需要,例如Docker从入门到精通再到放弃基于VMWare搭建Hadoop大数据集群大数据核心技术应用Hadoop集群优化实时计算离线计算等,如有需要可以互动留言。

2 环境及前置条件

Docker Desktop安装及基础不在此次讨论范畴,这里就不展开说明了

  • 系统环境:win10
  • 软件环境:
    • VSCode
    • Docker Desktop
C:Usersczy>docker version
Client:
 Cloud integration: v1.0.35
 Version:           24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Thu May 25 21:53:15 2023
 OS/Arch:           windows/amd64
 Context:           default

Server: Docker Desktop 4.21.1 (114176)
 Engine:
  Version:          24.0.2
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       659604f
  Built:            Thu May 25 21:52:17 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

3 操作流程

3.0 资源下载及gitee

  • 资源链接:pan.baidu.com/s/1zlVgXiE0… 提取码:7orl
  • gitee:gitee.com/cy4010/hado…

3.1 核心软件版本

CentOS7.5,镜像Tag:7.5.1804

Hadoop-3.1.3

jdk-8u212 Java1.8

3.2 Hadoop集群规划

类型 hadoop102 hadoop103 hadoop104
HDFS NameNode、DataNode DataNode SecondaryNameNode
YARN NodeManager ResourceManager、NodeManager NodeManager

3.3 使用Dockerfile完成基础系统镜像构建

新建bigdata文件夹,使用VScode打开bigdata,bigdata为基于Docker搭建Hadoop大数据集群的项目根目录,目录结构如下

bigdata
├─app                     // volumns挂载目录,集群数据存放就日志存放
│  ├─dfs
│  │  ├─hadoop102
│  │  ├─hadoop103
│  │  └─hadoop104
│  └─logs
│      ├─hadoop102
│      ├─hadoop103
│      └─hadoop104
├─code                  // 存放集群需要用到的分装好的代码
├─conf                  // 存放集群配置文件,default为模板配置文件
│  └─default
└─lib                   // 存放集群需要用到的软件包、安装包

3.3.1 conf目录准备hadoop集群核心配置文件

core-default.xml-->common类之类的配置

hdfs-default.xml-->文件存储相关

yarn-default.xml-->资源调度相关

mapred-default.xml-->MR计算相关

  • core-site.xml(为精简不必要的注释已删除)

common核心配置







  fs.defaultFS
  hdfs://hadoop102:8020





  hadoop.tmp.dir
  /app/hdfs


  • hdfs-site.xml(为精简不必要的注释已删除)

文件存储相关配置







  dfs.namenode.http-address
  hadoop102:9870




  dfs.namenode.secondary.http-address
  hadoop104:9868


  • yarn-site.xml(为精简不必要的注释已删除)

资源调度相关配置







    yarn.nodemanager.aux-services
    mapreduce_shuffle




    yarn.resourcemanager.hostname
    hadoop103




    Environment variables that containers may override rather than use NodeManager's default.
    yarn.nodemanager.env-whitelist
    JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME




    yarn.log-aggregation-enable
    true




    yarn.log.server.url
    http://hadoop102:19888/jobhistory/logs




    yarn.log-aggregation.retain-seconds
    604800


  • mapred-site.xml(为精简不必要的注释已删除)

MR相关配置







  mapreduce.framework.name
  yarn




  mapreduce.jobhistory.address
  hadoop102:10020
  MapReduce JobHistory Server IPC host:port




  mapreduce.jobhistory.webapp.address
  hadoop102:19888
  MapReduce JobHistory Server Web UI host:port


  • workers

集群节点配置,旧版本文件名为slaves,由于众所周知的和谐原因,新版本文件名变为workers

注意:节点间需要换行;节点不要出现任何空格tab符换行符等,否则可能会有报错

hadoop102
hadoop103
hadoop104

3.3.2 lib目录准备hadoop集群依赖的软件包

bigdata
├─lib                     
│  ├─hadoop-3.1.3.tar.gz
│  └─jdk-8u212-linux-x64.tar.gz

3.3.3 项目根目录编写Dockerfile文件

dockerfile可以理解为自定义镜像的规则约束,由一系列Docker指令构成,Docker指令就不详细介绍了,有兴趣详询官网,此处简要交代下Dockerfile做了哪些事情

  • FROM centos:7.5.1804 指定镜像源,镜像源获取方法
    • https://hub.docker.com/搜索centos镜像
      image.png
    • 查找合适Tag的centos镜像

image.png

  • LABEL maintainer="bigdata" 明确标的维护者
  • USER root 指明使用root用户
  • RUN yum -y install wget sudo...(省略部分自行关联)...RUN yum makecache 更新yum镜像源
  • RUN tar -zxvf ${JAVA_HOME}/${JAVA_TAR_NAME} --strip-components 1 -C /usr/java && ...(省略部分自行关联)...ln -s $JAVA_HOME/bin/java /bin/java 解压java包并配置环境变量,--strip-components 1的好处是不携带解压后的根目录,这样目录结构会简洁一些
  • RUN tar -zxvf ${HADOOP_HOME}/${HADOOP_TAR_NAME} --strip-components 1 -C /app/hadoop && ...(省略部分自行关联)...source /etc/profile 解压hadoop包并配置环境变量
  • root增加了密码,同时新建bigdata用户并设置了密码,后续集群主要由bigdata用户维护及管理
  • RUN echo $TZ > /etc/timezone设置时区
  • EXPOSE 9870...EXPOSE 22对外暴露必要的端口如22端口
FROM centos:7.5.1804
LABEL maintainer="bigdata"
LABEL description="hadoop cluster docker"

USER root

ENV TZ=Asia/Shanghai
ARG HADOOP_TARBALL=./lib/hadoop-3.1.3.tar.gz
ARG HADOOP_TAR_NAME=hadoop-3.1.3.tar.gz

ARG JAVA_TARBALL=./lib/jdk-8u212-linux-x64.tar.gz
ARG JAVA_TAR_NAME=jdk-8u212-linux-x64.tar.gz

ENV HADOOP_HOME /app/hadoop
ENV JAVA_HOME /usr/java

RUN yum -y install wget sudo
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo 
RUN yum clean all
RUN yum makecache

COPY ${JAVA_TARBALL} ${JAVA_HOME}/${JAVA_TAR_NAME}
COPY ${HADOOP_TARBALL} ${HADOOP_HOME}/${HADOOP_TAR_NAME}

RUN touch /etc/profile.d/my_env.sh

# 设置JAVA8环境变量
RUN tar -zxvf  ${JAVA_HOME}/${JAVA_TAR_NAME} --strip-components 1 -C /usr/java && 
  rm ${JAVA_HOME}/${JAVA_TAR_NAME} && 
  echo export JAVA_HOME=${JAVA_HOME} >> /etc/profile.d/my_env.sh && 
  echo export PATH=$PATH:$JAVA_HOME/bin >> /etc/profile.d/my_env.sh && 
  source /etc/profile && 
  ln -s $JAVA_HOME/bin/java /bin/java

# 设置Hadoop环境变量
RUN tar -zxvf  ${HADOOP_HOME}/${HADOOP_TAR_NAME} --strip-components 1 -C /app/hadoop && 
  rm ${HADOOP_HOME}/${HADOOP_TAR_NAME} && 
  echo export HADOOP_HOME=${HADOOP_HOME} >> /etc/profile.d/my_env.sh && 
  echo export PATH=$PATH:$HADOOP_HOME/bin >> /etc/profile.d/my_env.sh && 
  echo export PATH=$PATH:$HADOOP_HOME/sbin >> /etc/profile.d/my_env.sh && 
  source /etc/profile

# 拷贝hadoop配置文件
COPY ./conf/hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml
COPY ./conf/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml
COPY ./conf/mapred-site.xml $HADOOP_HOME/etc/hadoop/mapred-site.xml
COPY ./conf/yarn-site.xml $HADOOP_HOME/etc/hadoop/yarn-site.xml
COPY ./conf/workers $HADOOP_HOME/etc/hadoop/workers

RUN yum update -y
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y openssh-clients
RUN yum install rsync -y sudo
RUN yum -y install ntp sudo
RUN yum -y install net-tools sudo
RUN yum install vim -y sudo
RUN yum install dos2unix -y sudo

RUN echo "root:a123456" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers

RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN echo $TZ > /etc/timezone
RUN systemctl enable ntpd
RUN systemctl enable sshd

RUN mkdir /var/run/sshd
RUN useradd bigdata
RUN echo "bigdata:a123456" | chpasswd
RUN echo "bigdata   ALL=(ALL)       ALL" >> /etc/sudoers

EXPOSE 9870
EXPOSE 9868
EXPOSE 8020
EXPOSE 8088
EXPOSE 19888
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

3.3.4 构建集群所需的基础镜像

bigdata目录下执行docker build -t hadoop .,镜像名称为hadoop,Tag默认为lastest,可以按需打Tag例如hadoop:7.5

3.3.4.1 镜像查询

+ 命令行查询:`docker images`

image.png

+ Docker Desktop 桌面工具查询

image.png

3.3.4.2 容器运行

  • 命令行执行docker run -d -p 50088:22 --name hadoop-demo hadoop:latest-d表示后台运行,-p指明外部IP与容器内部IP映射关系,--name指明运行容器名称,hadoop:latest配置依赖镜像(也就是上文构建的镜像)
  • 继续执行docker ps查找运行容器

image.png

3.3.4.3 远程连接

  • xshell工具建立连接,按照实际情况输入账号密码即可,因为Docker默认桥连,所以通过localhost或者127.0.0.1+映射的外部端口50088可以实现连接

image.png

  • 命令行执行java -version,看到版本信息即可
  • 命令行执行hadoop version,看到版本信息即可

3.3.5 基于docker-compose.yml构建hadoop集群容器

3.3.5.1 docker-compose极简说明

容器间共享网络实现通讯需要指定网络,如果容器太多一一指定非常麻烦,docker-compose在构建之初就可以指定网络,一次配置“终生”有效,省去了很多麻烦。当然docker-compose还有容器资源统一管理等诸多优点。

注意:Docker Desktop 自带docker-compose,无需额外安装,其他环境可能需要单独装下

3.3.5.2 项目根目录编写docker-compose.yml

指令本身不是本文重点,这里重点说明下重要配置的含义及注意事项:

  • 根据集群规划,集群有hadoop102、hadoop103、hadoop1043个节点,因而配置了对应三个名称对应的子服务(子容器),在container_namehostname也有体现
  • image指定上文中构建的基础镜像hadoop
  • ports:根据xml配置及集群规划,不同的节点对外暴露不同的端口
  • networks:集群节点设定统一的网络,driver: bridge桥连的好处这里就不过多说明了
  • volumes:前面是本地磁盘路径,:后面是容器内部路径,/app/hdfs是配置的HDFS路径,/app/hadoop/logs是默认的日志路径。容器内部目录挂载的外部磁盘路径,挂载磁盘目录的好处是即使容器重启、关停或者异常避免出现数据丢失的情况,也方便后续可能需要的数据迁移
version: '3'
services:
  hadoop102:
    image: hadoop
    container_name: hadoop102
    hostname: hadoop102
    restart: always
    ports:
      - "8020:8020"
      - "9870:9870"
      - "19888:19888"
      - "10020:10020"
      - "50022:22"
    volumes:
      - ./app/dfs/hadoop102:/app/hdfs
      - /app/logs/hadoop102:/app/hadoop/logs
    networks:
      - hd_net
  
  hadoop103:
    image: hadoop
    container_name: hadoop103
    hostname: hadoop103
    restart: always
    ports:
      - "8088:8088"
      - "50023:22"
    volumes:
      - ./app/dfs/hadoop103:/app/hdfs
      - ./app/logs/hadoop103:/app/hadoop/logs
    networks:
      - hd_net

  hadoop104:
    image: hadoop
    container_name: hadoop104
    hostname: hadoop104
    restart: always
    ports:
      - "9868:9868"
      - "50024:22"
    volumes:
      - ./app/dfs/hadoop104:/app/hdfs
      - ./app/logs/hadoop104:/app/hadoop/logs
    networks:
      - hd_net


networks:
  hd_net:
    driver: bridge

3.3.5.3 启动集群容器

  • 根目录执行docker-compose up -d拉取镜像并启动hadoop集群容器

    • up 字如其意
    • -d 后台运行
  • hadoop集群容器验证

    • 命令行查询:docker ps -a
    • Docker Desktop 桌面工具查询

image.png

  • 集群网络查询:docker network inspect bigdata_hd_net,高能预警,此处有坑:在docker-compose.ymlnetworks明明是hd_net,查询却要填入bigdata_hd_net,因为配置容器默认会加上维护者信息。正常会看到如下信息,信息用途后面会详解,目前只需要知道IPv4Address很重要即可,此处先放1个彩蛋:
[
    {
        "Name": "bigdata_hd_net",
        "Id": "08f31c1480b1091abf8c54733bc06b863719767d760b0a915ca17ee336eba4f0",
        "Created": "2023-07-15T08:50:26.4258148Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "167d7bc3ef7d62ddf2f7e667cd8dbccadac8f7a1d41cb24ba96c245b10c3985b": {
                "Name": "hadoop102",
                "EndpointID": "7bfb05681c5ace1408507d27e201a91d6aee964d44a3da92222fb457c4eca4d0",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "ab0f83bd3a26d199a3ee0f57a39e85566aa7c5b53b75e4fb34c9b9a70a511491": {
                "Name": "hadoop103",
                "EndpointID": "9673a4caee01ea46481d00cf0638cbd856d0be1f038bfcb6085737c424ef319a",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "dfe4a5e24784ca0be76c018e23b860095cf7d87bef0972167f66400a8b532edd": {
                "Name": "hadoop104",
                "EndpointID": "2e240d6569875c5aca09fa315ec8a4ea67227349c3b3e4addaed720f03a72040",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "hd_net",
            "com.docker.compose.project": "bigdata",
            "com.docker.compose.version": "2.19.1"
        }
    }
]

3.3.5.4 xshell连接真正的集群节点

  • 端口映射说明(不知道怎么来的可以往上翻,查看docker-compose.yml配置文件)
    • hadoop102内部22端口映射的外部端口为50022
    • hadoop103内部22端口映射的外部端口为50023
    • hadoop103内部22端口映射的外部端口为50024
  • 为统一规范,建议登录bigdata用户(不知道怎么来的可以往上翻,查看Dockerfile配置文件)
    • 账号及密码:bigdata:a123456

image.png

3.3.6 集群节点基础配置

xshell或者CRT连接hadoop102、hadoop103、hadoop104登录bigdata用户进行配置

3.3.6.1 修改/etc/hosts文件

  • 进入hadoop102
  • su root
  • vim /etc/hosts,增加hadoop103、hadoop104 IP映射,ip信息在上文中通过docker network inspect bigdata_hd_net查询每台子容器IPv4Address,前面说的彩蛋在这里成功释出啦~:
172.19.0.4	hadoop102
172.19.0.3	hadoop103
172.19.0.2	hadoop104
  • 参照如上流程,逐一进入hadoop103hadoop104修改/etc/hosts文件

3.3.6.2 修改vim配置文件

vim默认配置中文会乱码,配置是为了方便后续操作,如不需要,可以跳过

  • 进入hadoop102
  • su root
  • vim /etc/vimrc,增加如下配置(此处有坑:注意windows环境下换行符与linux不同,切忌windows环境编写好直接复制,转换后复制或者直接源文件编写):
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
  • 参照如上流程,逐一进入hadoop103hadoop104修改/etc/vimrc文件

3.3.6.3 修改/tmp属性

hadoop集群启动过程可能会生成临时文件,因为集群规划是需要bigdata用户管理集群,可能会有权限问题,提早解决比较妥当

  • 进入hadoop102
  • su root
  • chmod 777 /tmp
  • 参照如上流程,逐一进入hadoop103hadoop104操作chmod 777 /tmp

3.3.6.4 修改/app/hadoop/app/hdfs所属用户及属组

为什么要这样多此一举?此处是自己挖坑自己填坑,Dockerfile在构建基础镜像的时候,使用的USERroot,显然/app/hadoop属于root:root,但是根据hadoop集群规划默认交由bigdata用户管理,权限上有冲突,后续可能会报错。

  • /app/hadoop是集群安装目录,集群启动后日志/app/hadoop/logs

  • /app/hdfs是基础镜像中配置的hdfs路径

  • 进入hadoop102
  • su root
  • cd /app
  • chown -R bigdata:bigdata hadoop
  • chown -R bigdata:bigdata hdfs
  • 参照如上流程,逐一进入hadoop103hadoop104操作用户及属组变更

3.3.6.5 设置集群节点间免密登录

免密登录按照提示输入对应的密码即可,只需实现bigdata用户免密登录

  • bigdata用户登录hadoop102
  • ssh-keygen -t rsa
  • ssh-copy-id hadoop102
  • ssh-copy-id hadoop103
  • ssh-copy-id hadoop104
  • 参照如上流程,逐一进入hadoop103hadoop104实现到每个节点的免密登录即可

3.3.6.6 集群初始化

  • bigdata用户登录hadoop102
  • cd /app/hadoop/bin/
  • hdfs namenode -format
  • 操作完成后,集群节点/app/hadoop会自动创建logs文件夹,至此,集群基础配置完成

3.3.6.7 集群数据同步代码封装

scp适合首次初始化同步(全量同步),sync适合增量同步(增量同步效率更高,会自动忽略没有变化的),xsync是对sync的封装,为后续偷懒做好充分准备

  • bigdata用户登录hadoop102
  • cd /home/bigdata/bin
  • vim xsync
#!/bin/bash


# 判断参数个数 不合规则退出
if [ $# -lt 1 ]
then
    echo Not Enough Args!
    exit;
fi


# 遍历主机
for host in hadoop102 hadoop103 hadoop104
do
    echo =========== $host ===========
    # 遍历入参(遍历文件)
    for file in $@
    do
        # 判断文件是否存在
        if [ -e $file ]
            then
                # dirname获取相对路径文件的父一级目录或者绝对路径文件父一级目录
                # -P是为了应对软连接问题 使父一级目录查询时能找到真正的父一级目录
                # 创建软连接:ls -a 软链接源文件 软链接文件
                pdir=$(cd -P $(dirname $file); pwd)
                # 获取当前文件名称
                fname=$(basename $file)
                # -p如果存在不报错
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file not exists!
        fi
    done
done
  • dos2unix xsync
  • chmod 777 xsync
  • xsync xsync 同步所有集群节点

3.3.6.8 集群启停代码封装

  • bigdata用户登录hadoop102
  • cd /home/bigdata/bin
  • vim myhadoop.sh
#!/bin/bash


# 判断参数个数 不合规则退出
if [ $# -lt 1 ]
then
    echo Not Enough Args!
    exit;
fi


case $1 in
"start")
    echo "=========================启动hadoop集群========================="
    echo "-------------------------启动hdfs-------------------------"
    ssh hadoop102 "/app/hadoop/sbin/start-dfs.sh"
    echo "-------------------------启动yarn-------------------------"
    ssh hadoop103 "/app/hadoop/sbin/start-yarn.sh"
    echo "-------------------------启动historyserver-------------------------"
    ssh hadoop102 "/app/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
    echo "=========================关闭hadoop集群========================="
    echo "-------------------------关闭historyserver-------------------------"
    ssh hadoop102 "/app/hadoop/bin/mapred --daemon stop historyserver"
    echo "-------------------------关闭yarn-------------------------"
    ssh hadoop103 "/app/hadoop/sbin/stop-yarn.sh"
    echo "-------------------------关闭hdfs-------------------------"
    ssh hadoop103 "/app/hadoop/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
  • dos2unix myhadoop.sh
  • chmod 777 myhadoop.sh
  • xsync myhadoop.sh 同步所有集群节点

3.3.6.9 集群状态查询代码封装

  • bigdata用户登录hadoop102
  • cd /home/bigdata/bin
  • vim jpsall
#!/bin/bash


for host in hadoop102 hadoop103 hadoop104
do
    echo "=======================$host======================="
    ssh $host jps
done
  • dos2unix jpsall
  • chmod 777 jpsall
  • xsync jpsall 同步所有集群节点

3.3.7 集群运行及验证

3.3.7.1 Hadoop集群运行

  • xshell bigdata用户登录hadoop102
  • myhadoop.sh stop
  • myhadoop.sh start
  • 集群正常运行的话,会看到如下日志
=========================启动hadoop集群=========================
-------------------------启动hdfs-------------------------
Starting namenodes on [hadoop102]
Starting datanodes
Starting secondary namenodes [hadoop104]
-------------------------启动yarn-------------------------
Starting resourcemanager
Starting nodemanagers
-------------------------启动historyserver-------------------------

3.3.7.2 Hadoop集群状态查看

  • xshell bigdata用户登录hadoop102
  • jpsall
  • 集群正常的话,会看到如下信息
=======================hadoop102=======================
562 DataNode
1172 Jps
1080 JobHistoryServer
906 NodeManager
431 NameNode
=======================hadoop103=======================
1072 DataNode
1409 NodeManager
1782 Jps
1270 ResourceManager
=======================hadoop104=======================
291 SecondaryNameNode
181 DataNode
396 NodeManager
541 Jps

3.3.7.3 Hadoop集群验证

3.3.7.3.1 Web UI访问

yarn UI:访问http://127.0.0.1:8088/cluster,结果如下

image.png

dfs.namenode.http-address:访问http://127.0.0.1:9870,结果如下

image.png

browsing HDFS:访问http://127.0.0.1:9870/explorer.html#/,结果如下

image.png

3.3.7.3.2 Hadoop/HDFS命令行操作
  • bigdata用户登录hadoop102
  • cd /home/bigdata
  • mkdir mydata
  • cd mydata
  • touch words.txt
  • echo "hello world" >> words.txt
  • hadoop fs -ls /
  • hadoop fs -mkdir /test
  • hadoop fs -put words.txt /test
  • hadoop fs -ls /

image.png

image.png

3.3.7.4 检查volumes挂载数据

./app/dfs/hadoop102:/app/hdfs为例,数据正常挂载

image.png

3.3.8 Docker容器与Hadoop集群补充说明

  • 因为有volumes挂载,数据应该不会丢失;
  • 容器停止hadoop集群就“不存在”了,stop容器前,养成良好习惯,stop前建议执行如下流程操作:
    • xshell bigdata用户登录hadoop102(备注:没别的原因,只是单纯习惯在hadoop102操作,理论上哪台节点都可以)
    • myhadoop.sh stop

4 结语

基于Docker搭建的Hadoop集群环境是一个非常“简陋”的环境,仅供学习、测试使用,“环境”本身有很多优化的地方,动手能力强的小伙伴也可以持续集成增加“自动化程度”,如将更多容器内的操作转换成Docker指令...不啰嗦了,有时间的话看要不要发布公开镜像...总之,欢迎开启大数据的精彩大门,任何问题欢迎交流~

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论