本地 Java API 訪問云上 HDFS 集群的問題與解決

前言

這篇文章默認是已經在云上配置好了 Haoop 集群,因此本文主要是記錄一些可能會出現錯誤的地方。

如果還不會配置 Hadoop 集群,那么可以參考本專欄的另一篇文章:云上配置 Hadoop 集群詳解

另外在進行本文的學習之前也建議先看看該文章,因為一些基本概念這里不會再進行解釋了嗷。

1、本地(windows)配置主機名映射

在使用 Java API 進行遠程訪問之前,要先在本地的 Windows 環境下配置上相應的主機名映射捏。

打開下面路徑,進行文件配置:

C:\Windows\System32\drivers\etc\hosts

打開該文件,可以看到下面的內容:

在這里插入圖片描述

我們需要在上面追加一行內容,內容格式為:

xxx.xxx.xxx.xxx cloud_host_name

其中前面的 xxx.xxx.xxx.xxx 為你的云服務器的公網 IP 地址,后面的 cloud_host_name 則是你云服務器上的主機名稱,該主機名稱可以在云服務器上鍵入命令:hostname 得知:

在這里插入圖片描述

因此,假設你的服務器的公網 IP 地址為 111.123.123.123,且云服務器的主機名為 VM-8-4-ubuntu 那么需要追加的內容就是:

111.123.123.123 VM-8-4-ubuntu

2、本地(windows)配置JDK以及Hadoop的環境變量

本地連接云服務器的Hadoop集群時需要配置 Hadoop 的環境變量,否則啟動會報錯,而配置 Hadoop 的環境變量時又依賴 JDK 的環境變量,因此也要配置好 JDK 的本地環境變量。

配置環境變量這個網上教程就太多了,隨便 CSDN 一下都一大把,因此這里不再贅述。

3、云服務器上需要進行的配置

3.1、首先也是需要進行主機名的映射

Linux的主機名配置在根目錄下的 /etc/hosts 文件中,注意需要切換成 root 用戶才有權限進行更改:

/etc/hosts

在這里插入圖片描述

使用 vim 打開后,如下:

在這里插入圖片描述

這里要注意,上圖已經是我修改過后的 hosts 文件了,因此如果你和我的不一樣那么也很正常,你只要改成我上面的樣子即可。

那么重點改哪里呢:

眾所周知,在我們購買云服務器時,會有兩個 IP 地址,一個是公網 IP 地址另一個是內網 IP 地址:
在這里插入圖片描述

形式基本如上圖如所示,那么在云上的 Hadoop 集群中,其內部通信是通過內網進行的,因此我們需要配上類似于剛剛在 Windows 環境上的操作,即在 /etc/hosts 文件中追加下面內容:

內網地址IP 云服務器主機名
如
192.168.88.152 VM-8-4-ubuntu

如果你的云服務器主機名的默認情況下被映射到了別的IP地址(多半是本地環回地址),那么請將其去掉改成上述內容。

總之就是確保你的云服務器主機名所對應的只有一個內網IP地址即可,因為如果有多個的話我們自己設置的內網IP映射主機名的優先級不夠別的映射關系級別高,會讓我們自己設置的不起作用。

3.2、修改Hadoop的配置文件

主要是 Hadoop 文件夾下的下面幾個文件:

在這里插入圖片描述

1、修改 workers 文件:

vim 打開 workers ,寫入我們的主機名(注意一定是本機的主機名嗷),因為我只有一臺云服務器,所以我只在該文件中寫入一個主機名即可,因此相當于是在構建一個偽分布式 Hadoop 集群:

在這里插入圖片描述

2、vim 打開 core-site.xml 文件:

在該文件中配置好我們的內部通訊端口,也就是我們的 namenode 主節點,我這唯一一臺的云服務器既是主節點也是從節點,即既是namenode 節點也就是 datanode 節點,因此這里配置主節點用的是本服務器的主機名(注意一定是本機的主機名嗷):

在這里插入圖片描述

3、vim 打開 hdfs-site.xml 文件

