• 本地Eclipse连接HDFS进行简单的文件操作


           昨天总结了一点自己在搭建Hadoop完全分布式环境过程中遇到的几个小问题以及解决方案,今天在搭建成功的环境中进行了简单的文件操作,包括:文件目录的创建、文件的创建、本地文件的上传、文件的重命名、文件的删除以及其他几个关于文件的操作,希望对初学的练习者有所帮助。

      1 package org.apache.hadoop.examples;
      2 
      3 
      4 import java.io.BufferedOutputStream;
      5 import java.io.IOException;
      6 import java.net.URI;
      7 import java.text.SimpleDateFormat;
      8 import java.util.Date;
      9 
     10 import org.apache.hadoop.conf.Configuration;
     11 import org.apache.hadoop.fs.BlockLocation;
     12 import org.apache.hadoop.fs.FSDataOutputStream;
     13 import org.apache.hadoop.fs.FileStatus;
     14 import org.apache.hadoop.fs.FileSystem;
     15 import org.apache.hadoop.fs.Path;
     16 import org.apache.hadoop.hdfs.DistributedFileSystem;
     17 import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
     18 import org.junit.Before;
     19 import org.junit.Test;
     20 
     21 public class FileDemo {
     22     private  Configuration conf = new Configuration();//这里创建conf对象有一个默认参数,boolean loadDefaults,默认为true
     23     private String rootPath=new String("hdfs://192.168.56.10:9000/");
     24     private FileSystem coreSys=null;
     25     /**
     26      * 每次执行之前初始化操作,初始化FileSystem核心对象
     27      */
     28     @Before
     29     public void iniFileSystemObject(){
     30         try {
     31             coreSys=FileSystem.get(URI.create(rootPath), conf);
     32         } catch (IOException e) {
     33             System.out.println("初始化HDFS核心文件对象失败:"+e.getLocalizedMessage());
     34         }
     35     }
     36     /**
     37      * 在HDFS上创建文件目录
     38      */
     39     @Test
     40     public void createDirOnHDFS(){
     41            Path demoDir=new Path(rootPath+"demoDir");
     42            boolean isSuccess=true;
     43            try {
     44                isSuccess=coreSys.mkdirs(demoDir);
     45            } catch (IOException e) {
     46                isSuccess=false;
     47            }
     48            System.out.println(isSuccess?"目录创建成功!":"目录创建失败!");
     49            
     50     }
     51     /**
     52      * 在HDFS上创建文件
     53      * @throws Exception 
     54      */
     55     @Test
     56     public void createFile() throws Exception{
     57                 Path hdfsPath = new Path(rootPath + "user/hdfsupload/createDemoFile");
     58                 System.out.println(coreSys.getHomeDirectory());
     59                 String content = "Hello hadoop,this is first time that I create file on hdfs";
     60                 FSDataOutputStream fsout = coreSys.create(hdfsPath);
     61                 BufferedOutputStream bout = new BufferedOutputStream(fsout);
     62                 bout.write(content.getBytes(), 0, content.getBytes().length);
     63                 bout.close();
     64                 fsout.close();
     65                 System.out.println("文件创建完毕!");
     66     }
     67     /**
     68      * 从本地上传任意文件到服务器HDFS环境
     69      * @throws Exception
     70      */
     71     @Test
     72     public void uploadFile() throws Exception{
     73          Configuration conf = new Configuration();
     74          Path remotePath=new Path(rootPath+"user/");
     75          coreSys.copyFromLocalFile(new Path("D:\VirtualBox\Users"), remotePath);
     76          System.out.println("Upload to:"+conf.get("fs.default.name"));
     77          FileStatus [] files=coreSys.listStatus(remotePath);
     78          for(FileStatus file:files){
     79              System.out.println(file.getPath().toString());
     80          }
     81     }
     82     /**
     83      * 重命名文件名
     84      */
     85     @Test
     86     public void renameFile(){
     87         Path oldFileName=new Path(rootPath+"user/hdfsupload/createDemoFile");
     88         Path newFileName=new Path(rootPath+"user/hdfsupload/renameDemoFile");
     89         boolean isSuccess=true;
     90         try {
     91             isSuccess=coreSys.rename(oldFileName, newFileName);
     92         } catch (IOException e) {
     93              isSuccess=false;
     94         }
     95         System.out.println(isSuccess?"重命名成功!":"重命名失败!");
     96     }
     97     /**
     98      * 删除文件
     99      */
    100     @Test
    101     public void deleteFile(){
    102         Path deleteFile=new Path(rootPath+"user/hdfsupload/job.jar");
    103         boolean isSuccess=true;
    104         try {
    105             isSuccess=coreSys.delete(deleteFile, false);
    106         } catch (IOException e) {
    107             isSuccess=false;
    108         }
    109         System.out.println(isSuccess?"删除成功!":"删除失败!");
    110     }
    111     /**
    112      * 查找某个文件是否存在
    113      */
    114     @Test
    115     public void findFileIsExit(){
    116           Path checkFile=new Path(rootPath+"user/hdfsupload/job.jar");
    117           boolean isExit=true;
    118           try {
    119               isExit=coreSys.exists(checkFile);
    120             } catch (IOException e) {
    121                 isExit=false;
    122            }
    123         System.out.println(isExit?"文件存在!":"文件不存在!");
    124     }
    125     /**
    126      * 查看某个文件的最后修改时间
    127      * @throws IOException 
    128      */
    129     @Test
    130     public void watchFileLastModifyTime() throws IOException{
    131          Path targetFile=new Path(rootPath+"user/hdfsupload/renameDemoFile");
    132          FileStatus fileStatus=coreSys.getFileStatus(targetFile);
    133          Long lastTime=fileStatus.getModificationTime();
    134          Date date=new Date(lastTime);
    135          SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    136          System.err.println("文件的最后修改时间为:"+format.format(date));
    137     }
    138     /**
    139      * 获取某个路径下面的所有文件
    140      * @throws IOException 
    141      */
    142     @Test
    143     public void getUnderDirAllFile() throws IOException{
    144         Path targetDir=new Path(rootPath+"user/hdfsupload/");
    145         FileStatus []fileStatus=coreSys.listStatus(targetDir);
    146         for(FileStatus file:fileStatus){
    147             System.out.println(file.getPath()+"--"+file.getGroup()+"--"+file.getBlockSize()+"--"+file.getLen()+"--"+file.getModificationTime()+"--"+file.getOwner());
    148         }
    149     }
    150     /**
    151      * 查看某个文件在HDFS集群的位置
    152      * @throws IOException 
    153      */
    154     @Test
    155     public void findLocationOnHadoop() throws IOException{
    156         Path targetFile=new Path(rootPath+"user/hdfsupload/AA.txt");
    157         FileStatus fileStaus=coreSys.getFileStatus(targetFile);
    158         BlockLocation []bloLocations=coreSys.getFileBlockLocations(fileStaus, 0, fileStaus.getLen());
    159         for(int i=0;i<bloLocations.length;i++){
    160             System.out.println("block_"+i+"_location:"+bloLocations[i].getHosts()[0]);
    161         }
    162         
    163     }
    164     /**
    165      * 获取集群上结点的信息
    166      * @throws IOException 
    167      */
    168     @Test
    169     public void getNodeMsgHdfs() throws IOException{
    170          DistributedFileSystem distributedFileSystem=(DistributedFileSystem) coreSys;
    171          DatanodeInfo []dataInfos=distributedFileSystem.getDataNodeStats();
    172          for(int j=0;j<dataInfos.length;j++){
    173              System.out.println("DataNode_"+j+"_Name:"+dataInfos[j].getHostName()+"--->"+dataInfos[j].getDatanodeReport()+"-->"+
    174             dataInfos[j].getDfsUsedPercent()+"-->"+dataInfos[j].getLevel());
    175          }
    176     }
    177     
    178 }

     

  • 相关阅读:
    [ios][swift]提示框,并自动消失
    [ios][switf]页面跳转
    [ios][swift]UIButton
    [ios][swift]文本框UITextField用法
    html分割线
    html里 调整字间距
    php数字补零的两种方法
    PHP格式化数字和SMARTY格式化数字的方法
    CSS控制文字,超出部分显示省略号
    指定DIV局部刷新的简单实现,很简单,但是网上搜到的大部分都很复杂
  • 原文地址:https://www.cnblogs.com/ljhoracle/p/4966980.html
Copyright © 2020-2023  润新知