转载

本地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 }

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

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

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

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

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

正文到此结束
Loading...