关于用java写程序把本地文件上传到HDFS中的问题 10

这是我的代码和在网上看到的差不多//..................................................................i... 这是我的代码 和在网上看到的差不多

//..................................................................

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class File_Operation {

/*
* upload the local file to the hds
* notice that the path is full like /tmp/test.c
*/
public static void uploadLocalFile2HDFS(String s, String d)
throws IOException
{
Configuration config = new Configuration();
FileSystem hdfs = FileSystem.get(config);

Path src = new Path(s);
Path dst = new Path(d);

hdfs.copyFromLocalFile(src, dst);

hdfs.close();
}

public static void main(String[] args) throws Exception {

//.....................本地文件上传到HDFS.........................
String localsrc="/home/hadoop/origin/test0";
String hdfsdst="hdfs://master:9000/user/input0/test0";
uploadLocalFile2HDFS(localsrc,hdfsdst);

}
}

//....................................................................
编译时报错:

Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://master:9000/user/input0/test0, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:648)
at org.apache.hadoop.fs.FileUtil.checkDest(FileUtil.java:334)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:190)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:142)
at org.apache.hadoop.fs.LocalFileSystem.copyFromLocalFile(LocalFileSystem.java:55)
at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:1137)
at File_Operation.uploadLocalFile2HDFS(File_Operation.java:25)
at File_Operation.main(File_Operation.java:37)

如果我把HDFS中的目标文件的路径改成
String hdfsdst="/user/input0/test0";
又报这样的错误:
Exception in thread "main" java.io.IOException: Mkdirs failed to create /user/input0
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:366)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:484)
.....
很奇怪 不知道为什么
展开
 我来答
gp_vip2017
2017-12-08
知道答主
回答量:1
采纳率:0%
帮助的人:929
展开全部
将这FileSystem hdfs = FileSystem.get(config);
改成FileSystem hdfs = FileSystem.get(URI.create("hdfs://master:9000"),config)
上面那句取得的是本地文件系统对象,改成下面这个才是取得hdfs文件系统对象,当你要操作本地文件对象的时候就要用上面那句取得本地文件对象,我在2.7.4刚开始也是跟你一样的错误,改为下面的就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BUG弄潮儿
2012-07-22 · TA获得超过210个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:203万
展开全部
第一个错误是参数不对
第二错误时你没有能够创建目录,不知道是不是没有权限
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangmuted
2013-02-16
知道答主
回答量:9
采纳率:0%
帮助的人:1.4万
展开全部
楼主我太需要了,我的邮箱是yangmuted@163.com,如果方便发给我,不胜感激。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suiyuan_2
2012-07-23
知道答主
回答量:48
采纳率:0%
帮助的人:12.3万
展开全部
做新手任务,路过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-21
展开全部
貌似权限不够
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 4条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式