使用Java ApI 實現Hadoop文件上傳

目錄

?

文件傳輸步驟

windows的本機文件傳輸

linux的虛擬機文件傳輸


?

?

文件傳輸步驟

建立連接
在connect2HDFS()方法中,通過設置Configuration對象來指定HDFS的URI(在這個例子中為hdfs://192.168.12.133:9000),并初始化一個FileSystem實例fs,用于后續的所有HDFS操作。
關閉連接
close()方法用于在完成所有HDFS操作后關閉與HDFS的連接,確保資源被正確釋放。
上傳文件并分類 (uploadAndClassify(File file)):方法接收一個本地文件作為參數。
將本地文件上傳到HDFS上的相應目錄中。
業務邏輯
該方法接受一個字符串類型的目錄路徑作為參數,將其轉換為Path對象,并檢查該路徑是否已存在。如果不存在,則創建新的目錄。
主函數執行
首先調用connect2HDFS()方法與HDFS建立連接。指定一個本地目錄(在這個例子中是/home/covid_data),然后遍歷這個目錄下的所有.json文件。對每個符合條件的文件調用uploadAndClassify(File file)方法進行處理。

package hdfs.demo;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class HDFSApiDemo {private static FileSystem fs = null;// 用于和HDFS建立連接public static void connect2HDFS() throws IOException {Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.12.133:9000");// 顯式指定本地文件系統的實現類conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");System.out.println("111");fs = FileSystem.get(conf);}// 關閉客戶端和HDFS的連接public static void close(){if(fs != null){try{fs.close();} catch (IOException e){e.printStackTrace();}}}/*** 上傳文件并分類* @param file* @throws IOException*/public static void uploadAndClassify(File file) throws IOException {// 提取所有漢字作為省份名稱Pattern pattern = Pattern.compile("([\\p{IsHan}]+).*\\.json");// 匹配所有漢字Matcher matcher = pattern.matcher(file.getName());// 匹配漢字成功if (matcher.find()) {String province = matcher.group(1);  // 獲取所有漢字組成的字符串String targetDir = "/covid_data/" + province + "/";  // 使用全部漢字作為目錄名String fileName = file.getName();System.out.println("Processing file: " + fileName);// 創建省份目錄(如果不存在)mkdir(targetDir);// HDFS目的路徑Path dst = new Path(targetDir + fileName);// 上傳文件fs.copyFromLocalFile(new Path(file.getAbsolutePath()), dst);System.out.println("Uploaded: " + fileName + " to " + targetDir);} else {System.out.println("File does not match the expected pattern: " + file.getName());}}// 重載mkdir()方法,支持String類型參數public static void mkdir(String dir) throws IOException {Path path = new Path(dir);if (!fs.exists(path)) {fs.mkdirs(path); // 創建目錄}}public static void main(String[] args) throws IOException {try {connect2HDFS();// 虛擬機上的本地目錄File localDir = new File("/home/covid_data");// 遍歷目錄下的所有文件for (File file : localDir.listFiles()) {if (file.isFile() && file.getName().endsWith(".json")) {uploadAndClassify(file);}}close();} catch (IOException e) {e.printStackTrace();}}}

windows的本機文件傳輸

對于上述代碼只需要更改上傳路徑即可
遭遇問題1:端口無法訪問

// 第一步 cd /usr/local/hadoop(安裝路徑
// 第二步 ?vi ./etc/hadoop/hdfs-site.xml
// 第三步 加入下列配置 目的:讓NameNode監聽所有網絡接口上的9000端口
<property>
? ? <name>dfs.namenode.rpc-bind-host</name>
? ? <value>0.0.0.0</value>
</property>
// 第四步 讓配置生效?
? ?先關閉HDFS命令 ? ? ?./sbin/stop-dfs.sh
? ?在重啟HDFS命令 ? ? ?./sbin/start-dfs.sh

遭遇問題2:用戶權限不足

// 改變hadoop用戶權限 這會將/data目錄的權限設置為rwxrwxrwx,允許所有用戶讀寫執行
// hdfs dfs -chmod 777 /data

linux的虛擬機文件傳輸

遭遇問題1:無法找到主類

<!-- ?添加maven-shade-plugin插件 -->
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? ? ? ? ? <artifactId>maven-shade-plugin</artifactId>
? ? ? ? ? ? ? ? <version>3.2.4</version>
? ? ? ? ? ? ? ? <executions>
? ? ? ? ? ? ? ? ? ? <execution>
? ? ? ? ? ? ? ? ? ? ? ? <phase>package</phase>
? ? ? ? ? ? ? ? ? ? ? ? <goals>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>shade</goal>
? ? ? ? ? ? ? ? ? ? ? ? </goals>
? ? ? ? ? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <transformers>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <mainClass>hdfs.demo.HDFSApiDemo</mainClass>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </transformer>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </transformers>
? ? ? ? ? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? ? ? ? ? </execution>
? ? ? ? ? ? ? ? </executions>
? ? ? ? ? ? </plugin>
// 這段Maven配置的作用是使用maven-shade-plugin插件在打包階段創建一個包含所有依賴的可執行JAR文件,并指定hdfs.demo.HDFSApiDemo作為JAR文件的主類(即包含main方法的入口類)

遭遇問題1:Hadoop嘗試使用file:// URI方案時找不到對應的文件系統實現

// 顯式指定本地文件系統的實現類
conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");

?

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

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

相關文章

喜訊 | 耘瞳科技視覺檢測與測量裝備榮膺“2024機器視覺創新產品TOP10”

3月28日&#xff0c;全球機器視覺行業盛會VisionChina2025&#xff08;上海&#xff09;機器視覺展完美收官。展會期間&#xff0c;由機器視覺產業聯盟&#xff08;CMVU&#xff09;舉辦的“2024機器視覺創新產品TOP10”企業名單正式揭曉&#xff0c;耘瞳科技“工業跨尺度場景實…

數據可視化(matplotlib)-------圖表樣式美化

目錄 一、圖表樣式概述 &#xff08;一&#xff09;、默認圖表樣式 &#xff08;二&#xff09;、圖表樣式修改 1、局部修改 2、全局修改 二、使用顏色 &#xff08;一&#xff09;、使用基礎顏色 1、單詞縮寫或單詞表示的顏色 2、十六進制/HTML模式表示的顏色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx&#xff08;發音為“engine-x”&#xff09;是一個開源的高性能HTTP服務器、反向代理服務器、負載均衡器和郵件代理服務器。它由俄羅斯程序員Igor Sysoev開發&#xff0c;首次發布于2004年&#xff0c;旨在解決C10K問題&#xff08;即如何高效地處理10,000個…

WP Mail 郵件發送:WordPress Mail SMTP設置

在我們WordPress搭建個人網站完成后&#xff0c;讀者或者客戶發送的電子郵件&#xff0c;包括你的WPForms電子郵件通知&#xff0c;如果無法到達預定收件人收件箱&#xff0c;這會對我們網站的運營造成很大的影響&#xff0c;問題在于WordPress Mail SMTP的發送方式。 SMTP&am…

小智機器人關鍵函數解析:MqttProtocol::SendAudio()對輸入的音頻數據進行加密處理,通過UDP發送加密后的音頻數據

MqttProtocol::SendAudio()對輸入的音頻數據進行加密處理&#xff0c;通過UDP發送加密后的音頻數據。 源碼&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥鎖保護臨界區&#xff0c;確保同一時間只有一個線程可以訪問該…

Hadoop 常用命令集總覽

Hadoop 常用命令集總覽 在大數據處理領域&#xff0c;Hadoop 作為一種廣泛應用的分布式系統基礎架構&#xff0c;其重要性不言而喻。熟練掌握 Hadoop 的常用命令對于高效的數據處理和分析工作至關重要。本文將對 Hadoop 的常用命令進行專業而詳盡的列舉&#xff0c;并結合實例進…

mac m4 Homebrew安裝MySQL 8.0

1.使用Homebrew安裝MySQL8 在終端中輸入以下命令來安裝MySQL8&#xff1a; brew install mysql8.0 安裝完成后&#xff0c;您可以通過以下命令來驗證MySQL是否已成功安裝&#xff1a; 2.配置mysql環境變量 find / -name mysql 2>/dev/null #找到mysql的安裝位置 cd /op…

GoLand 2024.3 中文 GO語言開發工具

GoLand 2024.3 中文 GO語言開發工具 文章目錄 GoLand 2024.3 中文 GO語言開發工具一、介紹二、效果三、下載 一、介紹 JetBrains GoLand 2024 &#xff0c;是一款GO語言開發工具&#xff0c;全行代碼補全&#xff1a;能使用本地運行的上下文感知深度學習模型&#xff0c;可以自…

Excel去掉單元格里面的換行的方法

方法一&#xff1a;使用“查找和替換”功能 ?選中單元格?&#xff1a;首先選中需要替換換行符的單元格或區域。 ?打開替換窗口?&#xff1a;按下“CtrlH”快捷鍵&#xff0c;打開“查找和替換”對話框。 ?輸入換行符?&#xff1a; 在“查找內容”框中&#xff0c;你可…

React 中的 Props

Props&#xff08;Properties 的縮寫&#xff09;是 React 中用于組件間通信的核心機制。它們允許數據從父組件單向傳遞到子組件。Props 是 React 組件不可變&#xff08;只讀&#xff09;的輸入參數&#xff0c;這種特性使得組件更加可預測且易于維護。 Props 的核心特性 單…

基于簡單神經網絡的線性回歸

一、概述 本代碼實現了一個簡單的神經網絡進行線性回歸任務。通過生成包含噪聲的線性數據集&#xff0c;定義一個簡單的神經網絡類&#xff0c;使用梯度下降算法訓練網絡以擬合數據&#xff0c;并最終通過可視化展示原始數據、真實線性關系以及模型的預測結果。 二、依賴庫 …

?19.思科路由器:OSPF協議引入直連路由的實驗研究

思科路由器:OSPF協議引入直連路由的實驗研究 一、實驗拓撲二、基本配置2.1、sw1的配置2.2、開啟交換機三層功能三、ospf的配置3.1、R1的配置3.2、R2的配置3.3、重啟ospf進程四、引入直連路由五、驗證結果隨著互聯網技術的不斷發展,路由器作為網絡互聯的關鍵設備,其性能與穩定…

USB——刪除注冊表信息

文章目錄 背景工具下載地址工具使用刪除注冊表信息背景 注測表中已記錄這個設備的信息,但現在設備描述符又指定為了 WinUSB 設備,所以當設備再次插入的時候,不會發送 0xEE 命令,造成了枚舉失敗。 兩種處理方式: 修改枚舉時候的 VID/PID刪除 USB 的注冊表信息工具下載地址…

如何快速解決django報錯:cx_Oracle.DatabaseError: ORA-00942: table or view does not exist

我們在使用django連接oracle進行編程時&#xff0c;使用model進行表映射對接oracle數據時&#xff0c;默認表名組成結構為&#xff1a;應用名_類名&#xff08;如&#xff1a;OracleModel_test&#xff09;&#xff0c;故即使我們庫中存在表test&#xff0c;運行查詢時候&#…

從 0 到跑通的 Qt + OpenGL + VS 項目的完整流程

&#x1f9e9; 全流程目標&#xff1a; 在 Visual Studio 中成功打開、編譯并運行一個 Qt OpenGL 項目&#xff08;.vcxproj 格式&#xff09; ? 第 1 步&#xff1a;安裝必要環境 工具說明Visual Studio 2017 / 2019 / 2022必須勾選 “使用 C 的桌面開發” 和 “MSVC 工具…

鴻蒙開發03樣式相關介紹(二)

文章目錄 一、樣式復用1.1 Styles修飾符1.2 Extend修飾符 二、多態樣式 一、樣式復用 在頁面開發過程中&#xff0c;會出出現大量重復的樣式設置代碼&#xff0c;可以使用Styles和Extend修飾符將幫助我們進行樣式復用。 1.1 Styles修飾符 Styles裝飾器可以將多條樣式設置提煉…

裝飾器模式與模板方法模式實現MyBatis-Plus QueryWrapper 擴展

pom <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 聯表查詢 --> </dependency>MPJLambdaWrapperX /*** 拓展 MyBatis Plus Join QueryWrapper 類&…

05-031-自考數據結構(20331)- 哈希表 - 例題分析

哈希表考題主要涵蓋四大類型:1)函數設計類(如除留余數法計算地址,需掌握質數p的選擇技巧);2)沖突處理類(線性探測法要解決堆積現象,鏈地址法需繪制鏈表結構);3)性能分析類(重點計算ASL,理解裝填因子α的影響規律);4)綜合應用類(如設計ISBN查詢系統,需結合實際問…

rustdesk 自建服務器 key不匹配

請確保id_ed25519文件的權限為&#xff1a; -rw------- 1 root root 88 Apr 31 10:02 id_ed25519在rustdesk安裝目錄執行命令&#xff1a; chmod 700 id_ed25519

Dify 深度集成 MCP實現災害應急響應

一、架構設計 1.1 分層架構 #mermaid-svg-5dVNjmixTX17cCfg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5dVNjmixTX17cCfg .error-icon{fill:#552222;}#mermaid-svg-5dVNjmixTX17cCfg .error-text{fill:#552222…