-
2021-12-27 17:30:08
云服务器启动hadoop,namenode没启动起来
之前使用虚拟机玩Hadoop,现在使用云服务器安装Hadoop的时候粗心了
启动Hadoop问题
[root@hadoop_zxy ~]# jps 13893 SecondaryNameNode 14327 Jps 13545 DateNode
解决
首先想到的是hadoop name -format没有成功,尝试了几次删除logs,dpdate等文件都不行
最后想到core-site.xml配置的时候,云服务器有内部IP和外部IP之分,由于习惯了虚拟机,直接将外部IP放这了。
最后将core-site.xml中如下红框内改为内部IP
再次启动
[root@hadoop_zxy ~]# jps 13893 SecondaryNameNode 14327 Jps 13545 NameNode
更多相关内容 -
Hadoop 启动namenode节点失败
2022-04-18 11:50:24运行下面的命令启动namenode,jps命令查看namenode发现没有启动。查看生成的日志文件发现有如下的警告信息 [root@localhost hadoop-2.8.5]# sbin/hadoop-daemon.sh start namenode starting secondarynamenode, ...问题产生
运行下面的命令启动namenode,jps命令查看namenode发现没有启动。查看生成的日志文件发现有如下的警告信息
[root@localhost hadoop-2.8.5]# sbin/hadoop-daemon.sh start namenode starting secondarynamenode, logging to /opt/modules/hadoop-2.8.5/logs/hadoop-root-secondarynamenode-localhost.localdomain.out WARN:Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/opt/modules/hadoop-2.8.5/share/hadoop/common/lib/hadoop-auth-2.8.5.jar) to method sun.security.krb5.Config.getInstance()
问题解决
我们通过执行hostname命令可以看到:
[shirdrn@localhost?bin]#?hostname?? localhost.localdomain??
也就是说,Hadoop在格式化HDFS的时候,通过hostname命令获取到的主机名是localhost.localdomain,然后在/etc/hosts文件中进行映射的时候,没有找到,看下我的/etc/hosts内容
[root@localhost?bin]#?cat?/etc/hosts?? #?Do?not?remove?the?following?line,?or?various?programs?? #?that?require?network?functionality?will?fail.?? 127.0.0.1???????????????localhost???????localhost?? 192.168.1.103???????????localhost???????localhost??
也就说,通过localhost.localdomain根本无法映射到一个IP地址,所以报错了。
此时,我们查看一下/etc/sysconfig/network文件:
NETWORKING=yes?? NETWORKING_IPV6=yes?? HOSTNAME=localhost.localdomain??
可见,执行hostname获取到这里配置的HOSTNAME的值。
解决方法
第一种:修改主机名
修改/etc/sysconfig/network中HOSTNAME的值为localhost,或者自己指定的主机名,保证localhost在/etc/hosts文件中映射为正确的IP地址,然后重新启动网络服务:
[root@localhost?bin]#?/etc/rc.d/init.d/network?restart?? Shutting?down?interface?eth0:??[??OK??]?? Shutting?down?loopback?interface:??[??OK??]?? Bringing?up?loopback?interface:??[??OK??]?? Bringing?up?interface?eth0:???? Determining?IP?information?for?eth0...?done.?? [??OK??]??
这时,再执行格式化HDFS命令,以及启动HDFS集群就正常了。
第二种:修改core-site.xml文件defaultFS为已有的主机名或者直接就为本机的IP地址即可
重新格式化HDFS
重新格式化hdfs系统的方法:
1、打开hdfs-site.xml
我们打开Hadoop的hdfs-site.xml,基本配置如下所示:
<property> <name>dfs.name.dir</name> <value>/usr/local/hadoop/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop/hdsf/data</value> </property>
将 dfs.name.dir所指定的目录删除、dfs.data.dir所指定的目录删除
2、删除core-site.xml配置文件指定的相关目录
<property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadooptmp</value> </property>
将hadoop.tmp.dir所指定的目录删除,即删除Hadoop的临时文件路径。
3、重新执行命令:hadoop namenode -format
格式化完毕。
这种格式化HDFS的方式是需要把原来HDFS中的数据全部清空,然后再格式化并安装一个全新的HDFS。
注:这种格式化方式需要将HDFS中的数据全部清空,以后我们探讨不需删除数据即可重新格式化的方法。注解:如果删除文件,提示permission denied
使用 rm -rf 删除输出如下:
加 sudo 执行后发现关键信息了:xxx is not in the sudoers file.
解决方法:
首先需要切换到root身份
$su - (非root用户名)
(注意有 -,这和su是不同的,在用命令"su"的时候只是切换到root,但没有把root的环境变量传过去,还是当前用户的环境变量,用"su -"命令将环境变量也一起带过去,就象和root登录一样)
然后
$visudo//切记,此处没有vi和sudo之间没有空格
1、“😒”移动光标,到最后一行
2、按a,进入append模式
3、输入您的用户名及后面的信息
your_user_name ALL=(ALL) ALL
4、按Esc
5、输入“:wq”(回车,保存文件并退出)
这样就把自己加入了sudo组,可以使用sudo命令了。
-
启动Hadoop,namenode进程无法启动。
2022-04-15 15:09:45解决namenode无法启动问题我的Hadoop是3.1,前面都配置好之后启动Hadoop,发现master机,进程没有namenode,最后发现是没有格式化namenode的原因。
1.启动dfs与yarn之后,master机进程还是只有3个,发现namenode没有启动,查看namenode日志(在Hadoop3.1.0文件夹的logs文件夹中)hadoop-csu-namenode-master.log(名字根据主机名会有所不同)。
2. 然后去dfs目录下发现没有name文件夹,就自己建了一个。
3.发现还是不行,又去查看日志,发现提示不能被格式化,又关掉dfs和yarn。
使用hdfs namenode -format 命令格式化。
4.再次启动,ok成功解决。
-
2021-11-03 hadoop NameNode启动
2021-11-03 21:55:06namenode是hadoop架构中最重要的角色之一,NameNode主要管理管理着名称空间表(文件名与block的映射,存储在磁盘上且十分重要)和inodes表(块与机器的映射,只要namenode出现就会存在),通常情况下一个集群中有且...ps: 本文参考hadoop-3.3.0
1 NameNode简介
namenode是hadoop架构中最重要的角色之一,NameNode主要管理管理着名称空间表(文件名与block的映射,存储在磁盘上且十分重要)和inodes表(块与机器的映射,只要namenode出现就会存在),通常情况下一个集群中有且仅有一个活跃的NameNode,从Hadoop2开始,为了保证集群中的高可用,可以配置两个namenode,一个active另一个为standby。但这种情况下,当集群规模达到一定程度时,namenode仍然会成为集群的瓶颈,因此在这种情况下,hadoop Federation应运而生,即一个集群中允许多组NameNode提供服务,每组namenode各自分管一部分目录(NameSpace,BlockPool),彼此之间相互隔离,但共享相同的DataNode。
但Federation模式虽然间接的扩展了NameNode,但是由于Federation中schema需要使用ViewFs且无法兼容HDFS,因此这种情况下需要对运行在集群上的schema做一个替换。因此Hadoop3中新增的的多个NameNode的特性就显得十分有效,理论上支持使用>2个NameNode,但官方建议使用3-5个NameNode节点。
还有一点内容需要了解,从hadoop3.3.0开始,社区新增了一个新feature,即新增一个observe namenode,为了解决active 访问负载过高的问题,将部分read request 转移到observer上可以大幅的降低active namenode的负载。
2 NameNode的启动
2.1 main()方法
首先进入NameNode的main方法,通过解析各个参数执行NameNode的启动:
public static void main(String argv[]) throws Exception { // 这里会做一个判断是否是help操作 if (DFSUtil.parseHelpArgument(argv, NameNode.USAGE, System.out, true)) { System.exit(0); } try { StringUtils.startupShutdownMessage(NameNode.class, argv, LOG); // 创建NameNode NameNode namenode = createNameNode(argv, null); // 进程持续运行,运行NameNodeRpcServer#join,从而实现rpc的通信 if (namenode != null) { namenode.join(); } } catch (Throwable e) { LOG.error("Failed to start namenode.", e); terminate(1, e); } }
2.2 createNameNode
此方法主要是用来创建一个NameNode,根据传进去的参数创建不同的NameNode,当没有特别的参数指定时,创建一个默认的NameNode,即正常的NameNode
public static NameNode createNameNode(String argv[], Configuration conf) throws IOException { LOG.info("createNameNode " + Arrays.asList(argv)); if (conf == null) conf = new HdfsConfiguration(); // Parse out some generic args into Configuration. GenericOptionsParser hParser = new GenericOptionsParser(conf, argv); argv = hParser.getRemainingArgs(); // Parse the rest, NN specific args. /** * 获取启动方式:默认是regular * 1. format:格式化,验证配置的目录(namenode dir,edit dir, share edit dir) 是否存在并且格式化是否是预期的 * 2. gen clusterId:生成新的cluster id * 3. regular:正常启动namenode * 4. backup: * 5. checkpoint:和backup一样都是创建一个BackupNode,主要包括checkpoint和 backup的NameNode#role,用来周期性的将edit落盘, backup还有一点不同的是会同步active的namespace信息 * 6. observer:3.3.0新增的一个namenode类型,可以减轻active namenode的读负载 * 7. upgrade或者upgrade only:升级操作 * 8. rollingUpgrade:滚动升级 * 9. rollback:从升级系统中回滚到前一个版本,这个参数必须在停止的集群分布式文件系统中使用 * 10. import:从指定的一个checkpoint中恢复集群 * 11. bootstrap standby:启动standby node,仅在初次HA的时候从active 复制namespace数据 * 12. initialize sharded edits:初始化share edit目录,便于standby nn启动 * 13. recover:单个元数据存储时可以通过此命令恢复namenode * 14. metadata version:元数据信息 * 15. null:参数不正确 */ StartupOption startOpt = parseArguments(argv); if (startOpt == null) { printUsage(System.err); return null; } // 将startOpt添加到配置中,用户后面创建不同的NameNode setStartupOption(conf, startOpt); boolean aborted = false; // 根据配置创建不同的NameNode switch (startOpt) { case FORMAT: aborted = format(conf, startOpt.getForceFormat(), startOpt.getInteractiveFormat()); terminate(aborted ? 1 : 0); return null; // avoid javac warning case GENCLUSTERID: String clusterID = NNStorage.newClusterID(); LOG.info("Generated new cluster id: {}", clusterID); terminate(0); return null; case ROLLBACK: aborted = doRollback(conf, true); terminate(aborted ? 1 : 0); return null; // avoid warning case BOOTSTRAPSTANDBY: String[] toolArgs = Arrays.copyOfRange(argv, 1, argv.length); int rc = BootstrapStandby.run(toolArgs, conf); terminate(rc); return null; // avoid warning case INITIALIZESHAREDEDITS: aborted = initializeSharedEdits(conf, startOpt.getForceFormat(), startOpt.getInteractiveFormat()); terminate(aborted ? 1 : 0); return null; // avoid warning case BACKUP: case CHECKPOINT: NamenodeRole role = startOpt.toNodeRole(); DefaultMetricsSystem.initialize(role.toString().replace(" ", "")); return new BackupNode(conf, role); case RECOVER: NameNode.doRecovery(startOpt, conf); return null; case METADATAVERSION: printMetadataVersion(conf); terminate(0); return null; // avoid javac warning case UPGRADEONLY: DefaultMetricsSystem.initialize("NameNode"); new NameNode(conf); terminate(0); return null; default: DefaultMetricsSystem.initialize("NameNode"); return new NameNode(conf); } }
这个方法主要是根据参数创建各种不同类型的NameNode,默认是Regular,创建普通的NameNode。另外还有其他几种方式:
- format:格式化NameNode,建立NameNode节点的文件结构。带有format参数启动NameNode节点时,首先启动NameNode节点,然后对其机型格式化,再关闭节点,如果文件目录已经存在当前文件系统,则会提示用户。它有两个参数nonInteractive和force,nonInteractive表示如果NameNode节点的文件夹在当前的底层文件系统中存在,那么用户将不会收到提示,并且当前的格式化会失败,force表示不管NameNode的目录存不存在,强制格式化NameNode节点,也不会提示用户,如果nonInteractive和force参数同时存在,那么force参数将会被忽略
- 其他几种方式参见注释
2.3 NameNode构造
protected NameNode(Configuration conf, NamenodeRole role) throws IOException { super(conf); this.tracer = new Tracer.Builder("NameNode"). conf(TraceUtils.wrapHadoopConf(NAMENODE_HTRACE_PREFIX, conf)). build(); this.tracerConfigurationManager = new TracerConfigurationManager(NAMENODE_HTRACE_PREFIX, conf); this.role = role; String nsId = getNameServiceId(conf); String namenodeId = HAUtil.getNameNodeId(conf, nsId); clientNamenodeAddress = NameNodeUtils.getClientNamenodeAddress( conf, nsId); if (clientNamenodeAddress != null) { LOG.info("Clients should use {} to access" + " this namenode/service.", clientNamenodeAddress); } // 是否启用HA this.haEnabled = HAUtil.isHAEnabled(conf, nsId); // 获取当前是Active或者Standby状态 state = createHAState(getStartupOption(conf)); this.allowStaleStandbyReads = HAUtil.shouldAllowStandbyReads(conf); this.haContext = createHAContext(); try { initializeGenericKeys(conf, nsId, namenodeId); // NameNode初始化 initialize(getConf()); state.prepareToEnterState(haContext); try { haContext.writeLock(); // 启动对应状态的服务,如active、standby state.enterState(haContext); } finally { haContext.writeUnlock(); } } catch (IOException e) { this.stopAtException(e); throw e; } catch (HadoopIllegalArgumentException e) { this.stopAtException(e); throw e; } notBecomeActiveInSafemode = conf.getBoolean( DFS_HA_NN_NOT_BECOME_ACTIVE_IN_SAFEMODE, DFS_HA_NN_NOT_BECOME_ACTIVE_IN_SAFEMODE_DEFAULT); this.started.set(true); }
在初始化中会进行一下参数的补充,检查当前NameNode的状态,是否HA之类的,而后根据给定状态启动对应服务。最重要的是initialize(conf),用户namenode完成初始化操作。
2.4 initialize
protected void initialize(Configuration conf) throws IOException { if (conf.get(HADOOP_USER_GROUP_METRICS_PERCENTILES_INTERVALS) == null) { String intervals = conf.get(DFS_METRICS_PERCENTILES_INTERVALS_KEY); if (intervals != null) { conf.set(HADOOP_USER_GROUP_METRICS_PERCENTILES_INTERVALS, intervals); } } // 启动一些监控服务与配置添加 UserGroupInformation.setConfiguration(conf); loginAsNameNodeUser(conf); NameNode.initMetrics(conf, this.getRole()); StartupProgressMetrics.register(startupProgress); pauseMonitor = new JvmPauseMonitor(); pauseMonitor.init(conf); pauseMonitor.start(); metrics.getJvmMetrics().setPauseMonitor(pauseMonitor); if (conf.getBoolean(DFS_NAMENODE_GC_TIME_MONITOR_ENABLE, DFS_NAMENODE_GC_TIME_MONITOR_ENABLE_DEFAULT)) { long observationWindow = conf.getTimeDuration( DFS_NAMENODE_GC_TIME_MONITOR_OBSERVATION_WINDOW_MS, DFS_NAMENODE_GC_TIME_MONITOR_OBSERVATION_WINDOW_MS_DEFAULT, TimeUnit.MILLISECONDS); long sleepInterval = conf.getTimeDuration( DFS_NAMENODE_GC_TIME_MONITOR_SLEEP_INTERVAL_MS, DFS_NAMENODE_GC_TIME_MONITOR_SLEEP_INTERVAL_MS_DEFAULT, TimeUnit.MILLISECONDS); gcTimeMonitor = new Builder().observationWindowMs(observationWindow) .sleepIntervalMs(sleepInterval).build(); gcTimeMonitor.start(); metrics.getJvmMetrics().setGcTimeMonitor(gcTimeMonitor); } // 启动一个NameNodeHttpServer, 启动0.0.0.0:9870 if (NamenodeRole.NAMENODE == role) { startHttpServer(conf); } // 根据配置中指定位置的edit和fsImage初始化FsNameSystem,加载fsImage loadNamesystem(conf); startAliasMapServerIfNecessary(conf); // hadoop rpc rpcServer = createRpcServer(conf); initReconfigurableBackoffKey(); if (clientNamenodeAddress == null) { // This is expected for MiniDFSCluster. Set it now using // the RPC server's bind address. clientNamenodeAddress = NetUtils.getHostPortString(getNameNodeAddress()); LOG.info("Clients are to use " + clientNamenodeAddress + " to access" + " this namenode/service."); } if (NamenodeRole.NAMENODE == role) { httpServer.setNameNodeAddress(getNameNodeAddress()); httpServer.setFSImage(getFSImage()); if (levelDBAliasMapServer != null) { httpServer.setAliasMap(levelDBAliasMapServer.getAliasMap()); } } // 启用通用服务,在此之中会检查是否进入blockManager的安全模式 startCommonServices(conf); startMetricsLogger(conf); }
3 其他
在此主要介绍NameNode类中中比较重要的几个变量:
/** * FSNamesystem 是瞬态和持久命名空间状态的容器,并在 NameNode 上完成所有记录工作。 * 主要作用如下: * 1. 是 BlockManager、DatanodeManager、DelegationTokens、LeaseManager 等服务的容器。 * 2. 委托处理修改或检查命名空间的 RPC 调用 * 3. 任何只涉及块的东西(例如块报告),它都委托给 BlockManager * 4. 任何只涉及文件信息(例如权限、mkdirs)的东西,它都会委托给 FSDirectory * 5. 任何跨越上述两个组件的东西都应该在这里协调。 * 6. 记录变动到FsEditLog * * 此变量保存的内容: * 1. 有效文件名和blockList的映射; * 2. 合法的block集 * 3. block和机器列表的映射 * 4. 机器和blockList的映射 * 5. 更新心跳机器的 LRU 缓存 */ protected FSNamesystem namesystem; // namenode的角色分类,包括NameNode backup checkpoint protected final NamenodeRole role; // Ha状态,包括active standby backup三种实现 private volatile HAState state; // 负责namenode的http调用 protected NameNodeHttpServer httpServer; // 主要负责处理namenode的rpc调用 private NameNodeRpcServer rpcServer;
-
hadoop常用的启动命令
2022-03-08 16:22:47本人三台节点:hadoop01,hadoop02,hadoop03(部署hive,mysql) 默认jdk,zookeeper,... 启动:bin/zkServer.sh start (单台节点启动命令) 关闭:bin/zkServer.sh stop (单台节点关闭命令) 查看:bin/zkSer... -
Hadoop分别启动namenode,datanode,secondarynamenode等服务
2018-05-20 23:01:27查找当前解压文件之后,hadoop2.7.3的默认配置文件, 四个文件的.xml, 1.core-default.xml hadoop-2.7.3\share\hadoop\common\hadoop-common-2.7.3.jar 2.hdfs-default.xml hdfs\hadoop-hdfs-2.7.3 3.mapred-... -
hadoop启动后没有namenode
2022-04-03 11:59:20参考教程: 教程1 (我按照教程1成功了。) 教程2 教程3 前提: 使用命令: cd $HADOOP_HOME ./sbin/start-dfs.sh jps ...hadoop namenode -format 再次打开: start-dfs.sh 再次验证: jps ... -
Hadoop启动命令
2022-04-18 12:35:15下载hadoop并解压 配置hdfs 修改配置文件etc/hadoop/hadoop-env.sh JAVA_HOME=/home/middleware/jdk 修改配置文件etc/hadoop/core-site.xml <configuration> <property> <name>fs.defaultFS<... -
hadoop启动缺少NameNode, 缺少ResourceManager, 缺少NodeManager
2022-04-18 12:37:00描述:在hadoop 运行start-all.sh,发现缺少了NameNode, 缺少ResourceManager, 缺少NodeManager…等等的服务。这类问题有统一的解决方案。即查阅hadoop日志。 目录 1.hadoop日志 2.1 没有NameNode(选读) 2.2 没有... -
linux上的hadoop单机版的namenode无法启动问题
2021-12-15 11:55:58如果报错是无法加载fsimage的话 hdfs namenode -format 这个命令初始化一次就可以了 -
教你一步一步分析Hadoop NameNode启动流程
2020-05-06 19:44:30NameNode服务端的启动过程 ...下面是Linux服务器上启动NameNode的命令。 [root@hadoop01 sbin]# hadoop-daemon.sh start namenode 既然是通过hadoop-daemon.s进行启动,那么我们可以看看这个shell脚本是怎么启... -
hadoop中namenode无法启动的原因有哪些
2019-01-11 17:11:33当你在学习和使用hadoop时,也许会遇到这样的一个问题,运行bin/start-all.sh时发现namenode没有启动,可以通过以下方法进行排查解决:翻看日志,寻找错误提示,并进行内容的改进,最后进行重启原因一:权限问题#... -
寻找Hadoop启动Namenode失败原因
2018-09-29 21:49:48hadoop目录下,运行下面语句启动namenode,jps发现namenode启动失败 sbin/hadoop.daemon.sh start namenode 问题解决 (1)Hadoop namenode、datanode、secondarynamenode节点的日志文件在Hadoop根目录 ... -
Hadoop启动NameNode报错ERROR Cannot set priority of namenode process 2639
2022-04-03 11:57:57Hadoop启动NameNode报错::ERROR: Cannot set priority of namenode process 问题描述: Hadoop启动NameNode报错ERROR: Cannot set priority of namenode process2639 [atguigu@localhost333logs]$ tail -100 ... -
Hadoop的NameNode详解(超详细)
2020-09-15 09:43:59NameNode详解 管理DataNode和记录元数据Meta 元数据包含: a. 记录数据的虚拟存储路径 ...元数据的存储位置是由hadoop.tmp.dir属性决定,如果不配置则默认使用/tmp 元数据在磁盘中是以edits文件和fsimage -
hadoop的namenode无法启动
2021-04-16 11:36:541.进入hadoop的目录,看到一个tmp 文件夹 2.进入tmp文件夹 3.删除dfs文件夹,sudo rm -rf dfs 4.再次格式化namenode,命令是: hdfs namenode -format -
Hadoop NameNode格式化
2022-01-19 19:30:08格式化NameNode后集群的数据会全部丢失,格式化之前需做好数据备份工作。 格式化步骤 格式化之前,首先需删除Hadoop系统日志,默认路径为${HADOOP_HOME}/logs。 然后删除主节点目录以及数据节点目录,默认路径分别... -
hadoop启动没有namenode节点的错误分析
2017-07-11 17:12:27没有为hadoop新建用户,我直接使用root启动,当输入#hadoop namenode -format后,也没什么异常,继续往下执行, 输入#start-all.sh后,启动完后输入#jps发现没有namenode,立马去看日志,显示如下: 2017-07-11 ... -
hadoop启动namenode后,jps中没有显示namenode进程
2017-08-26 11:34:56[root@master hadoop]# hadoop-daemon.sh start namenode starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-master.out [root@master hadoop]# jps 4164 Jps [root@master hadoop]# -
Hadoop集群搭建(六):hadoop配置namenode服务
2018-11-20 19:19:38六:配置时间同步: ...gt;找到VMware Tools,打开时间同步即可: ...注:如果你是创建一台虚拟机,其他几台...1,进入hadoop配置文件目录: 命令: 2,更改配置文件core-site.xml : 命令: ... -
hadoop启动集群之后没有namenode的一种情况
2022-05-24 22:43:41我的做法是:检查你的hadoop的配置文件是否填写正确,我的hadoop的hdfs-site.xml中的主机IP地址未填写正确,导致启动集群服务后namenode启动不上,hdfs当然也没法用。 我的虚拟机会产生这个问题主要是虚拟机的... -
Hadoop启动NameNode报错ERROR: Cannot set priority of namenode process 2639
2021-09-17 16:58:04Hadoop启动NameNode报错::ERROR: Cannot set priority of namenode process 问题描述: Hadoop启动NameNode报错ERROR: Cannot set priority of namenode process2639 [atguigu@localhost333logs]$ tail -100 ...