1. 程式人生 > >JAVA API簡單操作Hadoop

JAVA API簡單操作Hadoop

一:環境準備。

     1.開發環境的JDK的版本最好是和Linux上一致,這裡是JDK8。

     2.搭建工程匯入需要的jar包。

        2.1 hadoop-2.8.5 / share / hadoop / common

        

        2.2 hadoop-2.8.5 / share / hadoop / common / lib(全部匯入)

        

       2.3 hadoop-2.8.5 / share / hadoop / hdfs

       

        鑑於jar比較多,可以使用Maven依賴的方式或者是自己做個Libraries吧。在Elipse下製作一個使用者庫如下。

       

整個工程結構如下,非常簡單。

3. Linux下啟動Hadoop。

    參看:教程下面只是確保Hadoop的正確啟動了。

二。Java的測試實現檔案的上傳/下載/建立資料夾。

    2.1首先是在HDFS下的根目錄下建立一個目錄。(客戶端方面檢視)。

     

   注意正確的導包。

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSDemo {
   public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException  {
	   // 使用root許可權,URI就是之前hadoop配置的路徑.9000埠.
	   FileSystem fs=FileSystem.get(new URI("hdfs://192.168.217.134:9000"), new Configuration(),"root");
	   // 建立一個資料夾,這裡從HDFS的根目錄寫起的.
	   Boolean flag=fs.mkdirs(new Path("/testhdfs1026"));
	   System.out.println(flag);
   }
}

 控制檯如下:

2.2實現刪除目錄。

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSDemo {
   public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException  {
	   // 使用root許可權,URI就是之前hadoop配置的路徑.9000埠.
	   FileSystem fs=FileSystem.get(new URI("hdfs://192.168.217.134:9000"), new Configuration(),"root");
	   // 刪除一個資料夾,這裡從HDFS的根目錄寫起的,如果是單個檔案就是false,目錄下面有目錄就true.
	   Boolean flag=fs.delete(new Path("/testdfs"));
	   System.out.println(flag);
       // 關閉 
       fs.close();
   }
}

 控制檯。

2.3實現上傳檔案。

   原始碼如下,注意那個IOUtils的包的路徑是IO包下的。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class HDFSDemo {
   public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException  {
	   // 使用root許可權,URI就是之前hadoop配置的路徑.9000埠.
	   FileSystem fs=FileSystem.get(new URI("hdfs://192.168.217.134:9000"), new Configuration(),"root");
	   // 實現上傳檔案,首先是讀取本地的檔案
	   InputStream in=new FileInputStream("D://hadoop.txt");
	   // 上傳檔案到HDFS的指定目錄下.
	   OutputStream out=fs.create(new Path("/testhdfs1026/hadoop.txt"));
	   // 按照位元組的方式複製.buffersize是4K,寫完後返回true
	   IOUtils.copyBytes(in, out, 4096, true);
       // 關閉流
       fs.close();
   }
}

 

或者使用:copyFromLocalFile(src,dst);

2.4實現下載檔案。

    

  原始碼。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class HDFSDemo {
   public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException  {
	   // 使用root許可權,URI就是之前hadoop配置的路徑.9000埠.
	   FileSystem fs=FileSystem.get(new URI("hdfs://192.168.217.134:9000"), new Configuration(),"root");
	   // 實現HDFS內的檔案下載至本地
	   InputStream in=fs.open(new Path("/testhdfs1026/hadoop.txt"));
	   // 下載到本地,儲存後的名稱是hadoop.txt
	   OutputStream out=new FileOutputStream("D://hadoop1026/hadoop.txt");
	   // 按照位元組的方式複製.buffersize是4K,寫完後返回true.
	   IOUtils.copyBytes(in, out, 4096, true);
       //
       fs.close();
   }
}

 

或者使用:copyToLocalFile(src,dst);

2.5獲取檔案資訊。

getFileStatus(new Path(path))。返回一個IOVFile。

這些API方法操作還是比較簡單方面使用的。