1. 程式人生 > >HDFS操作的Java API

HDFS操作的Java API

一、環境搭建

  1. 環境變數的配置HADOOP_HONE
  2. 把HADOOP_HOME的bin新增到PATH
  3. 許可權問題:新增HADOOP_USER_NAME=root環境變數

二、Eclipse的配置

  1. 在Eclipse安裝目錄下dropins\plugins資料夾內新增如下hadoop-eclipse-plugin.jar包
  2. 重啟Eclipse2.重啟Eclipse
  3. 匯入工程必需的jar包
  4. 替換工程對應的Hadoop包下的bin資料夾,使其方便操作
  5. 配置,如下:

配置成功如下在這裡插入圖片描述

找到Map/Reduce Locations

在這裡插入圖片描述 在這裡插入圖片描述

在這裡插入圖片描述

最後的配置

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

配置成功後

在這裡插入圖片描述

三、JavaAPI程式碼

public
class TestHDFS { public static void main(String[] args) throws IOException { //操作HDFS之前得先建立配置物件 Configuration conf = new Configuration(true); //建立操作HDFS的物件 FileSystem fs = FileSystem.get(conf); //檢視檔案系統的內容 List list = listFileSystem(fs,"/"); //建立資料夾 createDir(fs,"/test/abc"); //上傳檔案 uploadFileToHDFS
(fs,"d:/wc","/test/abc/"); //下載檔案 downLoadFileFromHDFS(fs,"/test/abc/wc","d:/"); //刪除..... //重新命名 renameFile(fs,"/test/abc/wc","/test/abc/Angelababy"); //內部移動 內部複製 innerCopyAndMoveFile(fs,conf,"/test/abc/Angelababy","/"); //建立一個新檔案 createNewFile(fs,"/test/abc/hanhong"); //寫檔案 writeToHDFSFile(
fs,"/test/abc/hanhong","hello world"); //追加寫 appendToHDFSFile(fs,"/test/abc/hanhong","\nhello world"); //讀檔案內容 readFromHDFSFile(fs,"/test/abc/hanhong"); //獲取資料的位置 getFileLocation(fs,"/install.log"); } private static void getFileLocation(FileSystem fs, String string) throws IOException { FileStatus fileStatus = fs.getFileStatus(new Path(string)); long len = fileStatus.getLen(); BlockLocation[] fileBlockLocations = fs.getFileBlockLocations(fileStatus, 0, len); String[] hosts = fileBlockLocations[0].getHosts(); for (String string2 : hosts) { System.out.println(string2); } HdfsBlockLocation blockLocation = (HdfsBlockLocation)fileBlockLocations[0]; long blockId = blockLocation.getLocatedBlock().getBlock().getBlockId(); System.out.println(blockId); } private static void readFromHDFSFile(FileSystem fs, String string) throws IllegalArgumentException, IOException { FSDataInputStream inputStream = fs.open(new Path(string)); FileStatus fileStatus = fs.getFileStatus(new Path(string)); long len = fileStatus.getLen(); byte[] b = new byte[(int)len]; int read = inputStream.read(b); while(read != -1){ System.out.println(new String(b)); read = inputStream.read(b); } } private static void appendToHDFSFile(FileSystem fs, String filePath, String content) throws IllegalArgumentException, IOException { FSDataOutputStream append = fs.append(new Path(filePath)); append.write(content.getBytes("UTF-8")); append.flush(); append.close(); } private static void writeToHDFSFile(FileSystem fs, String filePath, String content) throws IllegalArgumentException, IOException { FSDataOutputStream outputStream = fs.create(new Path(filePath)); outputStream.write(content.getBytes("UTF-8")); outputStream.flush(); outputStream.close(); } private static void createNewFile(FileSystem fs, String string) throws IllegalArgumentException, IOException { fs.createNewFile(new Path(string)); } private static void innerCopyAndMoveFile(FileSystem fs, Configuration conf,String src, String dest) throws IOException { Path srcPath = new Path(src); Path destPath = new Path(dest); //內部拷貝 // FileUtil.copy(srcPath.getFileSystem(conf), srcPath, destPath.getFileSystem(conf), destPath,false, conf); //內部移動 FileUtil.copy(srcPath.getFileSystem(conf), srcPath, destPath.getFileSystem(conf), destPath,true, conf); } private static void renameFile(FileSystem fs, String src, String dest) throws IOException { Path srcPath = new Path(src); Path destPath = new Path(dest); fs.rename(srcPath, destPath); } private static void downLoadFileFromHDFS(FileSystem fs, String src, String dest) throws IOException { Path srcPath = new Path(src); Path destPath = new Path(dest); //copyToLocal // fs.copyToLocalFile(srcPath, destPath); //moveToLocal fs.copyToLocalFile(true,srcPath, destPath); } private static void uploadFileToHDFS(FileSystem fs, String src, String dest) throws IOException { Path srcPath = new Path(src); Path destPath = new Path(dest); //copyFromLocal // fs.copyFromLocalFile(srcPath, destPath); //moveFromLocal fs.copyFromLocalFile(true,srcPath, destPath); } private static void createDir(FileSystem fs, String string) throws IllegalArgumentException, IOException { Path path = new Path(string); if(fs.exists(path)){ fs.delete(path, true); } fs.mkdirs(path); } private static List listFileSystem(FileSystem fs, String path) throws FileNotFoundException, IOException { Path ppath = new Path(path); FileStatus[] listStatus = fs.listStatus(ppath); for (FileStatus fileStatus : listStatus) { System.out.println(fileStatus.getPath()); } return null; } }