一、开发准备工作

1、相关的jar包

Jar包的可以从hadoop所在位置的 common的文件夹里面获得,这里的路径为:

/usr/local/hadoop-2.7.1/share/hadoop/common

hdfs java上传文件夹 java上传文件到hdfs_git将本地文件上传到gitlab


二、使用Java的API将本地文件上传到HDFS

import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class HDFUploadFile {
 public static void main(String[] args)throws Exception {
 //本地文件uri
 String localSrc = args[0];
 //hdfs文件uri
 String dst = args[1];
 //获取输入流
 InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
 //创建hadoop配置对象
 Configuration conf = new Configuration();
 //创建hadoop文件系统对象
 FileSystem fs = FileSystem.get(URI.create(dst), conf);
 //创建输出流
 OutputStream out = fs.create(new Path(dst), new Progressable() {
 public void progress(){
 System.out.print(".");
 }
 });
 //将输入流拷贝到输出流
 IOUtils.copyBytes(in, out,4096,true);
 }
}

将上述的类使用Eclipse导出jar文件,以便在hadoop环境中执行,步骤如下:

步骤一 右键点击项目“hdfsDemo”,在弹出的菜单中选择“Export”


hdfs java上传文件夹 java上传文件到hdfs_hdfs java上传文件夹_02


步骤二 在弹出的对话框中选择JavaàJAR fileàNext,如下图所示:


hdfs java上传文件夹 java上传文件到hdfs_HDFS_03


别忘记选主类:


hdfs java上传文件夹 java上传文件到hdfs_hdfs java上传文件夹_04


在/home目录下建立个hdfs.log测试文件,并上传到HDFS的/user/下,以便于测试,操作如下:

(1)建立hdfs.log测试文件


hdfs java上传文件夹 java上传文件到hdfs_hdfs java上传文件夹_05


hdfs java上传文件夹 java上传文件到hdfs_hadoop_06


(2)将hdfs.log上传到HDFS的/user下:


hdfs java上传文件夹 java上传文件到hdfs_HDFS_07


(3)使用命令查看已经上传的文件


hdfs java上传文件夹 java上传文件到hdfs_HDFS_08


在hadoop环境下运行HDFSUploadFile类:

(1)情形1:如果本地文件hdfs.log文件存在,并且对应的HDFS上/user/hdfs.log也存在

将/home/hdfs.log内容修改如下:


hdfs java上传文件夹 java上传文件到hdfs_hdfs_09


在/home路径下执行如下命令:

hadoop jar hdfs.jar hdfs.log /user/hdfs.log

其中hdfs.jar是上述过程导出的jar文件, hdfs.log当前目录下路径的本地文件,在程序中args[0]参数指定的,/user/hdfs.log是HDFS路径。那么上传的是本地最新的文件,操作如下:


hdfs java上传文件夹 java上传文件到hdfs_HDFS_10


(2)情形2:如果本地文件(例如goods.log)在对应的HDFS上的/user没有

在/home下新创建个goods.log文件


hdfs java上传文件夹 java上传文件到hdfs_hadoop_11


在/home路径下执行如下命令:

hadoop jar hdfs.jar goods.log /user/goods.log


hdfs java上传文件夹 java上传文件到hdfs_hadoop_12