HDFS Java API 基本操作實驗

文章目錄

  • 一、實驗環境
  • 二、實驗內容
    • (一)數據準備
    • (二)編程環境準備
    • (三)使用Hadoop API操作HDFS文件系統
    • (四)使用Hadoop API + Java IO流操作HDFS文件系統
  • 三、實驗步驟
    • (一)數據準備
    • (二)編程環境準備
      • 1、啟動IDEA
      • 2、創建Maven項目
      • 3、添加項目依賴
        • (1)hadoop-common (org.apache.hadoop:hadoop-common:2.7.6)
        • (2)hadoop-client (org.apache.hadoop:hadoop-client:2.7.6)
        • (3)hadoop-hdfs (org.apache.hadoop:hadoop-hdfs:2.7.6)
        • (4)junit (junit:junit:4.10)
        • (5)log4j-core (org.apache.logging.log4j:log4j-core:2.8.2)
      • 4、添加資源文件
      • 5、創建包
    • (三)使用Hadoop API操作HDFS文件系統
      • 1、獲取文件系統并配置在集群上運行
      • 2、創建目錄
      • 3、上傳文件
      • 4、下載文件
      • 5、刪除文件/目錄
      • 6、列出指定路徑下的文件和目錄
      • 7、查看完整代碼
    • (四)使用Hadoop API + Java IO流操作HDFS文件系統
      • 1、獲取文件系統并配置在集群上運行
      • 2、上傳文件(IO流)
      • 3、讀取文件(IO流)
      • 4、下載文件(IO流)
      • 5、輔助代碼

一、實驗環境

  • 本實驗主要涉及到了4臺虛擬機,其中1臺虛擬機的操作系統是ubuntu desktop,另外3臺虛擬機的操作系統是centos server
    在這里插入圖片描述
  • 本實驗已經搭建好了Hadoop HA的完全分布式集群
    在這里插入圖片描述

二、實驗內容

  • 我們將一同探討數據處理中至關重要的一環——Hadoop文件系統(HDFS)的操作。我們將分為四個主要部分,分別是數據準備、編程環境準備、使用Hadoop API操作HDFS文件系統以及使用Hadoop API結合Java IO流進行操作。

(一)數據準備

  • 在進行任何數據處理之前,充分準備好數據是至關重要的一步。這一部分將介紹數據準備的重要性,以及如何有效地準備數據以供后續處理使用。

(二)編程環境準備

  • 在進行HDFS文件系統的操作之前,我們需要確保我們的編程環境已經得到了妥善的準備。這包括獲取文件系統、配置集群環境等步驟,確保我們的操作能夠在集群上運行。

(三)使用Hadoop API操作HDFS文件系統

  • 這一部分是我們的重頭戲,我們將使用Hadoop API進行各種文件系統的操作。從創建目錄到上傳、下載、刪除文件,再到列出指定路徑下的文件和目錄,我們將一一演示如何使用Hadoop API輕松地完成這些操作。同時,我們也會分享一些輔助代碼,使大家更好地理解和應用這些操作。

(四)使用Hadoop API + Java IO流操作HDFS文件系統

  • 在這一部分,我們將進一步深入,結合Java IO流,展示如何通過IO流上傳、讀取和下載文件。這將為大家提供更多的靈活性和掌握文件系統操作的技能。

  • 本次實驗幫助大家更好地理解和應用Hadoop文件系統的操作,使大家能夠在實際工作中更加得心應手。接下來,我們將深入到各個部分,讓我們一同來探索這個數據處理的世界吧!

三、實驗步驟

(一)數據準備

  • desktop節點打開終端
    在這里插入圖片描述
  • 切換到/opt目錄
    在這里插入圖片描述
  • 創建數據文件data.txt
    在這里插入圖片描述
  • 創建數據文件localFile.txt
    在這里插入圖片描述
  • 下載日志屬性文件,執行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/log4j.properties
    在這里插入圖片描述
  • 下載Hadoop核心配置文件core-site.xml,執行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/core-site.xml
    在這里插入圖片描述
  • 下載Hadoop分布式文件系統配置文件hdfs-site.xml,執行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/hdfs-site.xml
    在這里插入圖片描述

(二)編程環境準備

1、啟動IDEA

  • 在desktop節點上啟動IDEA
    在這里插入圖片描述

  • 勾選用戶協議
    在這里插入圖片描述

  • 單擊【Continue】按鈕
    在這里插入圖片描述

