班级物联网2303学号231040700302姓名杜子健(40%) 安装过程Docker desktopContainersHadoop1.1 Docker Desktop安装与配置下载 Docker Desktop for Mac从 Docker 官网获取适配 Mac 系统的安装包双击安装后启动通过终端输入docker --version验证显示版本信息即安装成功。启用 Docker 权限确保 Docker Desktop 在系统偏好设置中获得完全磁盘访问权限避免后续容器操作权限不足。1.2 Containers创建与配置1拉取CentOS镜像选择 CentOS 7.9.2009 版本稳定性强避免 yum 源和时间同步问题终端执行命令bash运行docker pull centos:7.9.20092创建并启动容器创建 3 个容器hadoop01 作为 NameNodehadoop02、hadoop03 作为 DataNode配置端口映射和特权模式bash运行# 创建NameNode容器hadoop01docker run -itd --name hadoop01 -p 2201:22 -p 8088:8088 -p 9000:9000 -p 50070:50070 --privilegedtrue centos:7.9.2009 /usr/sbin/init# 创建DataNode容器hadoop02docker run -itd --name hadoop02 -p 2202:22 -p 50090:50090 --privilegedtrue centos:7.9.2009 /usr/sbin/init# 创建DataNode容器hadoop03docker run -itd --name hadoop03 -p 2203:22 --privilegedtrue centos:7.9.2009 /usr/sbin/init命令说明--privilegedtrue赋予容器 root 真实权限/usr/sbin/init支持容器内使用 systemctl 命令端口映射确保本地可访问集群 Web 界面。3容器网络配置创建自定义网络并将 3 个容器加入确保容器间互通bash运行# 创建集群专用网络docker network create hadoop-cluster-1# 加入网络docker network connect hadoop-cluster-1 hadoop01docker network connect hadoop-cluster-1 hadoop02docker network connect hadoop-cluster-1 hadoop03# 断开默认bridge网络可选docker network disconnect bridge hadoop01docker network disconnect bridge hadoop02docker network disconnect bridge hadoop031.3 Hadoop安装与集群配置1基础工具安装所有容器进入每个容器安装 SSH、JDK、vim 等基础工具以 hadoop01 为例hadoop02、hadoop03 重复操作bash运行# 进入容器docker exec -it hadoop01 bash# 安装工具yum -y install passwd openssh-server openssh-clients vim iproute2JDK安装与环境配置下载 JDK 8 压缩包链接jdk-8u411-linux-aarch64.tar.gz通过docker cp命令传入容器bash运行docker cp 本地JDK路径/hadoop01:/home/download/解压并配置环境变量bash运行# 解压到/usr/localtar -zxvf /home/download/jdk-8u411-linux-aarch64.tar.gz -C /usr/local/mv /usr/local/jdk1.8.0_411 /usr/local/jdk# 配置环境变量vim /etc/bashrc# 末尾添加export JAVA_HOME/usr/local/jdkexport PATH$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH# 生效配置source /etc/bashrc3SSH免密登录配置所有容器启动 SSH 服务并设置开机自启bash运行systemctl start sshdsystemctl enable sshd设置 root 密码统一为 000000bash运行passwd root生成密钥并实现免密登录bash运行ssh-keygen -t rsa一路回车ssh-copy-id hadoop01ssh-copy-id hadoop02ssh-copy-id hadoop034时间同步配置修改容器时区与宿主机一致避免集群时间差异bash运行ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeecho Asia/Shanghai /etc/timezone5Hadoop安装与环境配置下载 Hadoop 3.4.0 压缩包传入 hadoop01 容器并解压bash运行docker cp 本地Hadoop路径/hadoop01:/home/download/tar -zxvf /home/download/hadoop-3.4.0.tar.gz -C /usr/local/mv /usr/local/hadoop-3.4.0 /usr/local/hadoop配置 Hadoop 环境变量bash运行cd /etc/profile.d/touch my_env.shvim my_env.sh# 末尾添加export HADOOP_HOME/usr/local/hadoopexport PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin# 生效配置source /etc/profile同步 Hadoop 文件与环境变量到 hadoop02、hadoop03bash运行scp -r /usr/local/hadoop/ hadoop02:/usr/local/scp -r /usr/local/hadoop/ hadoop03:/usr/local/scp /etc/profile.d/my_env.sh hadoop02:/etc/profile.d/scp /etc/profile.d/my_env.sh hadoop03:/etc/profile.d/# 在hadoop02、hadoop03执行source /etc/profile生效6Hadoop核心配置文件修改hadoop01容器进入配置目录cd $HADOOP_HOME/etc/hadoop/修改以下文件hadoop-env.sh添加 JDK 路径bash运行export JAVA_HOME/usr/local/jdkcore-site.xml配置 HDFS 地址和临时目录xmlconfigurationpropertynamefs.defaultFS/namevaluehdfs://hadoop01:8020/value/propertypropertynamehadoop.tmp.dir/namevalue/usr/local/hadoop/tmp/value/property/configurationhdfs-site.xml配置副本数、数据存储路径等xmlconfigurationpropertynamedfs.namenode.name.dir/namevaluefile://${hadoop.tmp.dir}/dfs/name/value/propertypropertynamedfs.datanode.data.dir/namevaluefile://${hadoop.tmp.dir}/dfs/data/value/propertypropertynamedfs.replication/namevalue3/value/propertypropertynamedfs.namenode.secondary.http-address/namevaluehadoop02:50090/value/propertypropertynamedfs.namenode.http-address/namevaluehadoop01:50070/value/property/configurationmapred-site.xml配置 MapReduce 使用 YARNxmlconfigurationpropertynamemapreduce.framework.name/namevalueyarn/value/propertypropertynamemapreduce.jobhistory.address/namevaluehadoop01:10020/value/propertypropertynamemapreduce.jobhistory.webapp.address/namevaluehadoop01:19888/value/property/configurationyarn-site.xml配置 YARN 资源管理器xmlconfigurationpropertynameyarn.nodemanager.aux-services/namevaluemapreduce_shuffle/value/propertypropertynameyarn.resourcemanager.hostname/namevaluehadoop01/value/propertypropertynameyarn.resourcemanager.webapp.address/namevaluehadoop01:8088/value/property/configurationworkers添加 DataNode 节点bash运行hadoop01hadoop02hadoop037格式化NameNode与启动集群格式化 NameNode仅执行一次bash运行hdfs namenode -format启动集群bash运行start-all.sh验证启动状态执行jps命令hadoop01 显示 NameNode、ResourceManager 等进程hadoop02、hadoop03 显示 DataNode、NodeManager 等进程。(10%) Hadoop cluster 运行画面。(20%) 过程出现那些问题? 如何解决?1. 问题 1CentOS 镜像 yum 源无法使用现象安装工具时提示 “Could not resolve host”yum 源连接失败。解决方法替换 CentOS 7.9 的 yum 源为阿里源编辑/etc/yum.repos.d/CentOS-Base.repo替换文件内容为阿里源配置执行yum clean all yum makecache更新缓存。2. 问题 2JDK 版本不兼容导致 YARN 启动失败现象启动集群后 YARN 未启动查看日志提示 “Java 无法初始化”。解决方法卸载已安装的 JDK 22重新下载 JDK 8 版本按步骤配置环境变量确保 Hadoop 与 JDK 版本兼容。3. 问题 3SSH 免密登录失败现象执行ssh hadoop02时提示输入密码免密配置未生效。解决方法检查/root/.ssh/authorized_keys文件权限确保为 600重新执行ssh-copy-id命令确保公钥成功复制到目标容器。4. 问题 4时间同步工具 chrony 无法启动现象安装 chrony 后执行systemctl start chrony提示启动失败。解决方法放弃 chrony使用 CentOS 7.9 自带的 ntpd 工具通过修改时区和本地时间的方式实现时间同步确保集群节点时间一致。对Docker 有甚么看法它可以帮你做哪些事情?1. 对 Docker 的看法Docker 是一款轻量级的容器化技术核心优势在于 “隔离性” 和 “可移植性”。与传统虚拟机相比Docker 容器无需模拟完整操作系统仅共享宿主机内核启动速度更快、资源占用更少。在本次实验中Docker 有效避免了 “环境不一致” 问题无需在本地直接配置 Linux、JDK、Hadoop 等依赖通过容器封装即可快速搭建集群环境极大降低了实验门槛。2. Docker 的应用场景分布式集群搭建像本次 Hadoop 集群一样可快速创建多个节点容器通过自定义网络实现容器间通信简化集群部署流程。开发环境统一开发团队可使用相同的 Docker 镜像确保本地开发环境与生产环境一致避免 “本地能跑线上报错” 的问题。测试环境快速部署测试人员可通过镜像快速复制测试环境支持多版本并行测试提高测试效率。微服务部署在实际项目中可将每个微服务封装为独立容器实现服务的快速扩容、缩容和故障恢复。心得与感受本次在 Docker 环境中搭建 Hadoop 集群的实验让我深刻体会到了容器化技术的便捷性也遇到了不少值得总结的问题。实验初期我因选择了不兼容的 JDK 版本和 CentOS 镜像导致多次启动失败这让我意识到 “版本匹配” 是技术部署的基础。在配置 SSH 免密登录和时间同步时我逐步排查权限、网络、配置文件等问题学会了通过日志定位故障原因提升了问题排查能力。通过本次实验我不仅掌握了 Docker 容器的创建、网络配置、文件同步等基础操作还深入理解了 Hadoop 集群的架构设计 ——NameNode 作为 “管理者” 负责元数据存储DataNode 作为 “存储者” 负责数据块存储YARN 负责资源调度各组件通过配置文件协同工作。同时我也认识到容器化技术在实际工作中的价值它能大幅简化环境搭建流程提高开发和部署效率。未来我会继续深入学习 Docker、K8s 等容器编排技术将其与大数据、微服务等领域结合提升自身的技术实践能力。