• HDFS开发实例


    1、列出HDFS中的文件

     1 package com.hdfs.test;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.InputStreamReader;
     7 import java.net.URI;
     8 import org.apache.hadoop.conf.Configuration;
     9 import org.apache.hadoop.fs.FSDataInputStream;
    10 import org.apache.hadoop.fs.FileStatus;
    11 import org.apache.hadoop.fs.FileSystem;
    12 import org.apache.hadoop.fs.FileUtil;
    13 import org.apache.hadoop.fs.Path;
    14 
    15 public class AccessHdfs {
    16     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
    17         
    18         //以下两句仅用于在windows下访问服务器中的HDFS时,解决特定的错误问题
    19         System.setProperty("hadoop.home.dir", "C:/Users/learn/Desktop/hadoopfiles");
    20         System.setProperty("HADOOP_USER_NAME","hadoop");
    21         
    22         Configuration conf = new Configuration();    
    23         
    24         //conf.set("fs.defaultFS", "hdfs://192.168.1.215:9000");
    25         //FileSystem fS = FileSystem.get(conf);
    26         //如果不在conf中设置,可以这样写:
    27         FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);
    28                 
    29         //列出目录
    30         String dir = "/";
    31         FileStatus[] fileStatus = fS.listStatus(new Path(dir));
    32         Path[] list = FileUtil.stat2Paths(fileStatus);
    33         for(Path path : list){
    34             System.out.println(path.toString());
    35         }
    36         fS.close();                
    37     }
    38             
    39 }

    注:

    1> 如果出现了java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries 这种错误,可以通过设置设置HADOOP_HOME 环境变量来解决,在本例中,即使用System.setProperty("hadoop.home.dir", "C:/Users/learn/Desktop/hadoopfiles");这句代码,除此之外,还需要在设置的路径C:/Users/learn/Desktop/hadoopfiles中建立一个bin文件夹,并从网络上下载winutils.exe文件,放到这个bin文件夹中。至于所设置的路径,不必包含真正的hadoop文件。

    2> System.setProperty("HADOOP_USER_NAME","hadoop");这句用于设置用户名,这是因为在linux中Hadoop系统的所有者被设置为hadoop用户,在windows下访问时可以这样显式的指定,如果没有指定,系统会将windows系统的当前用户作为访问Hadoop系统的用户,出现类似Permission denied的错误。

    3> 当打包成jar文件时,以上两句是不需要的。

    4> FileSystem用来获取文件系统的一个实例,FileStatus包含了文件中的元数据

    2、创建目录与删除目录

     1 Configuration conf = new Configuration();    
     2 FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);
     3                 
     4 //创建目录
     5 fS.mkdirs(new Path("TestData"));
     6 fS.mkdirs(new Path("/DataWorld"));
     7         
     8 //删除目录,如果是空的路径,可以忽略第二个参数
     9 fS.delete(new Path("TestData"),true);    
    10         
    11 fS.close();        

     注意上传的路径,如果没有指定根目录,则是/user/用户名/目录名

    3、上传文件与读取文件

     1 Configuration conf = new Configuration();            
     2 FileSystem fS = FileSystem.get(URI.create("hdfs://192.168.1.215:9000"), conf);        
     3 
     4 //上传文件
     5 Path src = new Path("C:/Users/learn/Desktop/hadoopfiles/Test.txt");
     6 Path dst = new Path("TestData");
     7 fS.copyFromLocalFile(src, dst);        
     8         
     9 //读取文件
    10 String filedir = "TestData/Test.txt";
    11 FSDataInputStream file = fS.open(new Path(filedir));
    12 BufferedReader in = null;
    13 String line;
    14 in =new BufferedReader(new InputStreamReader(file, "UTF-8"));
    15 while ((line = in.readLine()) != null) {
    16     System.out.println(line);            
    17 }
    18 if(in !=null){
    19     in.close();
    20 }

     也可以打包成jar文件运行

  • 相关阅读:
    Elasticsearch 入门教程
    Spring Boot集成JasperReports生成PDF文档
    Java程序员须知的七个日志管理工具
    vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例
    spring boot项目在外部tomcat环境下部署
    linux 如何正确的关闭mongodb
    Centos7下yum安装配置nginx与php
    Centos7 搭建lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)
    CentOS7安装MySQL
    搭建MySQL高可用负载均衡集群(转)
  • 原文地址:https://www.cnblogs.com/learn21cn/p/6127896.html
Copyright © 2020-2023  润新知