Hadoop2.4.1 HDFS的Java客户端开发

我是在linux的环境下的Eclipse中开发这个程序的,如果你是在windows环境下写这个程序,请自行调整。

第一步:首先我们确定自己的hadoop的hdfs的环境是好的,我们在linux中启动hdfs,然后在web页面上通过URL测试:http://uatciti:50070

第二步:在Linux下打开Eclipse, 写我们的客户端代码。

说明:我们在Linux系统的/usr/local/devtool/java文件下,有JDK的文件。我们希望把这个文件上传到hdfs系统的根目录下的jdk文件夹下面。

package com.npf.hadoop.hdfs;

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSClient {

        public static void main(String[] args) throws Exception {
             loadLocalFile2hdfs();
        }

        /**
         * load a local file to hdfs
         * @throws IOException
         */
        public static void loadLocalFile2hdfs() throws IOException{
                //get a instance of FileSystem
                Configuration conf = new Configuration();
                conf.set("fs.defaultFS", "hdfs://uatciti:9000");
                FileSystem fs = FileSystem.get(conf);

                //get input stream of local file
                FileInputStream input = new FileInputStream("/usr/local/devtool/java/jdk-7u79-linux-i586.rpm");

                //get output stream of dest path
                Path path = new Path("hdfs://uatciti:9000/jdk");
                FSDataOutputStream output = fs.create(path);

                //load a local file to hdfs
                IOUtils.copy(input, output);
                System.out.println("completed");
        }
}


运行这段代码,我们通过访问http://uatciti:50070下查看hdfs系统下的文件,确定我们是否上传成功。

ok,我们已经把本地系统中的一个文件上传到了hdfs系统中去了。

现在我们希望从hdfs系统中根目录下的jdk下载到linux本地系统下的/usr/local/devtoo/java/jdk目录下。

代码如下:

        /**
         * download file from hdfs to local
         * @throws IOException
         */
        public static void downloadFileFromHDFS2Local() throws IOException{
                        //get a instance of FileSystem
                        Configuration conf = new Configuration();
                        conf.set("fs.defaultFS", "hdfs://uatciti:9000");
                        FileSystem fs = FileSystem.get(conf);

                        //get input stream of hdfs file
                        FSDataInputStream input = fs.open(new Path("hdfs://uatciti:9000/jdk"));

                        //get output stream of local file
                        FileOutputStream output = new FileOutputStream("/usr/local/devtool/java/jdk");

                        //download file from hdfs to local
                        IOUtils.copy(input, output);

                        System.out.println("completed");
        }
}

运行这段代码后,查看是否下载成功:

ok,我们看到,这个文件已经下载到Linux本地系统的磁盘中了。我们已经搞定了。

我们通过代码在hdfs系统上创建一个目录: /aa/bb

       /**
         * mkdir
         * @throws IOException
         */
        public static void mkdir() throws IOException{
             //get a instance of FileSystem
             Configuration conf = new Configuration();
             conf.set("fs.defaultFS", "hdfs://uatciti:9000");
             FileSystem fs = FileSystem.get(conf);
             fs.mkdirs(new Path("/aa/bb"));
        }


运行完这段代码,我们可以通过http://uatciti:50070查看。

我们之前的download方法有些复杂,其实hdfs内部已经有了很好的API给我们使用,请看下面的代码。我们是想把/usr/local/devtool/java下面的jdk上传到hdfs的/aa/bb目录下面。

public static void downloadFile2hdfs() throws IOException{
      //get a instance of FileSystem
      Configuration conf = new Configuration();
      conf.set("fs.defaultFS", "hdfs://uatciti:9000");
      FileSystem fs = FileSystem.get(conf);
      fs.copyFromLocalFile(new Path("/usr/local/devtool/java/jdk-7u79-linux-i586.rpm"), new Path("/aa/bb"));
}

运行完这段代码,我们可以通过http://uatciti:50070查看。


 

现在我们想把/aa/bb目录下面的文件全部删除掉已经bb文件夹,ok,请看下面的代码。

 /**
   * delete file
   * @throws IOException
   */
public static void deleteFile() throws IOException{
        //get a instance of FileSystem
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://uatciti:9000");
        FileSystem fs = FileSystem.get(conf);
        //级联删除/aa/bb/目录下的所有 文件
        fs.delete(new Path("/aa/bb"), true);
}

现在我们看到,在根目录下面有一个文件叫做jdk,现在我们的需求是把jdk这个文件重命名为jdknpf。ok,看下面的代码。

public static void renameFilename() throws IOException{
       //get a instance of FileSystem
       Configuration conf = new Configuration();
       conf.set("fs.defaultFS", "hdfs://uatciti:9000");
       FileSystem fs = FileSystem.get(conf);
       fs.rename(new Path("/jdk"), new Path("/jdknpf"));
}


运行完这段代码,我们可以通过http://uatciti:50070查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值