在上文剛剛提過,我這唯一一臺服務器既是主節點也是從節點,因此這里配置數據節點 datanode 時,同樣采用的本機的主機名(注意一定是本機的主機名嗷):

在這里插入圖片描述

全部弄完這些之后,就可以格式化 namenode 然后啟動 hdfs 集群了。

格式化時不出意外按照上面的配置流程走下來,格式化完后的結果應該如下:

在這里插入圖片描述

“Shutting down NameNode at VM-8-4ubuntu(也就是你的服務器主機名)/10.0.8.4(也就是你服務器的內網IP地址)”

格式化后如果如上,那么配置應該就沒有問題了。

4、注意云服務器的端口開放問題

因為云服務器的端口默認只開放了幾個,而 hdfs 集群會涉及較多的端口,因此這里根據我的經驗需要開放下面幾個:

首先是我們在之前的配置中所配置的 namenode 的通訊端口:8020,注意這個是我們自己可以配置的:

在這里插入圖片描述

然后是在集群內部各個節點之間的通訊端口,這是 Hadoop 的 HDFS 默認占用的端口,請注意這幾個端口有無被占用:

在這里插入圖片描述

把這幾個端口開放了應該連接就沒有問題了。

5、測試

可以使用下面的 Java 代碼進行簡單的測試,也可以讓 GPT 生成一些測試代碼來進行簡單的測試:

