JavaAPI操作HDFS文件系统报错,Connection refused

原料:客户端WIN10,IDAE;服务端CentOS6.9;

在WIN10系统下使用IDEA操作部HDFS系统时报错java.net.ConnectException:Connection refused:no,我们要首先检查以下设置是否正确(具体每一步不正确的解决方案在后边):

1.虚拟机的防火墙需要关闭

2.虚拟机和物理机需要互相ping通。

3.虚拟机HDFS的Hadoop目录下的etc/hadoop/core-site.xml配置正确

4.物理机C:\Windows\System32\drivers\etc\hosts需要配置虚拟机ip和主机名的映射

在以上几步均正确的情况下,依然报错,那么检查下虚拟机的主机名是不是localhost(我当时把localhost改成hadoop之后问题解决),如果是的话,建议换成别的,但是这个问题我也没办法解释。我是从这篇网志中找到的思路,感谢

解决这个问题是个漫长的过程,踩过很多坑,现在想想有好几次都在解决问题的边缘徘徊。不过对于一个没接触过Linux系统的人来说也是件好事,这让我在百度的过程中熟悉了一些操作,比如说如何关闭防火墙...现在,我可以静下来,以时间为顺序,从头梳理我的踩坑之路,纪念我修bug的美好假期,也希望可以对你有所帮助。

1.CentOS6.9系统主机名变成bogon,改回localhost

2.

<think>好的,我现在需要回答用户关于HDFS Shell操作和Java API操作的实验目的、环境及任务的问题,同时提供操作指南。用户的环境是Ubuntu16.04、Hadoop 2.7.1和JDK 8。我需要结合之前的引用内容,确保回答结构清晰,符合用户要求。 首先,确定实验目的。HDFS Shell和Java API的实验通常是为了让学习者掌握两种不同的HDFS操作方式,理解命令行与编程接口的区别和应用场景。Shell适用于简单任务和脚本,而Java API适合集成到应用程序中。 接下来是实验环境。根据引用[3],用户需要配置Hadoop环境变量,设置HADOOP_HOME和JAVA_HOME。引用[4]显示了Hadoop的安装目录结构,可能需要用到bin和sbin目录下的脚本。同时,JDK 8的路径如引用[2]和[3]提到的/usr/lib/jvm/java-8-openjdk-amd64,需要确认是否正确配置。 实验任务部分应包括Shell命令和Java API的具体操作。Shell部分可以包括文件上传下载、目录管理等命令。Java API部分需要创建Java项目,如引用[2]中的HDFSExample项目,编写代码连接HDFS并执行操作。要确保代码示例正确,比如使用Configuration和FileSystem类。 需要检查引用内容是否有其他相关信息。引用[1]提到了YARN和Container,可能与实验关联不大,但需要确保Hadoop服务如NameNode和DataNode已启动。引用[3]的环境变量配置是关键,避免路径错误导致命令无法执行。 用户可能遇到的常见问题包括环境变量未生效、Hadoop服务未启动、Java类路径错误等。应在指南中提示检查这些点,例如使用hdfs dfsadmin -report确认HDFS状态,或检查Java项目的库依赖。 最后,生成相关问题时要围绕实验内容,如Shell与API的区别、环境配置问题、异常处理等。确保问题有助于用户深入理解。</think>### HDFS Shell与Java API操作实验指南 #### 一、实验目的 1. 掌握HDFS Shell常用命令,实现文件系统管理(如目录创建、文件上传下载等)[^1] 2. 熟悉通过Java API编程接口操作HDFS,理解分布式文件系统的编程模式[^2] 3. 对比Shell交互式操作与API程序化操作的适用场景差异 #### 二、实验环境配置 | 组件 | 版本/配置 | 验证方式 | |------------|--------------------------|----------------------------| | OS | Ubuntu 16.04 LTS | `lsb_release -a` | | Hadoop | 2.7.1(伪分布式模式) | `hadoop version` | | JDK | OpenJDK 8 | `java -version` | | 环境变量 | 需包含以下配置(参考[^3]): ```bash export HADOOP_HOME=/opt/hadoop/hadoop export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$PATH:$HADOOP_HOME/bin ``` #### 三、实验任务详解 **任务1:HDFS Shell操作** 1. 启动HDFS服务: ```bash cd $HADOOP_HOME/sbin ./start-dfs.sh ``` 2. 基础文件操作: ```bash hdfs dfs -mkdir /user # 创建目录 hdfs dfs -put local.txt /user/ # 上传文件 hdfs dfs -cat /user/local.txt # 查看内容 hdfs dfs -get /user/local.txt # 下载文件 ``` 3. 高级功能验证: ```bash hdfs dfsadmin -report # 查看存储报告 hdfs dfs -chmod 755 /user/test # 修改权限 ``` **任务2:Java API操作** 1. 创建Eclipse项目(参考[^2]): - 工程名:`HDFSExample` - 添加Hadoop依赖库(`$HADOOP_HOME/share/hadoop/common/*.jar`) 2. 编写文件上传示例: ```java public class HDFSUpload { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); FileSystem fs = FileSystem.get(conf); Path localPath = new Path("localfile.txt"); Path hdfsPath = new Path("/user/uploaded.txt"); fs.copyFromLocalFile(localPath, hdfsPath); System.out.println("文件上传成功"); } } ``` 3. 实现文件列表查询: ```java FileStatus[] status = fs.listStatus(new Path("/user")); for(FileStatus s : status) { System.out.println("文件名:" + s.getPath().getName()); System.out.println("块大小:" + s.getBlockSize()); } ``` #### 四、关键问题排查 1. 若出现`Connection refused`错误: - 检查NameNode是否启动:`jps`应包含`NameNode`进程 - 验证核心配置文件: ```xml <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> ``` 2. Java API操作时报`No FileSystem for scheme`: - 确认`core-site.xml`已打包到项目资源目录 - 检查Maven依赖配置(若使用): ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.1</version> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值