2、創建Maven項目

  • 單擊歡迎窗口中的【New Project】按鈕,在左邊欄里選擇【Maven】類型
    在這里插入圖片描述
  • 單擊【Next】按鈕,在對話框里設置項目名稱、位置、組標識和構件標識
    在這里插入圖片描述
  • 單擊【Finish】按鈕,在彈出的【Tip of the Day】消息框里勾選【Don’t show tips】復選框
    在這里插入圖片描述
  • 單擊【Close】按鈕,看到一個空的Maven項目
    在這里插入圖片描述

3、添加項目依賴

  • pom.xml文件里添加相關依賴
    在這里插入圖片描述
<dependencies>                                        <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-common</artifactId>        <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-client</artifactId>        <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>org.apache.hadoop</groupId>          <artifactId>hadoop-hdfs</artifactId>          <version>2.7.6</version>                      </dependency>                                     <dependency>                                      <groupId>junit</groupId>                      <artifactId>junit</artifactId>                <version>4.10</version>                       </dependency>                                     <dependency>                                      <groupId>org.apache.logging.log4j</groupId>   <artifactId>log4j-core</artifactId>           <version>2.8.2</version>                      </dependency>                                     
</dependencies>                                       
(1)hadoop-common (org.apache.hadoop:hadoop-common:2.7.6)
  • 作用: 提供Hadoop的通用庫和工具,包括文件系統操作、配置管理等。
  • 詳細說明: 這是Hadoop的核心庫,包含了許多通用的類和工具,用于支持Hadoop分布式文件系統(HDFS)和分布式計算。
(2)hadoop-client (org.apache.hadoop:hadoop-client:2.7.6)
  • 作用: 提供Hadoop的客戶端庫,支持與Hadoop集群進行交互。
  • 詳細說明: 包含Hadoop客戶端的相關類,用于在應用程序中與Hadoop集群通信,提交作業等。
(3)hadoop-hdfs (org.apache.hadoop:hadoop-hdfs:2.7.6)
  • 作用: 提供Hadoop分布式文件系統(HDFS)的支持。
  • 詳細說明: 包含了HDFS相關的類,用于進行文件系統的讀寫操作,支持分布式存儲和文件管理。
(4)junit (junit:junit:4.10)
  • 作用: 提供Java單元測試的支持。
  • 詳細說明: JUnit是一個廣泛用于Java項目的測試框架,用于編寫和運行單元測試。
