1、創(chuàng)建Maven項目
2、修改pom.xml文件
<dependencies>
<!-- Hadoop所需依賴包 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.0</version>
</dependency>
<!-- junit測試依賴,因為我只想測試HDFS是否能正常使用 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
3、添加四個配置文件
為避免運行的一些錯誤,我們將Hadoop的四個重要配置文件添加到resources中
4、創(chuàng)建測試文件JavaAPI
5、初始化
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
public class JavaAPI {
// 可操作HDFS文件系統(tǒng)的對象
FileSystem hdfs = null;
// 測試方法執(zhí)行前執(zhí)行,用于初始化操作,避免頻繁初始化
@Before
public void init() throws IOException {
// 構(gòu)造一個配置參數(shù)對象,設置一個參數(shù):要訪問的HDFS的URI
Configuration conf = new Configuration();
// 指定使用HDFS訪問
conf.set("fs.defaultFS","hdfs://localhost:9000");
// 進行客戶端身份的設置(root為虛擬機的用戶名,hadoop集群節(jié)點的其中一個都可以)
System.setProperty("HADOOP_USER_NAME","root");
// 通過FileSystem的靜態(tài)get()方法獲取HDFS文件系統(tǒng)客戶端對象
hdfs = FileSystem.get(conf);
}
// 測試方法執(zhí)行后執(zhí)行,用于處理結(jié)尾的操作,關閉對象
@After
public void close() throws IOException {
// 關閉文件操作對象
hdfs.close();
}
}
因為對文件的操作我們都需要獲取hdfs對象和關閉對象,所以為避免重復編寫,將兩個操作對立成單獨方法,分別在文件相應操作執(zhí)行前和執(zhí)行后執(zhí)行。
這里"hdfs://localhost:9000"
對應core-site.xml的配置
6、文件操作
可以在瀏覽器訪問http://localhost:50070/,點擊Browse the file system 查看HDFS文件系統(tǒng)的目錄
文章來源:http://www.zghlxwxcb.cn/news/detail-737050.html
文件上傳
我提前在本地E:\hadoop下創(chuàng)建一個HDFSTest.txt文件文章來源地址http://www.zghlxwxcb.cn/news/detail-737050.html
// 上傳文件到HDFS文件系統(tǒng)
@Test
public void testUploadFileToHDFS() throws IOException {
// 待上傳的文件路徑(windows)
Path src = new Path("E:/hadoop/HDFSTest.txt");
// 上傳之后存放的路徑(HDFS)
Path dst = new Path("/HDFSTest.txt");
// 上傳
hdfs.copyFromLocalFile(src, dst);
System.out.println("上傳成功");
}
文件下載
// 從HDFS下載文件到本地
@Test
public void testDownFileToLocal() throws IOException {
// 待下載的路徑(HDFS)
Path src = new Path("/HDFSTest.txt");
// 下載成功之后存放的路徑(windows)
Path dst = new Path("E:/hadoop/HDFSTest1.txt");
// 下載
hdfs.copyToLocalFile(false,src,dst,true);
System.out.println("下載成功");
}
創(chuàng)建目錄
? ?// 創(chuàng)建目錄
? ?@Test
? ?public void testMkdirFile() throws IOException {
? ? ? ?// 待創(chuàng)建目錄路徑
? ? ? ?Path src = new Path("/HDFS");
? ? ? ?// 創(chuàng)建目錄
? ? ? ?hdfs.mkdirs(src);
? ? ? ?System.out.println("創(chuàng)建成功");
? }
目錄重命名
? ?// 重命名
? ?@Test
? ?public void testRenameFile() throws IOException {
? ? ? ?// 重命名之前的名字
? ? ? ?Path src = new Path("/HDFS");
? ? ? ?// 重命名之后的名字
? ? ? ?Path dst = new Path("/HDFS1");
? ? ? ?// 重命名
? ? ? ?hdfs.rename(src,dst);
? ? ? ?System.out.println("重命名成功");
? }
刪除目錄
? ?// 刪除目錄
? ?@Test
? ?public void testDeleteFile() throws IOException {
? ? ? ?// 待刪除目錄路徑(HDFS)
? ? ? ?Path src = new Path("/HDFS1");
? ? ? ?// 刪除
? ? ? ?hdfs.delete(src, true);
? ? ? ?System.out.println("刪除成功");
? }
查看文件信息
// 查看HDFS目錄中的文件信息
@Test
public void testCheckFile() throws IOException {
// 獲取迭代器對象("/"表示獲取全部目錄下的文件)
RemoteIterator<LocatedFileStatus> listFiles = hdfs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
// 打印當前文件名
System.out.println("文件名:" + fileStatus.getPath().getName());
// 打印當前文件塊大小
System.out.println("文件塊大?。? + fileStatus.getBlockSize());
// 打印當前文件權(quán)限
System.out.println("文件權(quán)限:" + fileStatus.getPermission());
// 打印當前文件內(nèi)容的長度
System.out.println("文件內(nèi)容長度:" + fileStatus.getLen());
// 獲取該文件塊的信息(包含長度,數(shù)據(jù)塊,DataNodes的信息)
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for (BlockLocation bl : blockLocations) {
System.out.println("block-length:" + bl.getLength());
System.out.println("block-offset:" + bl.getOffset());
// 獲取DataNodes的主機名
String[] hosts = bl.getHosts();
for (String host : hosts) {
System.out.println(host);
}
}
System.out.println("-----------------分割線-----------------");
}
}
到了這里,關于Hadoop——HDFS的Java API操作(文件上傳、下載、刪除等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!