本帖最后由 pig2 于 2014-2-19 00:13 编辑
阅读本文可以带着下面问题:
1.对比下面两种操作HDFS文件的不同之处?
一、hadoop API 上传文件
Hadoop的API中的普通copy的实现原理是什么?
- import java.io.BufferedInputStream;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- 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;
- import org.apache.hadoop.util.Progressable;// vv FileCopyWithProgress
- public class FileCopyWithProgress {
- public static void main(String[] args) throws Exception {
- String localSrc = args[0];
- String dst = args[1];
-
- InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
- //建立一个本地的InputStream
- Configuration conf = new Configuration();//建立接口
- FileSystem fs = FileSystem.get(URI.create(dst), conf);//创建文件系统实例
- OutputStream out = fs.create(new Path(dst), new Progressable() {
- public void progress() {
- System.out.print(".");
- }//通过实例创建管道 create方法返回的是FSDataOutputStream对象
- });
-
- IOUtils.copyBytes(in, out, 4096, true);//通过管道进行写入
- }
- }
复制代码
上面的作用是把本地文件copy到hdfs文件中
下面还有一种方式,可以参考:- package com.java.api.hdfs;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileStatus;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- /***
- * 上传本地文件到
- * HDFS上
- *
- * **/
- public static void uploadFile()throws Exception{
- //加载默认配置
- FileSystem fs=FileSystem.get(conf);
- //本地文件
- Path src =new Path("D:\\6");
- //HDFS为止
- Path dst =new Path("hdfs://10.2.143.5:9090/root/");
- try {
- fs.copyFromLocalFile(src, dst);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.out.println("上传成功........");
-
- fs.close();//释放资源
-
-
- }
-
- }
复制代码
|