@PostMapping("/upload")public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException, InterruptedException {//1. 初始化配置對象 需要new出來,用來配置Hadoop的集群節點信息,主要是配置主節點namenodeConfiguration conf = new Configuration();//下面這行代碼告訴Hadoop客戶端使用數據節點(Datanode)的主機名來建立連接,而不是使用IP地址//因為在分布式環境下,節點(包括數據節點)的IP地址可能會發生變化,而主機名通常是穩定的。//因此,通過使用主機名而不是IP地址,可以提高Hadoop集群的可維護性和可靠性conf.set("dfs.client.use.datanode.hostname", "true");//2. 添加配置 (其實就是提供一個key - value)//xxx.xxx.xxx.xxx改成你的公網IP地址嗷FileSystem fileSystem = FileSystem.get(URI.create("hdfs://xxx.xxx.xxx.xxx:8020"),conf,"ubuntu");//4、將前端傳來的文件數據上傳至hdfs/*用MultipartFile的getInputStream方法,獲得輸入流,隨后轉換成Hadoop的FSDataOutputStream輸出流后,就可以將文件上傳到Hadoop最后記得flush和close輸入輸出流*/InputStream inputStream = null;FSDataOutputStream fsDataOutputStream = null;try{inputStream = file.getInputStream();//用戶上傳文件存儲在hdfs中的路徑//截取文件名后綴來分別進行存儲String fileName = file.getOriginalFilename();Path desPath = new Path("/"+fileName);//創建路徑后寫入文件fsDataOutputStream = fileSystem.create(desPath);byte[] b = new byte[4096];int read;while((read=inputStream.read(b)) > 0){fsDataOutputStream.write(b,0,read);}fsDataOutputStream.flush();return ResponseEntity.ok().body("File uploaded to HDFS successfully.");} catch (IOException e){e.printStackTrace();} finally {if (null != inputStream) inputStream.close();if (null != fsDataOutputStream) fsDataOutputStream.close();}//關閉hdfs的連接工具if (fileSystem != null) {fileSystem.close();}return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file to HDFS");}

6、其他問題

如果還出現了其他的報錯,那么建議自己反復檢查一下自己的配置以及程序,不然就多多百度,按我的經驗應該是將上面的步驟挨個做完應該就能解決了。

還有一個問題,如果出現了往 HDFS 上寫入文件只能寫入文件名卻無法寫入文件內容的情況時,或者報錯類似于:

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.

可以參考下面這篇文章:使用Java API 向 HDFS 中寫入數據報錯解決;

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

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

相關文章

邊緣計算的AI小板——OrangePi AI Pro

簡介 OrangePi AI Pro是一款基于Allwinner H6處理器的嵌入式AI計算設備&#xff0c;適用于物聯網和邊緣計算。它具有強大的性能、低功耗、多接口和小尺寸。 本文分為三個部分&#xff1a; 一、對該板進行簡單的開箱介紹。 二、 將SD卡中的系統遷移到由于該板支持SD卡、SSD…

必看——怎么讓網站實現HTTPS訪問?

讓網站實現HTTPS訪問的步驟可以簡化為以下幾個基本步驟&#xff0c;非常適合非技術背景人士理解&#xff1a; 1. 申請SSL證書&#xff1a; - SSL證書是實現HTTPS的關鍵&#xff0c;它能加密網站數據&#xff0c;保證用戶信息的安全。你可以從一些提供免費SSL證書的機構&#xf…

Spring boot集成mybatis

Spring boot集成mybatis maven依賴 我的spring boot版本是2.5.0&#xff0c;集成mybatis&#xff0c;首先需要數據庫的支持&#xff0c;這里我選擇mysql數據庫&#xff0c;版本是8.0.11&#xff0c;然后使用druid連接池&#xff0c;其次就需要加上mybatis的依賴。 <!--mys…

[ue5]建模場景學習筆記(2)——用vectornoise降低重復率

1.問題分析&#xff1a; 利用改uv的方式降低重復率并不理想&#xff0c;在一定程度上的確能夠達到降低重復率的效果&#xff0c;但遠看仍然有較清晰的重復效果&#xff0c;嘗試優化一下。 2.操作實現&#xff1a; 1.首先先看一下修改后的效果&#xff1a; 這是未修改前&#…

centos打包離線phtone3安裝包rpm

在有網絡的環境中&#xff0c;下載Python3的RPM包及其所有依賴。 打包離線phtone3安裝包centos7rmp # 安裝 yum-utils&#xff0c;這個包包含了 yumdownloader yum install yum-utils # 創建一個目錄來保存下載的RPM包 mkdir python3-rpms # 下載Python3及其所有依賴 yu…

「前端+鴻蒙」核心技術HTML5+CSS3(八)

1、網站布局詳解 網站布局是前端開發中的核心概念之一,它決定了網頁的視覺結構和用戶瀏覽的邏輯順序。以下是幾種常見的布局方式及其代碼示例: 固定布局: 固定布局通常具有固定的寬度和高度,適用于傳統的桌面視圖。 <!DOCTYPE html> <html> <head><…

【Web API DOM02】如何獲取、操作DOM元素

一&#xff1a;獲取DOM元素 1 根據CSS選擇器獲取 語法格式如下&#xff1a; &#xff08;1&#xff09;選中一個DOM元素 document.querySeletor(CSS選擇器) <ul><li>1</li><li>2</li><li>3</li> </ul> document.querySel…

Github上一款開源、簡潔、強大的任務管理工具:Condution

Condution 是一款開源任務管理工具&#xff0c;它以簡潔易用、功能強大著稱。它旨在為用戶提供一個簡單高效的平臺&#xff0c;幫助他們管理日常任務、提高工作效率。 1. Condution 的誕生背景 現如今&#xff0c;市面上存在著許多任務管理軟件&#xff0c;但它們往往價格昂貴…

如何不用口吐蓮花,照樣成為社交達人

一、教程描述 每個人的一生&#xff0c;70%的時候都在溝通&#xff0c;與老板溝通、與家人溝通、與朋友溝通、與陌生人溝通&#xff0c;等等&#xff0c;但是你真的會溝通么&#xff1f;不論是工作上跟上司、同事和客戶間的溝通&#xff0c;還是生活中與家人、朋友、伴侶間的溝…

[ICPC2024 Xi‘an I] ICPC2024 邀請賽西安站(7/8/13)

心得 [ICPC2024 Xian I] ICPC2024 邀請賽西安站重現賽 - 比賽詳情 - 洛谷 7表示賽時ac了7個&#xff0c;8表示含補題總共ac數&#xff0c;13表示題目總數 題目 M. Chained Lights 打表&#xff0c;發現只有k1是YES //#include <bits/stdc.h> #include<iostream&…

Mysql 技術實戰篇

命令行 導出 - -h localhost&#xff1a;指定MySQL服務器的主機地址為本地主機。如果MySQL服務器在其他主機上&#xff0c;請將localhost替換為相應的主機地址。 - -u username&#xff1a;指定連接MySQL服務器的用戶名。將username替換為您的有效用戶名。 - -p&#xff1a;提…

Makefile教程(附通用模板)

工程目錄 工程目錄如圖&#xff0c;build文件夾是編譯出來的 . ├── app │ ├── imx6ul.lds │ ├── main.c │ ├── makefile │ └── start.S ├── bsp │ ├── clk │ │ ├── bsp_clk.c │ │ └── bsp_clk.h │ ├── delay │…

軟考 系統架構設計師系列知識點之SOME/IP與DDS(1)

本文內容參考&#xff1a; 車載以太網 - SOME/IP簡介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 詳解系列&#xff08;1&#xff09;—— 概述_some ip-CSDN博客 深入淺出SOME/IP協議&#xff1a;基本概念和原理-…

天童教育:停止內耗放松身心

如果一個人經常從自己身上找原因&#xff0c;經常攬下他人的過錯的責任&#xff0c;總是自我懷疑自我否定&#xff0c;認為自己不值得被愛。當被人誤解時會在心里悄悄附和&#xff0c;責怪自己。缺乏自信&#xff0c;沒辦法和他人有正常的交往&#xff0c;長期處于身心疲憊的狀…

Python與Python3的區別:深度剖析與全面解讀

Python與Python3的區別&#xff1a;深度剖析與全面解讀 在編程領域&#xff0c;Python和Python3是兩個常被提及的版本&#xff0c;它們之間既存在相似之處&#xff0c;又有著顯著的區別。本文將從四個方面、五個方面、六個方面和七個方面&#xff0c;深入剖析Python與Python3之…

OJ3376無盡的石頭問題

答案&#xff1a; #include<bits/stdc.h> using namespace std; const int N10e7; int fx(int n) {int sum0;while(n){sum(n%10);n/10;}return sum; } int main() {int t,n,x;cin>>t;while(t--){cin>>n;int count0;for(int i1;i<N;){if(in){cout<<…

在github上創建(上傳、關聯)自已的項目

目錄 創建一個github項目并進行開發。 1.github創建空項目 2. git clone 項目 3. 將項目關聯 創建一個github項目并進行開發。 1.github創建空項目 右邊的New 然后按步創建就行 2. git clone 項目 復制這個連接 然后在終端&#xff1a;git clone [剛才復制的連接] 3. 將…

解讀 Explainable Image Similarity Integrating Siamese Networks and Grad-CAM

給出論文&#xff08;Explainable Image Similarity Integrating Siamese Networks and Grad-CAM&#xff09;的內容解讀、代碼運行說明 論文鏈接&#xff1a;J. Imaging | Free Full-Text | Explainable Image Similarity: Integrating Siamese Networks and Grad-CAM (mdpi.c…

純網絡的系統能否定級備案?

很多單位想把網絡基礎設施進行定級備案和測評&#xff0c;但是不知道這樣可否&#xff1f; 目前湖北省是可以的。因為根據《定級指南》的術語解釋3.2對等級保護對象的定義是包括通信基礎設施的&#xff0c;也就是網絡基礎設施。其他地區目前有的地方可以有的地方不行&#xff…

2024年武漢東湖高新中級職稱報名時間是什么時候?

2024年武漢市東湖高新中級職稱上半年批次報名已經截止了&#xff0c;下半年東湖高新至少還有一次報名機會&#xff0c;所以各位東湖高新區評職稱的朋友們&#xff0c;不要錯過這次了。 2024年武漢東湖高新區中級職稱報名條件&#xff1a; 1.東湖高新區社保滿足1年&#xff0c;近…