hadoop中filesystem无法显示( Can't browse the DFS since there are no live nodes available to redirect to.)

在Hadoop 2.2.0版本中,尝试通过filesystem访问DFS时遇到了HTTP 500错误,原因是使用了已废弃的`hadoop -namenode -format`命令。正确的做法是使用`hdfs namenode -format`进行HDFS初始化。问题解决方法包括:停止所有Hadoop进程,重新格式化,以及确保datanode未启动的情况下,检查并统一`dfs.name.dir/current/VERSION`中的clusterID,以匹配namenode的clusterID。完成这些步骤后,重启服务即可解决问题。

2.2.0版本中通过filesystem进入
http://192.168.211.128:50070/nn_browsedfscontent.jsp
界面显示如下:


HTTP ERROR 500

Problem accessing /nn_browsedfscontent.jsp. Reason:

Can't browse the DFS since there are no live nodes available to redirect to.

Caused by:

java.io.IOException: Can’t browse the DFS since there are no live nodes available to redirect to.
at org.apache.hadoop.hdfs.server.namenode.NamenodeJspHelper.redirectToRandomDataNode(NamenodeJspHelper.java:646)
at org.apache.hadoop.hdfs.server.namenode.nn_005fbrowsedfscontent_jsp._jspService(nn_005fbrowsedfscontent_jsp.java:70)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler CachedChain.doFilter(ServletHandler.java:1221)atorg.apache.hadoop.http.lib.StaticUserWebFilter StaticUserFilter.doFilter(StaticUserWebFilter.java:109)
at org.mortbay.jetty.servlet.ServletHandler CachedChain.doFilter(ServletHandler.java:1212)atorg.apache.hadoop.http.HttpServer QuotingInputFilter.doFilter(HttpServer.java:1081)
at org.mortbay.jetty.servlet.ServletHandler CachedChain.doFilter(ServletHandler.java:1212)atorg.apache.hadoop.http.NoCacheFilter.doFilter(NoCacheFilter.java:45)atorg.mortbay.jetty.servlet.ServletHandler CachedChain.doFilter(ServletHandler.java:1212)
at org.apache.hadoop.http.NoCacheFilter.doFilter(NoCacheFilter.java:45)
at org.mortbay.jetty.servlet.ServletHandler CachedChain.doFilter(ServletHandler.java:1212)atorg.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)atorg.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)atorg.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)atorg.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)atorg.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)atorg.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)atorg.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)atorg.mortbay.jetty.Server.handle(Server.java:326)atorg.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)atorg.mortbay.jetty.HttpConnection RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Powered by Jetty://


导致这种错误的原因是使用2.2.0版本就废弃的hadoop -namenode -format进行hdfs初始化,应该使用hdfs namenode
-format进行。
解决办法为先停止所有hadoop相关进程,然后使用hdfs namenode -format格式化再重启服务。

重启后产生了新的问题,使用jps查看hadoop进程发现datanode没有启动。以前也遇到过,是因为在配置文件中dfs.name.dir的路径下的/current/VERSION中每次格式化VERSION的clusterID会产生一个新的ID。
解决办法为:
查看hadoop目录下log目录下datanode相关的log文件,

这里写图片描述

找到namenode下面的clusterID,

这里写图片描述

修改dfs.name.dir/current/VERSION 里面的clusterID使二者一致。修改后保存重启服务即可。

这里写图片描述

### 解决方案 在 Hadoop 环境中,`org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "hdfs"` 异常通常表示 Hadoop 无法识别或加载 `hdfs` 文件系统。以下是可能的解决方案及其原因分析: #### 1. **检查 `core-site.xml` 配置** 如果 `core-site.xml` 文件中缺少必要的配置项,Hadoop无法正确初始化 HDFS 文件系统。需要确保以下配置已添加到 Hadoop 客户端的 `core-site.xml` 文件中: ```xml <property> <name>fs.hdfs.impl</name> <value>org.apache.hadoop.hdfs.DistributedFileSystem</value> </property> ``` 此外,还需要设置 HDFS 的默认文件系统 URI: ```xml <property> <name>fs.defaultFS</name> <value>hdfs://<namenode-host>:<namenode-port></value> </property> ``` 其中 `<namenode-host>` 和 `<namenode-port>` 应替换为实际的 NameNode 地址和端口号[^1]。 #### 2. **确保正确的 JAR 包依赖** 缺少必要的 Hadoop JAR 包可能导致此问题。可以通过以下步骤解决: - 检查项目中是否包含以下核心 JAR 包: - `/usr/local/hadoop/share/hadoop/hdfs/` 目录下的所有 JAR 包(排除 `jdiff`, `lib`, `sources`, 和 `webapps` 子目录)。 - `/usr/local/hadoop/share/hadoop/hdfs/lib/` 目录下的所有 JAR 包[^3]。 - 在 Eclipse 或其他 IDE 中,右键单击项目,选择 `Build Path -> Configure Build Path -> Libraries -> Add External JARs`,将上述 JAR 包添加到项目中。 - 如果使用的是 Maven 项目,可以添加以下依赖项: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.1.3</version> </dependency> ``` #### 3. **验证 Hadoop 客户端环境变量** 确保 Hadoop 客户端的环境变量配置正确。以下是最常见的几个环境变量: - `HADOOP_HOME`: 指向 Hadoop 安装目录。 - `PATH`: 包含 `$HADOOP_HOME/bin` 和 `$HADOOP_HOME/sbin`。 - `HADOOP_CONF_DIR`: 指向 Hadoop 配置文件所在的目录(通常为 `$HADOOP_HOME/etc/hadoop`)。 - `JAVA_HOME`: 指向 Java 安装目录。 可以通过以下命令验证环境变量是否正确设置: ```bash echo $HADOOP_HOME echo $JAVA_HOME ``` #### 4. **更新或替换低版本的 JAR 包** 如果使用的 JAR 包版本较低,可能会导致兼容性问题。可以尝试替换为更高版本的 JAR 包。例如: - 替换 `/opt/module/hadoop/share/hadoop/hdfs/lib/` 目录下的旧版 JAR 包为最新版本: ```bash hadoop-annotations-3.1.3.jar hadoop-auth-3.1.3.jar htrace-core4-4.1.0-incubating.jar commons-io-2.5.jar commons-configuration2-2.1.1.jar guava-27.0-jre.jar woodstox-core-5.0.3.jar ``` - 确保这些 JAR 包与 Hadoop 版本一致[^4]。 #### 5. **代码中的显式配置** 在 Java 代码中,可以通过显式配置来避免此问题。例如: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import java.net.URI; public class HdfsTest { public static void main(String[] args) throws Exception { Configuration configuration = new Configuration(); FileSystem fs = FileSystem.get(new URI("hdfs://<namenode-host>:<namenode-port>"), configuration, "<username>"); System.out.println("HDFS FileSystem initialized successfully."); } } ``` 确保 `<namenode-host>`、`<namenode-port>` 和 `<username>` 替换为实际值[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值