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文件夹下面。

<span style="font-size:14px;">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");
        }
}
</span></span>

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

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

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

代码如下:

<span style="font-size:14px;">        /**
         * 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");
        }
}</span>

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

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

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

<span style="font-size:14px;">       /**
         * 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"));
        }
</span>

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

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

<span style="font-size:14px;">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"));
}
</span></span>

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

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

<span style="font-size:14px;"> /**
   * 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);
}
</span></span>

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

<span style="font-size:14px;">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"));
}
</span>

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

时间: 2024-08-08 02:58:16

Hadoop2.4.1 HDFS的Java客户端开发的相关文章

HDFS的JAVA客户端编写

HDFS的shell操作很简单,直接查看文档就可以,和Linux指令类似,下面简单总结一下HDFS的JAVA客户端编写. 如图建立工程,其中客户端放在hdfs包下面: 需要导包,在hadoop的share文件夹下面,里面会找到不同的jar包.我把我的贴出来供大家参考: 剩下的就是编写客户端代码了.在Linux下面编写不会有那么多问题,但是在windows下面会莫名其妙各种错误,下面会提到. 首先看core-site.xml文件: <?xml version="1.0" encod

[HDFS_4] HDFS 的 Java 应用开发

0. 说明 在 IDEA下 进行 HDFS 的 Java 应用开发 通过编写代码实现对 HDFS 的读写操作 1. 流程 1.1 在项目下新建 Moudle 略 1.2 为 Moudle 添加 Maven 框架支持 略 1.3 添加 Maven 依赖 <dependencies> <!-- Hadoop Client依赖 --> <dependency> <groupId>org.apache.hadoop</groupId> <artif

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

一脸懵逼学习hadoop之HDFS的java客户端编写

1:eclipse创建一个项目,然后导入对应的jar包: 鼠标右击项目,点击properties或者alt+enter快捷键--->java build path--->libraries--->add library--->user library--->next--->user libraries--->new--->hdfsLib(根据自己的需要填写)--->add external jars(添加自己的需求包): 2:开始添加自己的需求包,路径

HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)

1.通过java.net.URL实现屏幕显示demo1文件的内容 1 package Hdfs; 2 import java.io.InputStream; 3 import java.net.URL; 4 import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; 5 import org.apache.hadoop.io.IOUtils; 6 7 public class JarDemo { 8 static{ 9 URL.setURLStr

hdfs的Java Api开发

1.创建maven工程并导入jar包 jdk使用1.8.maven3.x版本 pom.xml添加一下内容 <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories> <dep

HBase的java客户端测试(一)---DDL操作

测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node "date -s '2017-12-30 21:32:30'";done [slave各节点启动zookeeper集群:] cd /software/zookeeper-3.4.10/bin/ && ./zkServer.sh start && cd - &&

HBase的java客户端测试(二)---DML操作

测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node "date -s '2017-12-30 21:32:30'";done [slave各节点启动zookeeper集群:] cd /software/zookeeper-3.4.10/bin/ && ./zkServer.sh start && cd - &&

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s