关于用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)
.....
很奇怪 不知道为什么

参考技术A 将这FileSystem hdfs = FileSystem.get(config);
改成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上开一个仓库

点击+号 new repository
建立一个仓库名,我这里是repository
4.设置ssh key:
<1>生成ssh key,先检查是否已经生成密匙
<2> 如果没有生成,使用命令$ ssh-keygen -t rsa -C “github邮箱”来生成,一直点回车键即可。注意看看生成文件的路径在哪。
<3>会在你的相应路径下生成一个.ssh文件夹,里面会有三个文件:id_rsa   id_rsa.pub   known_hosts
<4>打开id_rsa.pub,如果直接打不开可以拖到记事本里打开,然后复制里面的内容。
<5>回到你的github网页:settings->SSH and GPG keys ->new ssh key ->把在pub文件中复制的内容粘贴在key中,填上title可以与库名相同->add ssh key。
<6>接着会跳转到输入密码的界面,输入你的登录密码即可,这样你的ssh key 就设置好了。
 
5.接下来,在自己即将上传的项目文件根目录上,右键 git bash
 

创建新仓库指令:

git init  //把这个目录变成Git可以管理的仓库

git add . 把当前目录所有文件add

git commit -m "提交文件" //把文件提交到仓库

git remote add origin git@github.com:katherinehhh/myproject.git //关联远程仓库,用自己的仓库地址(这里要用你的库的地址)

git push -u origin master  //把本地库的所有内容推送到远程仓库

过程如下:

 

 
 
 完成了!
//第一次上传是要搞这么多东东的了,想着以后再上传就不用搞这么多了,没想到还是会有其他问题出现
 
 
##我的第二次上传项目文件###
在项目文件上右键 点击git bash
在git bash上依次输入:
git init
git add .
git commit -m"my project-2"
git remote add origin git@github.com:katherinehhh/myproject.git
好的,在这就出问题了,显示:remote origin already exists
解决办法: 输入 git remote rm origin
再输 git remote add origin git@github.com:katherinehhh/myproject.git
接着以为就可以了,就输入  :
git push -u origin master
好的,又来问题了,显示:fail to push some refs to "git@github.com:katherinehhh/myproject.git"
解决办法是: 输入git pull --rebase origin master(至于原因是因为REAEMD.md文件不在本地项目中)
再输入:git push -u origin master
 
ok ,这就上传成功了。
 
 
 
 
 
 
 
 

以上是关于关于用java写程序把本地文件上传到HDFS中的问题的主要内容,如果未能解决你的问题,请参考以下文章

ftp提取文件到hdfs

JAVA如何把本地文件上传到服务器。

关于java中的properties的问题

如何用shell脚本上传文件到hdfs

关于把本地项目文件上传到github

分布式文件系统HDFS 练习