docker单机部署hadoop 官方镜像3.3.6 过程问题记录 - 教程

news/2025/10/4 22:04:53/文章来源:https://www.cnblogs.com/yxysuanfa/p/19125975

这里写自定义目录标题

  • 服务器 centos 7.9
    • 服务器配置
    • namenode 无法启动问题
      • 问题一 文件路径配置问题
        • 问题分析:
        • 配置文件用上述之后,修正
      • 问题二 访问路径问题
        • 错误原因‌:
        • 解决思路
      • 问题三 hdfs 没有格式化问题
    • datanode 无法成功启动问题
      • 问题一 namenode 已经启动
        • 错误原因‌:
        • 解决步骤
      • 问题二 目录执行权限
        • 问题根源定位
        • 解决方案实施

服务器 centos 7.9

启动防火墙 firewalld
hadoop 镜像 apache/hadoop:3.3.6

服务器配置

  1. 创建项目目录结构
mkdir -p /home/hadoop-cluster/{hadoop/conf,spark/conf,hbase/conf,data/{hadoop,hbase,spark},scripts,notebooks}
cd hadoop-cluster

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

core-site.xml 路径配置的都是容器内的路径 (有的默认在tmp 下,每次重启后tmp 文件变化)


fs.defaultFShdfs://namenode:8020hadoop.tmp.dir/hadoop/dfs/name

hdfs-site.xml 路径配置的都是容器内的路径


dfs.replication1dfs.namenode.name.dirfile:/hadoop/dfs/namedfs.datanode.data.dirfile:/hadoop/dfs/datadfs.datanode.failed.volumes.tolerated0dfs.namenode.rpc-addressnamenode:8020dfs.namenode.http-addressnamenode:9870

2.创建docker compose

version: '3.8'
services:namenode:image: apache/hadoop:3.3.6user: "1000:1000"  # 指定UID和GIDhostname: namenodecommand: ["hdfs", "namenode"]ports:- "9870:9870"  # WebUI- "8020:8020"  # RPC- "9864:9864"  # DataNode通信volumes:- ./data/hadoop/namenode:/hadoop/dfs/name- ./hadoop/conf/core-site.xml:/opt/hadoop/etc/hadoop/core-site.xml- ./hadoop/conf/hdfs-site.xml:/opt/hadoop/etc/hadoop/hdfs-site.xmlenvironment:- CLUSTER_NAME=hadoop-single- SERVICE_PRECONDITION="namenode:9870"healthcheck:start_period: 2m  # 等待NameNode初始化完成test: ["CMD-SHELL", "curl -sf http://192.168.1.178:9870/jmx?qry=Hadoop:service=NameNode,name=NameNodeStatus | jq -e '.beans[0].State == \"active\"'"]interval: 30stimeout: 5sretries: 2networks:- hadoop-netdatanode:image: apache/hadoop:3.3.6user: "1000:1000"  # 指定UID和GIDhostname: datanodecommand: ["hdfs", "datanode"]depends_on:namenode:condition: service_healthyvolumes:- ./data/hadoop/datanode:/hadoop/dfs/data- ./hadoop/conf/core-site.xml:/opt/hadoop/etc/hadoop/core-site.xml- ./hadoop/conf/hdfs-site.xml:/opt/hadoop/etc/hadoop/hdfs-site.xmlenvironment:- CLUSTER_NAME=hadoop-singlenetworks:- hadoop-net
networks:hadoop-net:driver: bridge
  1. 项目目录初始化 hdfs format
docker-compose run --rm namenode hdfs namenode -format

4.启动
docker-compose up -d

namenode 无法启动问题

问题一 文件路径配置问题

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /home/hadoop-cluster/data/hadoop/namenode is in an inconsistent state: storage directory does not exist or is not accessible.
namenode  |     at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:392)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:243)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1236)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:808)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:694)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:781)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:1033)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:1008)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1782)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1847)
namenode  | 2025-09-28 03:46:08,459 INFO  [main] util.ExitUtil (ExitUtil.java:terminate(241)) - Exiting with status 1: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /home/hadoop-cluster/data/hadoop/namenode is in an inconsistent state: storage directory does not exist or is not accessible.
namenode  | 2025-09-28 03:46:08,464 INFO  [shutdown-hook-0] namenode.NameNode (LogAdapter.java:info(51)) - SHUTDOWN_MSG:

