关于用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)
.....
很奇怪 不知道为什么 展开
//..................................................................
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)
.....
很奇怪 不知道为什么 展开
展开全部
将这FileSystem hdfs = FileSystem.get(config);
改成FileSystem hdfs = FileSystem.get(URI.create("hdfs://master:9000"),config)
上面那句取得的是本地文件系统对象,改成下面这个才是取得hdfs文件系统对象,当你要操作本地文件对象的时候就要用上面那句取得本地文件对象,我在2.7.4刚开始也是跟你一样的错误,改为下面的就可以了
改成FileSystem hdfs = FileSystem.get(URI.create("hdfs://master:9000"),config)
上面那句取得的是本地文件系统对象,改成下面这个才是取得hdfs文件系统对象,当你要操作本地文件对象的时候就要用上面那句取得本地文件对象,我在2.7.4刚开始也是跟你一样的错误,改为下面的就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个错误是参数不对
第二错误时你没有能够创建目录,不知道是不是没有权限
第二错误时你没有能够创建目录,不知道是不是没有权限
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主我太需要了,我的邮箱是yangmuted@163.com,如果方便发给我,不胜感激。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-07-21
展开全部
貌似权限不够
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询