上传--下载HDFS文件并指定文件物理块的大小

使用hdfs的api接口分别实现从本地上传文件到集群和从集群下载文件到本地。

1)上传文件主要是使用FileSystem类的copyFromLocalFile()方法来实现,另外我们上传文件时可以指定以多大的物理块来存储此文件,使用conf.set("dfs.block.size","8388608")设置物理块大小是8M,此方法第二个参数的单位是字节。另外编译此代码除了需要使用hadoop-core-1.2.1.jar,还需要使用

commons-configuration-1.6.jar包。完整代码如下:

/**
 * Created with IntelliJ IDEA.
 * User: hadoop
 * Date: 16-3-13
 * Time: 下午6:31
 * To change this template use File | Settings | File Templates.
 */

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;

public class uploadFile {
    public static void main(String[] args) throws IOException {
        Configuration conf=new Configuration();//只读取了core.xml文件
        //conf.addResource("hdfs-default.xml");
        //Long x=conf.get("dfs.block.size") ;
        conf.set("dfs.block.size", args[0]);//第二个参数的单位是字节,并且是字符串形式
         FileSystem fs=FileSystem.get(conf);
        Path src=new Path(args[1]);//参数是本地文件的绝对路径的字符串形式
        Path dst=new Path(args[2]);
        fs.copyFromLocalFile(src,dst);
        System.out.println("upload to:"+conf.get("fs.default.name"));
    }
}

例如将本地test目录下的F1k1k文件上传到集群,所使用的命令就是:

hadoop jar uploadFile.jar uploadFile 8388608 /home/hadoop/test/F1k1k /data0313

2)从集群下载文件类似,只需要将copyFromLocalFile()方法改为copyToLocalFile(),只不过代码中src变成了集群路径,dst是本地路径

如下所示:

 1 /**
 2  * Created with IntelliJ IDEA.
 3  * User: hadoop
 4  * Date: 16-3-13
 5  * Time: 下午6:31
 6  * To change this template use File | Settings | File Templates.
 7  */
 8 
 9 import org.apache.hadoop.conf.Configuration;
10 import org.apache.hadoop.fs.FileSystem;
11 import org.apache.hadoop.fs.Path;
12 
13 import java.io.IOException;
14 
15 public class uploadFile {
16 
17     public static void main(String[] args) throws IOException {
18         Configuration conf=new Configuration();
19         //conf.addResource("hdfs-default.xml");
20         //Long x=conf.get("dfs.block.size") ;
21         conf.set("dfs.block.size", args[0]);
22          FileSystem fs=FileSystem.get(conf);
23         Path src=new Path(args[1]);//src是集群路径
24         Path dst=new Path(args[2]);//dst是本地路径
25         fs.copyToLocalFile(src,dst);
26         System.out.println("upload to:"+conf.get("fs.default.name"));
27     }
28 }

 

posted @ 2016-03-13 20:05  lz3018  阅读(2293)  评论(0编辑  收藏  举报