关于用java写程序把本地文件上传到HDFS中的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于用java写程序把本地文件上传到HDFS中的问题相关的知识,希望对你有一定的参考价值。
这是我的代码 和在网上看到的差不多
//..................................................................
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(URI.create("hdfs://master:9000"),config)
上面那句取得的是本地文件系统对象,改成下面这个才是取得hdfs文件系统对象,当你要操作本地文件对象的时候就要用上面那句取得本地文件对象,我在2.7.4刚开始也是跟你一样的错误,改为下面的就可以了 参考技术B 第一个错误是参数不对
第二错误时你没有能够创建目录,不知道是不是没有权限 参考技术C 楼主我太需要了,我的邮箱是yangmuted@163.com,如果方便发给我,不胜感激。 参考技术D 做新手任务,路过 第5个回答 2012-07-21 貌似权限不够
关于把本地项目文件上传到github
真的超级无奈,百度上查了好久才搞定了把自己的文件上传到github上,多久?几个小时<摊手>
于是得赶紧记录下来,以备不时之需,怕自己又忘了
1首先得安装git到自己的电脑上,去官网。
2在github上注册个账号,要记住自己的密码,账号,邮箱。
3.绑定用户:
打开Git Bash.exe,使用命令
$git config --global user.name "用户"
$git config --global user.email "邮箱"
注:
1)这个用户和邮箱就是github注册的账号和邮箱
这些都很简单就不详细写了
3在自己的githu上开一个仓库
创建新仓库指令:
git init //把这个目录变成Git可以管理的仓库
git add . 把当前目录所有文件add
git commit -m "提交文件" //把文件提交到仓库
git remote add origin git@github.com:katherinehhh/myproject.git //关联远程仓库,用自己的仓库地址(这里要用你的库的地址)
git push -u origin master //把本地库的所有内容推送到远程仓库
以上是关于关于用java写程序把本地文件上传到HDFS中的问题的主要内容,如果未能解决你的问题,请参考以下文章