hadoop上传文件的是报异常

java.io.IOException: File /user/xuexi/input/wc.input._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1547)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3107)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3031)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:724)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodePro
        to colServerSideTranslatorPB.java:492)
	at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlo
        ckingMethod(ClientNamenodeProtocolProtos.java)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)

解决方案:这个问题是防火墙导致的,至于为什么是防火墙的问题,我还没有弄的明白之中的原因;

              使用 systemctl stop firewalld 关闭防火墙,重启一个hadoop,就上传就可以了

### Java 上传文件Hadoop 文件系统的实现 为了将文件上传Hadoop 文件系统 (HDFS),可以利用 Apache Hadoop 提供的 API 来完成这一操作。下面是一个简单的例子,展示了如何编写一段 Java 程序来执行此功能。 #### 使用 Hadoop 客户端库连接并上传文件 首先,在项目中引入必要的依赖项,通常这些依赖可以通过 Maven 或 Gradle 添加: 对于 Maven 用户来说,`pom.xml` 中应加入如下配置: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> ``` 接着是具体的 Java 实现代码片段用于上传文件到指定目录下[^1]: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class FileUploader { public static void putFileToHadoopFSFolder(String user, String localFilePath, List<String> remotePathList) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path src = new Path(localFilePath); // 源路径即本地文件位置 for (String dest : remotePathList){ Path dst = new Path(dest); // 目标路径即远程存储地址 try{ fs.copyFromLocalFile(false, true, src, dst); System.out.println("Successfully uploaded " + localFilePath + " to " + dest); } catch(Exception e){ System.err.println(e.getMessage()); } } fs.close(); // 关闭文件系统对象 } } ``` 这段程序定义了一个名为 `putFileToHadoopFSFolder` 的方法,它接收三个参数:用户名、要上传的本地文件路径以及目标文件夹列表。该函数内部创建了与 HDFS 进行交互所需的配置实例,并调用了相应的接口来进行实际的数据传输工作。 需要注意的是,在 Windows 平台上运行上述代码前需设置环境变量 `HADOOP_HOME` 和 `hadoop.home.dir` ,否则可能会遇到找不到文件异常的情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值