HDFS的API操作
文章目錄
HDFS的API操作
HDFS環境準備
- 準備Hadoop的Windows10的客戶端
- 準備JDK8(也就是對應Java1.8)
- 配置Hadoop的Windows10的客戶端的環境變數配置
- 建立maven工程
- 匯入依賴
<dependencies>
<dependency>
<groupId>junit</groupId>
< artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency >
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
< version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
</dependencies>
公共部分程式碼解析
Declaration
Provides access to configuration parameters.
翻譯過來就是:提供對配置引數的訪問。
第一步 獲取對配置引數的訪問
Configuration conf = new Configuration();
第二步 建立檔案系統的訪問物件
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.174.137:9000"), conf, "root");
第三步 操作檔案系統
最後一步 關閉資源
fs.close();
部分程式碼解析
1檔案上傳
Delcaration
The src file is on the local disk. Add it to FS at
the given dst name and the source is kept intact afterwards
@param src path
@param dst path
翻譯:
第一個引數src 來源路徑
第二個引數dst 目標路徑
從源路徑上傳到目標路徑
fs.copyFromLocalFile(new Path("e:/banzhang.txt"), new Path("/banzhang.txt"));
2檔案下載
The src file is under FS, and the dst is on the local disk.
Copy it from FS control to the local dst name.
delSrc indicates if the src will be removed or not.
@param delSrc whether to delete the src
@param src path
@param dst path
翻譯:
第一個引數 是否刪除原始檔
第二個引數 來原始檔
第三個引數 目標路徑
fs.copyToLocalFile(false, new Path("/banzhang.txt"), new Path("e:/banhua.txt"), true);
3資料夾刪除
Delete a file.
@param f the path to delete.
@param recursive if path is a directory and set to
true, the directory is deleted else throws an exception. In
case of a file the recursive can be set to either true or false.
@return true if delete is successful else false.
@throws IOException
翻譯:
第一個引數 目標路徑(操作路徑)
第二個引數 是否遞迴刪除 如果刪除的是個目錄,目錄裡面還有別的檔案,則會報錯
fs.delete(new Path("/0508/"), true);
4檔名更改
第一個引數 源路徑
第二個路徑 更名之後的路徑
fs.rename(new Path("/banzhang.txt"), new Path("/banhua.txt"));
5檔案詳情檢視
// 2 獲取檔案詳情
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while(listFiles.hasNext()){
LocatedFileStatus status = listFiles.next();
// 輸出詳情
// 檔名稱
System.out.println(status.getPath().getName());
// 長度
System.out.println(status.getLen());
// 許可權
System.out.println(status.getPermission());
// 分組
System.out.println(status.getGroup());
// 獲取儲存的塊資訊
BlockLocation[] blockLocations = status.getBlockLocations();
for (BlockLocation blockLocation : blockLocations) {
// 獲取塊儲存的主機節點
String[] hosts = blockLocation.getHosts();
for (String host : hosts) {
System.out.println(host);
}
}
System.out.println("-----------班長的分割線----------");
}
6檔案和資料夾判斷
// 2 判斷是檔案還是資料夾
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus fileStatus : listStatus) {
// 如果是檔案
if (fileStatus.isFile()) {
System.out.println("f:"+fileStatus.getPath().getName());
}else {
System.out.println("d:"+fileStatus.getPath().getName());
}
}