错误信息显示NameNode无法访问或找到位于/home/hadoop-cluster/data/hadoop/namenode的存储目录。以下是详细的解决方案:

问题分析:

NameNode无法访问/home/hadoop-cluster/data/hadoop/namenode目录
该目录不存在或权限不足
可能与Docker镜像的默认配置不匹配

配置文件用上述之后,修正

问题二 访问路径问题

025-09-28 04:17:04 INFO  MetricsSystemImpl:191 - NameNode metrics system started
namenode  | 2025-09-28 04:17:04 INFO  NameNodeUtils:79 - fs.defaultFS is file:///
namenode  | 2025-09-28 04:17:04 ERROR NameNode:1852 - Failed to start namenode.
namenode  | java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
namenode  |     at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:781)
namenode  |     at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddressCheckLogical(DFSUtilClient.java:810)
namenode  |     at org.apache.hadoop.hdfs.DFSUtilClient.getNNAddress(DFSUtilClient.java:772)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:591)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:731)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:751)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:1033)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:1008)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1782)
namenode  |     at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1847)
namenode  | 2025-09-28 04:17:04 INFO  ExitUtil:241 - Exiting with status 1: java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
namenode  | 2025-09-28 04:17:04 INFO  NameNode:51 - SHUTDOWN_MSG:
错误原因‌:

NameNode无法解析fs.defaultFS配置的URI
错误显示fs.defaultFS被设置为file:///,这是一个无效的URI
在分布式环境中,fs.defaultFS应该指向HDFS的URI,如hdfs://namenode:8020

解决思路

实际在core-site.xml hdfs-site.xml 已经配置,但是还是报错
原因是映射的宿主机,没有访问权限,通过以下命令解决问题

#数据权限问题
mkdir -p ./data/hadoop/{namenode,datanode} ./conf
chmod -R 777 ./data

问题三 hdfs 没有格式化问题

运行docker compose 之前,需要运行

docker-compose run --rm namenode hdfs namenode -format

datanode 无法成功启动问题

权限问题

问题一 namenode 已经启动

