Java操作HDFS(Linux) 学习篇(二)

java操作Linux系统上的HDFS文件系统

一、首先:在Linux上搭建HDFS伪分布式环境,启动命令 ------>sh   start-all.sh,显示启动成功界面如下:

二 、win 上Java开发环境使用的是IDEA ,Java远程操作HDFS,在pom中用到的依赖如下(因为hadoop用的是2.7.1的版本所用这里我也用的是2.7.1):

  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <version>2.7.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>2.7.1</version>
    </dependency>

    <dependency>
      <groupId>commons-configuration</groupId>
      <artifactId>commons-configuration</artifactId>
      <version>1.9</version>
    </dependency>
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.5</version>
    </dependency>

三、新建一个hdfstest类

实现文件上传,代码如下:

public class Hdfs { 
static FileSystem fs =null;
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://lxp:9000/");
        try {
            fs  = FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        try {
            upload();//文件上传
         /*   download();//文件下载*/
         /*   mkdir();//创建文件夹*/
          /* rm();//删除文件夹或者文件*/
           /*  listFiles();//查看文件信息*/
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*上传文件*/
    public  static void upload() throws Exception{
        fs.copyFromLocalFile(new Path("D:/lxp.txt"), new Path("hdfs://lxp:9000/ll/xx/pp/lxppppp.txt"));
    }
}

解析:

1. Configuration获取Hadoop配置文件的信息。
2. conf.set("fs.defaultFS","hdfs://lxp:9000/")可以对hadoop的配置文件("core-site.xml")信息手动修改,会覆盖掉从配置文件中读取的信息;
3. FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root"); root用户为登录Linux系统的登录用户;

实现文件下载,代码如下:

 /*下载文件*/
    public static void download() throws IOException {
        fs.copyToLocalFile(new Path("hdfs://lxp:9000/aa/lxppppp.txt"),new Path("D://lxp2.txt"));

    }

实现文件查看,代码如下:

  /*查看文件信息*/
    public static void  listFiles() throws IOException {
     FileStatus[] listStatus = fs.listStatus(new Path("/")); 
     for(FileStatus status : listStatus){
         String  fileName= status.getPath().getName();
         System.out.println(fileName);
     }

    }

解析:

1.  listStatus可以列出文件和文件夹的信息

2.  listFiles只可以获取文件

实现文件夹创建,代码如下:

  /*创建文件夹*/
    public static void mkdir() throws IOException {
    fs.mkdirs(new Path("/ll/xx/pp"));
    }

解析:

1.    fs.mkdirs(new Path("/ll/xx/pp"));  如果父目录不存在,也会一起创建。

实现文件或者文件夹的删除,代码如下:

 /*删除文件或者文件夹*/
    public static void  rm() throws IOException {
        fs.delete(new Path("/aa"),true);
    }

注意:

  一、 fs  = FileSystem.get(new URI("hdfs://lxp:9000/"),conf,"root");  要与hadoop配置文件(“”core-site.xml“”)中的主机名相同(使用的ssh远程连接工具,没敲命令直接打开了,偷懒了。。。。)

二、如下错误(不认识主机名):

解决办法:

1.进入到C盘路径:C:\Windows\System32\drivers\etc

2.在hosts文件末尾添加如下信息:

192.168.1.220    master

192.168.1.225    no1

192.168.1.226    no2

192.168.1.227    no3

三、在这个问题上浪费的时间比较长,所以需要特别注意!!!关闭Linux的防火墙!不然会一直报连接超时。。。

猜你喜欢

转载自blog.csdn.net/qq_36189144/article/details/81159510