(5)log4j-core (org.apache.logging.log4j:log4j-core:2.8.2)
  • 作用: 提供Log4j日志框架的核心功能。
    -詳細說明: Log4j是一個用于Java應用程序的靈活的日志框架,log4j-core包含了其核心的日志處理功能。

  • 中慧教學實訓平臺提供了文件的上傳和下載功能
    在這里插入圖片描述

  • CentOS上Maven項目本地倉庫默認位置(用戶主目錄/.m2/repository
    在這里插入圖片描述

  • 刷新項目依賴
    在這里插入圖片描述

  • 刷新之后,多一個Dependencies
    在這里插入圖片描述

  • 查看項目依賴的外部庫(External Libraries)
    在這里插入圖片描述

4、添加資源文件

  • /opt目錄里的core-site.xmlhdfs-site.xmllog4j.properties文件拷貝到項目的resources目錄
    在這里插入圖片描述
    在這里插入圖片描述

5、創建包

  • src/main/java里創建net.huawei.usehdfs
    在這里插入圖片描述

(三)使用Hadoop API操作HDFS文件系統

1、獲取文件系統并配置在集群上運行

  • net.huawei.usehdfs包里創建HDFSBase
    在這里插入圖片描述
  • 導入程序所需要的包
    在這里插入圖片描述
  • 創建init()方法,獲取在集群上運行的文件系統
    在這里插入圖片描述
  • 運行init()方法
    在這里插入圖片描述
  • 在控制臺查看結果
    在這里插入圖片描述

2、創建目錄

  • 創建testMkdirs()方法
    在這里插入圖片描述
  • 由于每次對于HDFS文件系統的操作都需要獲取文件系統并配置在集群上運行,因此需要將上一個功能代碼中的@Test修改為@Before,并將System.out.printIn(fileSystem);語句注釋掉。
    在這里插入圖片描述
  • 運行testMkdirs()方法,查看控制臺結果
    在這里插入圖片描述
  • 在Hadoop WebUI上查看創建的目錄
    在這里插入圖片描述
  • 利用HDFS Shell命令hdfs dfs -ls -R /查看
    在這里插入圖片描述

3、上傳文件

  • 創建testCopyFromLocal()方法
    在這里插入圖片描述
  • testCopyFromLocal()方法,查看結果
    在這里插入圖片描述
  • 查看上傳的文件內容
    在這里插入圖片描述

4、下載文件

  • 創建testCopyToLocal()方法
    在這里插入圖片描述

  • 運行testCopyToLocal()方法,查看結果
    在這里插入圖片描述

  • 在desktop節點上查看下載的文件
    在這里插入圖片描述

  • 在desktop節點上查看下載的文件內容
    在這里插入圖片描述

5、刪除文件/目錄

  • 創建testDeleteFile()方法,刪除/idea/mkdir/directory/data.txt文件
    在這里插入圖片描述

  • 運行testDeleteFile()方法,查看結果
    在這里插入圖片描述

  • 查看/idea/mkdir/directory/data.txt文件,報錯說文件不存在
    在這里插入圖片描述

  • 修改代碼,刪除/idea/mkdir/directory目錄
    在這里插入圖片描述

  • 運行testDeleteFile()方法,查看結果
    在這里插入圖片描述

  • 查看/idea/mkdir/directory目錄,報錯說目錄不存在
    在這里插入圖片描述

6、列出指定路徑下的文件和目錄

  • 創建testListAllStatus()方法
    在這里插入圖片描述
  • 運行testListAllStatus()方法,查看結果
    在這里插入圖片描述
  • 上傳anaconda-ks.cfg到HDFS根目錄
    在這里插入圖片描述
  • 運行testListAllStatus()方法,查看結果
    在這里插入圖片描述

7、查看完整代碼

package net.huawei.usehdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;public class HDFSBase {private FileSystem fileSystem;private Configuration configuration;/*** 獲取文件系統并配置在集群上運行* @throws IOException* @throws InterruptedException*/@Beforepublic void init() throws IOException, InterruptedException {//1、獲取文件系統configuration = new Configuration();//2、配置在集群上運行String uri = "hdfs://mycluster:8020";fileSystem = FileSystem.get(URI.create(uri), configuration, "root");//System.out.println(fileSystem);}/*** 創建目錄* @throws IOException*/@Testpublic void testMkdirs() throws IOException {//3、創建目錄Path path = new Path("/idea/mkdir/directory");fileSystem.mkdirs(path);fileSystem.close();}/*** 上傳文件* @throws IOException*/@Testpublic void testCopyFromLocal() throws IOException {//3、從本地上傳文件到hdfs文件系統// Path src 要上傳的文件的路徑(本地文件系統中的路徑)Path src = new Path("/opt/data.txt");// Path dst 將文件上傳到的路徑(hdfs文件系統中的路徑)Path dst = new Path("/idea/mkdir/directory");fileSystem.copyFromLocalFile(src, dst);fileSystem.close();System.out.println("文件上傳成功~" + dst.toString() + "/" + src.getName());}/*** 下載文件* @throws IOException*/@Testpublic void testCopyToLocal() throws IOException {//3、從hdfs文件系統將文件下載到本地// Path src 文件在hdfs文件系統中的路徑(hdfs文件系統中的路徑)Path src = new Path("/idea/mkdir/directory/data.txt");// Path dst 要下載的文件的路徑(本地文件系統中的路徑)Path dst = new Path("/usr/local/src/data.txt");fileSystem.copyToLocalFile(src, dst);fileSystem.close();System.out.println("文件下載成功~" + dst.toString());}/*** 刪除文件/目錄* @throws IOException*/@Testpublic void testDeleteFile() throws IOException {//3、刪除hdfs文件系統中的文件或目錄Path path = new Path("/idea/mkdir/directory");//判斷是否是目錄boolean directory = fileSystem.isDirectory(path);//判斷是否是文件boolean file = fileSystem.isFile(path);//如果是目錄,則刪除目錄if(directory){boolean deleteDirectory = fileSystem.delete(path, true);if(deleteDirectory){System.out.println("該路徑是個目錄,刪除目錄成功!");}}//如果是文件,則刪除文件if(file){boolean deleteFile = fileSystem.delete(path, true);if(deleteFile) {System.out.println("該路徑是個文件,刪除文件成功!");}}fileSystem.close();}/*** 列出指定路徑下的文件和目錄* @throws IOException*/@Testpublic void testListAllStatus() throws IOException {//3、列出hdfs文件系統中指定路徑下所有的目錄和文件Path path = new Path("/");FileStatus[] fileStatuses = fileSystem.listStatus(path);for (FileStatus fileStatus : fileStatuses) {//如果是文件,則輸出文件if(fileStatus.isFile()){System.out.println("文件:"+fileStatus.getPath().getName());}//如果是目錄,則輸出目錄if(fileStatus.isDirectory()){System.out.println("目錄:"+fileStatus.getPath().getName());}}fileSystem.close();}
}

(四)使用Hadoop API + Java IO流操作HDFS文件系統

1、獲取文件系統并配置在集群上運行

2、上傳文件(IO流)

3、讀取文件(IO流)

4、下載文件(IO流)

5、輔助代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209212.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧城市是什么?為什么要建智慧城市?

智慧城市是一個通過現代科技手段推動城市管理和服務創新的概念。 具體來說&#xff0c;它利用信息技術和創新概念&#xff0c;將城市的各個系統和服務集成起來&#xff0c;以提升城市運行效率、優化城市管理和服務&#xff0c;改善市民的生活質量。 為什么要建智慧城市呢&…

土壤水分傳感器土壤體積含水率含量監測儀器

產品概述 外型小巧輕便&#xff0c;便于攜帶和連接。 土壤水分傳感器由電源模塊、變送模塊、漂零及溫度補償模塊、數據處理模塊等組成。傳感器內置信號采樣及放大、漂零及溫度補償功能&#xff0c;用戶接口簡潔、方便。 功能特點 ◆本傳感器體積小巧化設計&#xff0c;測量…

pr抖音素材42個手機豎屏抖音視頻轉場特效PR剪輯模板

酷炫、富有創意的Premiere Pro 視頻轉場動畫過渡效果pr模板免費下載。增強內容演示、幻燈片、抖音、社交媒體廣告、預告片、促銷等視頻畫面切換效果。 來自PR模板網&#xff1a;https://prmuban.com/36404.html

scanf注意事項(考試超級重點!)

1&#xff09;scanf("a%d,b%d",&a,&b); 一定要記住是以第一部分的格式在終端輸入數據。 在黑色屏幕上面輸入的為a12,b34才可以把12和34正確給a和b。有一點不同也不行。 2&#xff09;scanf("%d,%d",x,y); 這種寫法絕對錯誤&#xff0c;scanf的…

Git使用指南

文章目錄 一、Git概念二、Git命令清單1、新建代碼庫2、配置3、增加/刪除文件4、代碼提交5、分支6、標簽7、查看信息8、遠程同步9、撤銷10、其他 三、常用高級操作1、把其他分支代碼摘到當前分支2、重置剛剛提交的代碼 一、Git概念 Git流程圖 相關概念說明&#xff1a; Work…

生信技能30 - 獲取CNV開始位置和結束位置所在的染色體區帶

獲取CNV開始位置和結束位置所在的染色體區帶,以下為函數方法和調用方法示例 程序代碼 # 獲取INDEL開始位置和結束位置所在的染色體區帶 def get_cytoband(pos_start, pos_end, chrom):# cytoBand.txt所在的文件路徑cytoband_file = “./cytoBand.txt”try:df = pd.read_csv(…

書籍推薦: 深入理解Go并發編程

一書在手&#xff0c;并發無憂 收到了鳥窩老師歷時五載寫就的新作「深入理解Go并發編程」 迫不及待開卷閱覽&#xff0c;大呼過癮&#xff0c;最大感觸是誠如副標題所言&#xff0c;“從原理到實踐&#xff0c;看這本就夠了”。 對并發編程優雅簡潔的支持&#xff0c;是Go最大的…

GS求解與QR分解的一致性校驗

QR分解相對于GS分解更簡單,在MATLAB中更容易實現; 我們使用一組數據進行測試,代碼如下: clc; clearvars;%% 方法A:GS求解,construct new orthonormal basis by gram-schmidt y0=1:12; znorm=zeros(3,1); n1=3; znorm(1)=0.0; for j=1:n1 znorm(1)=znorm(1)+y0(n1*j+1)^…

探索無監督域自適應,釋放語言模型的力量:基于檢索增強的情境學習實現知識遷移...

深度學習自然語言處理 原創作者: Xnhyacinth 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;如何有效地進行無監督域自適應(Unsupervised Domain Adaptation, UDA) 一直是研究的熱點和挑戰。無監督域自適應的目標是在目標域無標簽的情況下&#xff0c;將源域的知識…

ABAP - Function ALV 01 Function ALV的三大基石

森莫是Function ALV&#xff1f; 業務顧問和用戶方面的名詞定義為報表&#xff0c;在開發顧問方面定義的名詞為ALV 通過調用Function方式展示的ALV叫做FunctionALV.Function的解釋:封裝好的函數 Function ALV的三大基石 Fieldcat :Function ALV字段級別的處理 Layout …

前端小技巧: 設計一個簡版前端統計 SDK

統計 sdk 如何設計 1 ) 概述 客戶端一個sdk &#xff0c;把數據發送給服務端(第三方統計平臺)服務端產生一個統計的報表 2 &#xff09;需求點 訪問量&#xff1a;pv自定義事件&#xff1a;用戶的一切行為我們都可以自定義采集性能&#xff0c;錯誤 3 ) 代碼實現 const P…

uView框架的安裝與Git管理

參考鏈接&#xff1a;Http請求 | uView - 多平臺快速開發的UI框架 - uni-app UI框架 安裝 打開我們項目的cmd進行下載&#xff1a; yarn add uview-ui 首先我們要確定&#xff0c;未下載前的文件目錄以及下載后&#xff0c;是多了個文件目錄node_modules 下載完成之后我們就…

QQ2023備份

需要修改的路徑&#xff08;共3處&#xff09; 這三處路徑中&#xff0c;只有一處是需要修改的 QQPC端-主菜單-設置-基本設置-文件管理 點擊上面的“”自定義“”&#xff0c;然后修改路徑即可 修改路徑后提示 然后等一會才會關干凈QQ的相關進程&#xff0c;關閉后才會有自動…

外貿找客戶軟件工具:WhatBotPlus 4.6.2

WhatBot 是所有使用 Whatsapp 與客戶溝通的中小型公司、企業或自由職業者的理想軟件。借助 WhatBot&#xff0c;您可以通過 Whatsapp 發送新聞通訊活動&#xff0c;還可以設置自動回復。由于命令一旦配置&#xff0c;客戶就可以獲取各種信息、接收優惠和促銷等&#xff0c;從而…

linux安裝tomcat

Tomcat官網&#xff1a; http://tomcat.apache.org 配置java環境 上傳jdk1.8到服務器。安裝jdk [rootjava-tomcat1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/[rootjava-tomcat1 ~]# cd /usr/local/[rootjava-tomcat1 local]# mv jdk1.8.0_191/ java 設置環境…

51單片機獨立按鍵以及矩陣按鍵的使用以及其原理--獨立按鍵 K1 控制 D1 指示燈亮滅以及數碼管顯示矩陣按鍵 S1-S16 按下后鍵值 0-F

IO 的使用–按鍵 本文主要涉及8051單片機按鍵的使用&#xff0c;包括獨立按鍵以及矩陣按鍵的使用以及其原理&#xff0c;其中代碼實例包括: 1.獨立按鍵 K1 控制 D1 指示燈亮滅 2.通過數碼管顯示矩陣按鍵 S1-S16 按下后鍵值 0-F 文章目錄 IO 的使用--按鍵一、按鍵消抖二、獨立按…

node.js和npm的安裝與環境配置(2023最新版)

目錄 安裝node.js測試是否安裝成功測試npm環境配置更改環境變量新建系統變量 安裝node.js 1、進入官網下載&#xff1a;node.js官網 我選擇的是windows64位的&#xff0c;你可以根據自己的實際情況選擇對應的版本。 2、下載完成&#xff0c;安裝。 打開安裝程序 接受協議 選…

【RabbitMQ基礎編程模型】

文章目錄 RabbitMQ基礎編程模型基礎編程模型step1、首先創建連接&#xff0c;獲取Channelstep2、聲明Exchange-可選step3、聲明queuestep4、聲明Exchange與Queue的綁定關系-可選 RabbitMQ基礎編程模型 RabbitMQ的使用生態已經相當龐大&#xff0c;支持非常多的業務場景&#x…

五、HotSpot細節實現

一、并發標記與三色標記 問題&#xff1a;三色標記到底發生在什么階段&#xff0c;替代了什么。并發標記 1、并發標記( Concurrent Marking) 從 GC Root 開始對堆中對象進行可達性分析&#xff0c;遞歸掃描整個堆里的對象圖&#xff0c;找出要回收的對象&#xff0c;這階段耗…

【大數據分析】

系列文章目錄 文章目錄 系列文章目錄前言一、數據分析框架二、數據分析方法1.數據清洗&數據探索2.數據清洗之異常值判別3.數據清洗之缺失值處理4.數據探索5.結構優化 三、大數據可視化1.大數據可視化概念1.1 定義1.2 數據可視化的意義 2.可視化類型和模型2.1 科學可視化2.2…