2025-09-28 04:10:47 ERROR DataNode:3249 - Exception in secureMain
datanode         | java.io.IOException: No services to connect, missing NameNode address.
datanode         |      at org.apache.hadoop.hdfs.server.datanode.BlockPoolManager.refreshNamenodes(BlockPoolManager.java:165)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1755)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.(DataNode.java:564)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:3148)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:3054)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:3098)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:3242)
datanode         |      at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:3266)
datanode         | 2025-09-28 04:10:47 INFO  ExitUtil:241 - Exiting with status 1: java.io.IOException: No services to connect, missing NameNode address.
datanode         | 2025-09-28 04:10:47 INFO  DataNode:51 - SHUTDOWN_MSG:
datanode         | /************************************************************
datanode         | SHUTDOWN_MSG: Shutting down DataNode at 5beb286d64e0/192.168.128.4
错误原因‌:

DataNode无法发现NameNode的地址
错误显示"missing NameNode address"
用户使用的是Hadoop 3.3.6 Docker镜像
根本原因‌:
DataNode无法解析NameNode的主机名或IP地址

解决步骤

文件已经配置,但是没有生效,是需要挂在volumes
在这里插入图片描述

问题二 目录执行权限

2025-09-29 07:43:58 WARN  StorageLocationChecker:213 - Exception checking StorageLocation [DISK]file:/hadoop/dfs/data
EPERM: Operation not permittedat org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method)at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:389)at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:1110)at org.apache.hadoop.fs.ChecksumFileSystem$1.apply(ChecksumFileSystem.java:800)at org.apache.hadoop.fs.ChecksumFileSystem$FsOperation.run(ChecksumFileSystem.java:781)at org.apache.hadoop.fs.ChecksumFileSystem.setPermission(ChecksumFileSystem.java:803)at org.apache.hadoop.util.DiskChecker.mkdirsWithExistsAndPermissionCheck(DiskChecker.java:234)at org.apache.hadoop.util.DiskChecker.checkDirInternal(DiskChecker.java:141)at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:116)at org.apache.hadoop.hdfs.server.datanode.StorageLocation.check(StorageLocation.java:239)at org.apache.hadoop.hdfs.server.datanode.StorageLocation.check(StorageLocation.java:52)at org.apache.hadoop.hdfs.server.datanode.checker.ThrottledAsyncChecker$1.call(ThrottledAsyncChecker.java:142)at org.apache.hadoop.thirdparty.com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)at org.apache.hadoop.thirdparty.com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)at org.apache.hadoop.thirdparty.com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
2025-09-29 07:43:58 ERROR DataNode:3249 - Exception in secureMain
org.apache.hadoop.util.DiskChecker$DiskErrorException: Too many failed volumes - current valid volumes: 0, volumes configured: 1, volumes failed: 1, volume failures tolerated: 0at org.apache.hadoop.hdfs.server.datanode.checker.StorageLocationChecker.check(StorageLocationChecker.java:233)at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:3141)at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:3054)at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:3098)at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:3242)at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:3266)

解决思路:

问题根源定位

核心错误‌
EPERM: Operation not permitted表明Hadoop进程无法对/hadoop/dfs/data目录执行权限操作,最终导致Too many failed volumes错误。

关键日志分析‌

错误链:NativeIO.chmod失败 → RawLocalFileSystem.setPermission异常 → DiskChecker检测到无效存储卷
根本原因:容器内Hadoop用户(默认hdfs)对宿主机挂载目录无写权限

解决方案实施

首先查看一下宿主机和容器内用户的uid 是否一致
在这里插入图片描述
图片中显示是一致的,所以只要修改宿主机的映射文件夹属性就可以解决

  1. 目录权限修复(推荐方案)‌
    在宿主机执行以下命令,确保目录属主与容器内用户一致:
sudo chown -R 1000:1000 /hadoop/dfs/data  # 1000是用户hadoop默认UID
sudo chmod -R 755 /hadoop/dfs/data
  1. Docker Compose配置优化‌
volumes:- type: volumesource: hadoop_datatarget: /hadoop/dfs/datavolume:driver: localdriver_opts:type: nonedevice: /hadoop/dfs/datao: binduid: 1000gid: 1000

或者简单尝试

datanode:image: apache/hadoop:3.3.6user: "1000:1000"  # 指定UID和GIDhostname: datanodecommand: ["hdfs", "datanode"]depends_on:namenode:condition: service_healthyvolumes:- ./data/hadoop/datanode:/hadoop/dfs/data- ./hadoop/conf/core-site.xml:/opt/hadoop/etc/hadoop/core-site.xml- ./hadoop/conf/hdfs-site.xml:/opt/hadoop/etc/hadoop/hdfs-site.xmlenvironment:- CLUSTER_NAME=hadoop-singlenetworks:- hadoop-net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20251004 qmd 弱化规约(未完成)

弱化规约就是指,对于原问题F,先考虑一个弱化版问题F 如果解决F的复杂度是O(n),那么F一定不会优于F 通常的,如果一个算法G能解决F和F,但是一个能解决F的算法不能解决F,那么F比F要弱。 一般弱化问题不能丢掉关键的…

深入解析:人工智能专业术语详解(C)

深入解析:人工智能专业术语详解(C)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

徐州做公司网站多少钱wordpress 评论优化

上期已经信息收集阶段已经完成,接下来是漏洞利用。 靶场思路 通过信息收集得到两个吧靶场的思路 1、http://192.168.195.33/phpmyadmin/(数据库的管理界面) root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

怎么建设投票网站平面设计提高审美网站

当谈论MobileNet、MobileNetV2和MobileNetV3时,我们指的是一系列基于深度学习的轻量级神经网络架构,这些架构旨在在保持高度准确性的同时减少模型的计算和参数量。以下是它们各自的创新点的详细总结: MobileNet: 深度可分离卷积&…

网站后台界面 园林设计网站负责人照片

如果你想通过 RabbitMQ 的死信队列功能实现消费者拒绝消息投递到死信交换机的行为,你可以按照以下步骤操作: 创建原始队列,并将其绑定到一个交换机上: export RABBITMQ_SERVER127.0.0.1 export RABBITMQ_PORT5672 export RAB…

BQ24650 MPPT管理控制芯片测试

BQ24650 MPPT管理控制芯片测试 10月1号开始焊接调试,1号下午开始进行充电测试,截止到10月3号晚上23:05(因为夜间无人监护,所以夜间断电,停止测试。)终于看到充电结束,进入浮充状态(绿灯亮、红灯灭)…

黄金替罪羊

题面 黄金替罪羊实在是太难玩了,所以开拓者弄了个简化版。 黄金替罪羊需要替罪羊和开拓者的配合一起完成任务。 地图可以认为是一棵带权树,每次开拓者会问你一个有序点对 (u,v),表示起点为 u 而终点为 v,在开拓者的…

现在网站如何做优化装修体验馆app

行级触发器:当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、后列的值.:NEW 修饰符访问操作完成后列的值:OLD 修饰符访问操作完成前列的值例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时,把被…

有没有帮人做数学题的网站网站建设需求和页面需求怎么提

文章目录出库单业务流程基本流程扩展流程找不到符合条件的仓库,要求部分退款(未生成出库单时)找不到符合条件的仓库,全部退款(未生成出库单时)找不到符合条件的仓库,等待库存补足(未…

JVM 深入研究 -- 详解class 材料

JVM 深入研究 -- 详解class 材料pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

网站开发的3个阶段工作计划范文

作者 | 飞向星的客机来源 | CSDN博客🌟 前言镜像是构建容器的蓝图,Docker 以镜像为模板,构建出容器。容器在镜像的基础上被构建,也在镜像的基础上运行,容器依赖于镜像。本文将对 容器的运行 及相关内容进行详细讲解。容…

Spring Boot 缓存科技详解

Spring Boot 缓存科技详解2025-10-04 21:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

制作网站能挣钱怎么制作网站发布

[react] 在React中怎么阻止事件的默认行为? event.preventDefault();阻止浏览器默认行为, 例如标签不跳转 event.stopPropagation();阻止冒泡; 例如上级点击事件不生效 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很…

网站seo房屋经纪人网站端口怎么做

本期内容主要讲解的是关于在CST软件上电源直流压降仿真VRM的一些相关参数设置,小编我在之前文章中有说到过如何利用CST仿真电源信号的直流压降,不过有一些问题我这边再去补充一些。 首先就是VRM芯片的设置了,小编我还是按照之前那样设置&…

淘宝网站建设wordpress下载站批量

单元测试 单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…

【比赛记录】2025CSP-S模拟赛58

A B C D Sum Rank- 25 20 75 120 19/25乱序放题,被 T1 硬控了啊啊啊啊啊 A. 铁轨 原 B. 参加 看到区间操作想不到差分,设差分数组为 \(b\),那么要求即为 \(\forall i\in[1,k],b_i>0,\forall i\in[k+1,n],b_i<…

怎么外贸网站推广欧派家居全屋定制价格多少钱一平

我想知道如何将日期从Hive转移到MySQL&#xff1f;我已经看到了如何将hive数据移动到Amazon DynamoDB而不是像MySQL这样的RDBMS的示例.以下是我在DynamoDB中看到的示例&#xff1a;CREATE EXTERNAL TABLE tbl1 ( name string, location string )STORED BY org.apache.hadoop.hi…

油画风网站网站开发z亿玛酷1负责

文章目录 灰度发布&#xff0c;作用是&#xff1f;测试计划中测试开始条件一般包括哪些内容测试计划中的测试结束条件一般包含哪些内容测试人员是否需要代码能力&#xff0c;应用在哪些方面测试人员参与代码审核&#xff0c;重点关注什么产品上线后发现问题&#xff0c;如何产品…

Kafka06-进阶-尚硅谷 - 实践

Kafka06-进阶-尚硅谷 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

回忆有感

有意思发现自己小学~初一阶段特别喜欢写诗/杂文并分享到QQ动态里面:科技与自然 孤鸿 小时候,对雨总是有种莫名的期盼:雨天,身披着雨衣,脚穿着雨鞋,独自在雨中漫步。踩一脚水洼,看那点点晶莹的水珠如花儿般绽放,…