HDFS在生產生活中應用主要是客戶端的開發,其核心步驟是從HDFS提供的API構建一個HDFS的訪問客戶端對象,通過該對象對HDFS上的文件進行增刪改查
1.配置JAVA環境
首先電腦裏cmd輸入java -version 查看版本,如果沒有出現下面圖片這樣的現象,那麼說明你沒有JAVA環境,可以去網上找資料配置JAVA環境(環境好久之前配置的了,沒記錄,就自己找一下吧)
2.下載安裝包
下載eclipse 並安裝 eclipse安裝包 password:mua5 (workplace自己記住就行)
下載maven包 maven password:5ylo
3.配置eclipse
Window -----> Preferences ------> Java ------> Installed JREs ----> Add(將我們能的JDK找到放進去)
同時把Java ---> Comlier中的JDK 的版本改成自己的 (我的是1.8的)
修改maven,這個裏面ADD的就是上面下載的那個,選在apache-maven-3.3.9就行
修改Maven中的 User Settings 修改Settings 路徑是apache-maven-3.3.9/conf/settings.xml (記得修改settings.xml中的一個路徑,因爲你存的地方肯定和我不一樣!)
4.新建工程
1.建立一個Maven Project 下面就是創建簡單工程,取名啥的
2.引入依賴 在pom.xml下我們加入依賴關係
輸入:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
3.保存之後更新配置
之後會產生一個包
在src/main/java下建立包,包下建立一個類
引入參數(出現紅線,就按下ctrl+shift+o鍵進行填包,記得選在帶hadoop的)
輸入 :public class HDFS_CRUD {
FileSystem fs = null;
@Before // 此註解可以保證init方法在程序中最先執行
public void init() throws Exception{
// 構造一個配置參數對象,設置一個參數:要訪問的hdfs的uri
Configuration conf = new Configuration();
// 這裏指定使用的是hdfs
conf.set("fs.defaultFS", "hdfs://hadoop01:9000");// 此處使用主機名需要配置windows的host文件
// 通過如下的方式進行客戶端身份的設置
System.setProperty("HADOOP_USER_NAME", "root");
// 通過FileSystem的靜態方法獲取文件系統客戶端對象
fs = FileSystem.get(conf);
}
從客戶端中上傳文件(這裏注意斜槓方向)
輸入;
@Test
public void testAddFileToHdfs() throws IOException {
// 要上傳的文件所在的路徑
Path src = new Path("D:\\test.txt");
// 要上傳到hdfs的目標路徑
Path dst = new Path("/testFile"); // 一定注意此處的testFile就是上傳到hdfs的文件的名字而不是文件夾
// 上傳
fs.copyFromLocalFile(src, dst);
//關閉資源
fs.close();
}
從服務器下載文件(是不是感覺指令有那麼一絲屬性)
輸入:// 從hdfs 中複製文件到本地文件系統
@Test
public void testDownloadFileToLocal() throws IOException {
// 下載文件
Path src = new Path("/long");
Path dst = new Path("D:/");
fs.copyToLocalFile(false,src, dst,true);
// 關閉資源
fs.close();
}
查看;刪除;重命名文件
輸入:
@Test
public void testMkdirAndDeleteAndRename() throws Exception {
// 創建目錄
fs.mkdirs(new Path("/a/b/c"));
fs.mkdirs(new Path("/long/shi/san"));
// 重命名文件或文件夾
// fs.rename(new Path("/a"), new Path("/hahahahahaha"));
// 刪除文件夾,如果是非空文件夾,參數2必須給值爲true
// fs.delete(new Path("/hahahahahaha"),true);
}
查看文件目錄
輸入:
@Test
public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
// 獲取迭代器對象
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while(listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
// 打印當前文件名稱
System.out.println(fileStatus.getPath().getName());
// 打印當前文件塊大小
System.out.println(fileStatus.getBlockSize());
// 打印當前文件權限
System.out.println(fileStatus.getPermission());
// 打印當前文件內容長度
System.out.println(fileStatus.getLen());
// 獲取該文件塊信息(包括長度,數據塊,datanode的信息)
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for (BlockLocation blockLocation : blockLocations) {
System.out.println("block-length:"+blockLocation.getLength()+" -- "+"block-offset:"+blockLocation.getOffset());
String[] hosts = blockLocation.getHosts();
for (String host : hosts) {
System.out.println(host);
}
}
System.out.println("--------------分割線---------");
}
}
執行一下看看
首先看一下我們hadoop目錄下都有什麼
實驗現象
我們在d盤建立一個longshisan.txt傳上去
右擊函數,選擇Run As 進行測試
第一個傳輸成功
第二個下載成功
第三個創建目錄
第四個重命名
第五個刪除
最後一個
今日HDFS訪問結束!