JAVA API簡單操作Hadoop
阿新 • • 發佈:2018-11-09
一:環境準備。
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方法操作還是比較簡單方面使用的。